![](/img/trans.png)
[英]Reset flags back to normal using gpio-cdev and Rust in Raspberry Pi
[英]How do you read or write to GPIO pins on a Raspberry Pi 4 without using a high-level library?
我正在嘗試這個 Rust,但代碼是段錯誤的:
unsafe {
const PERIPH_BASE: u32 = 0xFE000000;
const GPIO_BASE: u32 = PERIPH_BASE + 0x00200000;
// Turn on pin GPIO 24
ptr::write_volatile(GPIO_BASE as *mut u32, 1 << 24);
}
我懷疑這是由於使用了錯誤的地址。 我找到的有關該主題的唯一信息是 RP 論壇帖子。 我無法在 RP4 數據表中找到信息,也找不到 Broadcom 芯片組的手冊。
我在 Raspberry Pi SBC 上的 Raspian 上運行此代碼。 我試圖概括代碼,以便以后更容易移植到真正的嵌入式,因此我避免使用庫。
我已經查看了 rppal 和嵌入式 hal,但很驚訝沒有找到解決方案。 我已經查看了gpio
模塊代碼中的每個文件。 mem.rs 和 ioctl.rs 看起來最接近,但我一直找不到它。
您正在直接寫入進程地址空間。 我認為直接寫入物理內存可能會更成功。 這是RPPAL 的做法:
let mem_file = OpenOptions::new()
.read(true)
.write(true)
.custom_flags(O_SYNC)
.open(PATH_DEV_MEM)?;
// Memory-map /dev/mem at the appropriate offset for our SoC
let mem_ptr = unsafe {
libc::mmap(
ptr::null_mut(),
GPIO_MEM_SIZE,
PROT_READ | PROT_WRITE,
MAP_SHARED,
mem_file.as_raw_fd(),
(device_info.peripheral_base() + device_info.gpio_offset()) as off_t,
)
};
您可以在 Raspbian 中訪問/dev/mem
中的物理內存,但您可能需要 root。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.