10个版本 (5个重大更新)
0.6.0 | 2023年8月9日 |
---|---|
0.5.1 | 2021年11月22日 |
0.4.1 | 2021年2月21日 |
0.4.0 | 2019年6月7日 |
0.1.0 | 2015年5月21日 |
#3 in #spi
每月20,931次下载
在 143 个crate中使用 (23 个直接使用)
26KB
311 行
Rust Spidev
Rust的spidev
旨在在不使用任何C代码或直接进行底层系统调用的前提下,为Rust提供对Linux spidev设备的完全访问。spidev接口的文档可以在https://linuxkernel.org.cn/doc/Documentation/spi/spidev找到。
示例/API
以下不是Spidev接口的全面演示,但提供了在实际中使用库的大致方法。
extern crate spidev;
use std::io;
use std::io::prelude::*;
use spidev::{Spidev, SpidevOptions, SpidevTransfer, SpiModeFlags};
fn create_spi() -> io::Result<Spidev> {
let mut spi = Spidev::open("/dev/spidev0.0")?;
let options = SpidevOptions::new()
.bits_per_word(8)
.max_speed_hz(20_000)
.mode(SpiModeFlags::SPI_MODE_0)
.build();
spi.configure(&options)?;
Ok(spi)
}
/// perform half duplex operations using Read and Write traits
fn half_duplex(spi: &mut Spidev) -> io::Result<()> {
let mut rx_buf = [0_u8; 10];
spi.write(&[0x01, 0x02, 0x03])?;
spi.read(&mut rx_buf)?;
println!("{:?}", rx_buf);
Ok(())
}
/// Perform full duplex operations using Ioctl
fn full_duplex(spi: &mut Spidev) -> io::Result<()> {
// "write" transfers are also reads at the same time with
// the read having the same length as the write
let tx_buf = [0x01, 0x02, 0x03];
let mut rx_buf = [0; 3];
{
let mut transfer = SpidevTransfer::read_write(&tx_buf, &mut rx_buf);
spi.transfer(&mut transfer)?;
}
println!("{:?}", rx_buf);
Ok(())
}
fn main() {
let mut spi = create_spi().unwrap();
println!("{:?}", half_duplex(&mut spi).unwrap());
println!("{:?}", full_duplex(&mut spi).unwrap());
}
功能
以下功能已实现并计划在库中实现
- 实现Read特例
- 实现Write特例
- 支持全双工传输
- 支持配置spidev设备
- 支持查询spidev配置状态
最低支持的Rust版本 (MSRV)
此crate保证在稳定Rust 1.56.1及更高版本上编译。它可能能够编译旧版本,但在任何新的补丁版本中可能会改变。
交叉编译
您正在运行的机器很可能不是您的开发机器(尽管它可能是)。在这些情况下,您将需要进行交叉编译。以下基本说明应该适用于树莓派或beaglebone black。
- 安装rust和cargo
- 安装合适的交叉编译器。在Ubuntu系统上,可以通过执行以下命令完成:
sudo apt-get install g++-arm-linux-gnueabihf
。 - 为您的目标构建或安装Rust。为了使libstd可用于您的目标,这是必要的。对于arm-linux-gnueabihf,您可以在https://github.com/japaric/ruststrap找到二进制文件。使用这种方法或自己构建,您需要将${rust}/lib/rustlib/arm-unknown-linux-gnueabihf复制到您的系统Rust库文件夹(它以三元组命名空间,因此不会破坏任何东西)。
- 通过将以下行添加到您的~/.cargo/config文件中,告诉cargo如何链接。
- 运行您的构建
cargo build --target=arm-unknown-linux-gnueabi
。
以下添加到我的~/.cargo/config的片段对我有效
[target.arm-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
许可证
在您选择的以下许可证下许可
- Apache License,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,均应按上述方式双重许可,不附加任何其他条款或条件。
行为准则
此crate的贡献是在Rust行为准则的条款下组织的,该crate的维护者、嵌入式Linux团队承诺将介入以维护该行为准则。
依赖关系
~1.5MB
~35K SLoC