簡體   English   中英

如何在不使用高級庫的情況下讀取或寫入 Raspberry Pi 4 上的 GPIO 引腳?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM