#spi #外设 #spi接口 #树莓派 #树莓派 #pi #bcm2709

bcm2709-spi

为 Linux 主机提供裸机(通过 mmap(...))访问 BCM2709 SPI 外设的 Rust 库

2 个版本

使用旧的 Rust 2015

0.1.1 2017年7月20日
0.1.0 2017年7月20日

#1805 in 硬件支持

MIT 许可证

25KB
617

概述

有时在树莓派上加载 SPIDev 内核模块是个头疼的问题。

有时你需要快速访问 SPI 设备的方法。

这是一个快速访问 SPI 设备的库,但很少考虑与其他进程/外设的良好协作。对 SPI 外设的访问是通过 mmap() 实现的,没有提供任何外设互斥的机制。

初始化将更新 GPIO 寄存器以将引脚复用到 SPI 功能。因此,请不要与使用与 SPI 引脚相同引脚上的 Linux GPIO 驱动器的东西一起使用。

未实现中断。


lib.rs:

rust-bcm-2709-spi

通过 mmap(...) 和直接内存 I/O 以低性能 SPI 接口访问 BCM2709 硬件外设。

当您无法加载特定驱动程序时使用。可能最好使用 SPIDev 内核模块。但这可能在某些测试时有所帮助。

用法

extern crate bcm2709_spi;
use bcm2709_spi::{gpio, spi, DirectMemory};

pub fn main() {
  let mem = match DirectMemory::get() {
    Err(x) => { println!("Failed: {}", x); return; },
    Ok(x) => x
  }
  
  let spi = match mem.spi() {
    Err(x) => { println!("Couldn't create SPI: {}", x); return; },
    Ok(x)  => x
  }
  
  spi.set_clock( 32 );   // Recommend above 4; loopback misses bits at clk=4.
  
  spi.start_transaction();
  let byte_read = spi.write_byte( b'A' );   // =65u8 when a loopback wire placed between MISO and MOSI
  spi.stop_transaction();
}

依赖项

~49KB