6 个版本
新 0.1.0 | 2024 年 8 月 19 日 |
---|---|
0.0.5 | 2023 年 1 月 22 日 |
0.0.3 | 2022 年 11 月 14 日 |
#355 在 硬件支持
111 每月下载量
51KB
692 行
PiFace Digital 驱动器
一个通过 SPI 总线访问的 Raspberry Pi 的 PiFace Digital I/O 扩展器的驱动程序。
示例用法
有关更多示例,请参阅 ${CARGO_MANIFEST_DIR}/examples
文件夹中的内容。
use rppal_pfd::{ChipSelect, HardwareAddress, Level, PiFaceDigital, SpiBus, SpiMode};
// Create an instance of the driver for the device with the hardware address
// (A1, A0) of 0b00 on SPI bus 0 clocked at 100kHz. The address bits are set using
// `JP1` and `JP2` on the PiFace Digital board.
let mut pfd = PiFaceDigital::new(
HardwareAddress::new(0).expect("Invalid hardware address"),
SpiBus::Spi0,
ChipSelect::Cs0,
100_000,
SpiMode::Mode0,
).expect("Failed to create PiFace Digital");
pfd.init().expect("Failed to initialise PiFace Digital");
// Take ownership of the output pin on bit 4 of the device.
let pin = pfd
.get_output_pin(4)
.expect("Failed to get Pin");
// Set the pin to logic-level low.
pin.write(Level::Low).expect("Bad pin write");
特性
该 crate 实现以下特性。
mockspi
该 crate 使用模拟代码编译所有访问真实 Raspberry Pi 硬件的代码,以便代码可以在非 Raspberry Pi 硬件上成功编译和运行
- 移除了访问 GPIO(用于处理来自 MCP23S17 的中断)的 PiFaceDigital 代码。
- 从
rppal_mcp23s17
crate 中的 MCP23S17 代码使用模拟 SPI,它允许在 MCP23S17 的寄存器中非常简单地设置测试数据,并检查是否已执行预期的读取和写入操作。
构建
您可能需要交叉编译此代码以用于目标 Raspberry Pi。该项目包括一个 Makefile.toml
,用于与 cargo-make
一起使用,它具有使用 cross
交叉编译环境执行的任务
- rpi - 为目标 Raspberry Pi 构建调试版本。
- rpi-release - 为目标 Raspberry Pi 构建发布版本。
- rpi-test - 在
qemu
模拟下测试目标代码。
在您的项目中,您可能需要使用类似的交叉编译环境,并像这样调用您的构建:
cross build --target arm-unknown-linux-gnueabihf # First generation Raspberry Pi.
cross build --target armv7-unknown-linux-gnueabihf # Later Raspberry Pi versions.
当测试底层rppal-mcp23s17
库时,它将编译成一个简单的模拟SPI,允许你编写在宿主环境中运行的单元测试,而不需要目标硬件。同样,这个库还将编译一个访问函数TODO
,你的单元测试可以通过它访问模拟SPI来设置测试数据和检查I/O扩展器是否按预期配置。
并发警告
请注意,包含在PiFaceDigital
中的rppal_mcp23s17
是!Send
,这意味着设备只能在单个线程的上下文中使用。然而,没有阻止不同线程上的独立实例访问相同的MCP23S17设备。然而,当涉及到PiFace Digital本身时,它需要拥有树莓派GPIO-25
引脚的所有权,该引脚用作中断输入。目前,这会导致系统上只能存在一个PiFace Digital设备,因为尝试创建第二个设备将因“GPIO设备忙”错误而失败。
需要进一步的工作才能允许单个进程共享中断;由于这是中断的用户空间架构,进程间的共享可能始终是不可能的。
致谢
这个库从PiFace Digital I/O Python库的设计中汲取了许多灵感和指导。
这个库遵循了RPPAL库中使用的某些API设计模式。
谢谢!
依赖项
~0.8–1.4MB
~31K SLoC