9 个版本

0.4.0 2024年3月12日
0.3.3 2024年3月5日
0.3.2 2023年7月17日
0.3.1 2023年3月6日
0.1.0 2019年9月2日

#398 in 嵌入式开发

MIT/Apache

54KB
881

pn532

github Crates.io docs.rs

no_std 实现的 Pn532 协议,使用 embedded_hal 特性。

由于与 Pn532 的通信有时会相当慢,因此可以将通信分成多个部分,提供超时或使用异步运行时。

Pn532 支持不同的串行链路。 Interface 特性抽象了这些不同的链路。

Interface 可以手动实现,或使用提供的四个接口结构体之一

  • spi::SPIInterface
  • spi::SPIInterfaceWithIrq
  • i2c::I2CInterface
  • i2c::I2CInterfaceWithIrq

SPI 示例

use pn532::{requests::SAMMode, spi::SPIInterface, Pn532, Request};
use pn532::spi::SPIInterface;

// spi, cs and timer are structs implementing their respective embedded_hal traits.

let interface = SPIInterface {
    spi,
    cs,
};
let mut pn532: Pn532<_, _, 32> = Pn532::new(interface, timer);
if let Err(e) = pn532.process(&Request::sam_configuration(SAMMode::Normal, false), 0, 50.ms()){
    println!("Could not initialize PN532: {e:?}")
}
if let Ok(uid) = pn532.process(&Request::INLIST_ONE_ISO_A_TARGET, 7, 1000.ms()){
    let result = pn532.process(&Request::ntag_read(10), 17, 50.ms()).unwrap();
    if result[0] == 0x00 {
        println!("page 10: {:?}", &result[1..5]);
    }
}

msb-spi 功能

如果您想使用 spi::SPIInterfacespi::SPIInterfaceWithIrq,并且您的外围设备不能设置为 lsb 模式,则需要启用此crate的 msb-spi 功能。

std 功能

启用 std 功能以使用 serialport::SerialPortInterface。仅适用于 serialport crate 支持的目标。

许可证

根据您的选择,受 Apache License, Version 2.0MIT 许可证 许可。
除非您明确声明,否则您有意提交以包含在此 crate 中的任何贡献,根据 Apache-2.0 许可证定义,应如上双重许可,无任何额外条款或条件。

依赖关系

~70–710KB
~11K SLoC