Expand description
no_std
implementation of the Pn532
protocol using embedded_hal
traits.
Since communication with the Pn532 can be rather slow at times, communication can be split into multiple parts, a timeout can be provided or an async runtime can be used.
The Pn532 supports different serial links. The Interface
trait abstracts
over these different links.
Interface
can be manually implemented or one these provided interface structs can be used:
spi::SPIInterface
spi::SPIInterfaceWithIrq
i2c::I2CInterface
i2c::I2CInterfaceWithIrq
serialport::SerialPortInterface
§Troubleshooting
§General
- check you’re using
Request::sam_configuration
to initialize the PN532
§I2C
- check wiring
- check you’re using external pull-up resistors
§SPI
- check wiring
- check you set the SPI mode to
Mode0
(CPOL = 0, CPHA = 0) - check you set the SPI to LSB mode (oftentimes this is not the default) or enable the
msb-spi
feature
§SPI example
use pn532::{requests::SAMMode, spi::SPIInterface, Pn532, Request};
use pn532::IntoDuration; // trait for `ms()`, your HAL might have its own
// spi is a struct implementing embedded_hal::spi::SpiDevice
// timer is a struct implementing pn532::CountDown
let mut pn532: Pn532<_, _, 32> = Pn532::new(SPIInterface { spi }, 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
feature
If you want to use either spi::SPIInterface
or spi::SPIInterfaceWithIrq
and
your peripheral cannot be set to lsb mode you need to enable the msb-spi
feature of this crate.
§std
feature
Enable the std feature to use serialport::SerialPortInterface
Only works for targets supported by the serialport
crate.
Re-exports§
Modules§
- i2c
- I2C interfaces
- requests
- Pn532 Requests
- serialport
std
- SerialPort interface
- spi
- SPI interfaces
Structs§
- Pn532
- Main struct of this crate
Enums§
- Error
- Pn532 Error
- Error
Code - Some commands return a status byte.
If this byte is not zero it will contain an
ErrorCode
.
Traits§
- Count
Down - A count-down timer
- Interface
- Abstraction over the different serial links. Either SPI, I2C or HSU (High Speed UART).
- Into
Duration - Extension trait with convenience methods for turning
u64
intoDuration