Crate pn532

Crate pn532 

Source
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:

§Troubleshooting

§General

§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§

pub use crate::requests::Request;
pub use nb;

Modules§

i2c
I2C interfaces
requests
Pn532 Requests
serialportstd
SerialPort interface
spi
SPI interfaces

Structs§

Pn532
Main struct of this crate

Enums§

Error
Pn532 Error
ErrorCode
Some commands return a status byte. If this byte is not zero it will contain an ErrorCode.

Traits§

CountDown
A count-down timer
Interface
Abstraction over the different serial links. Either SPI, I2C or HSU (High Speed UART).
IntoDuration
Extension trait with convenience methods for turning u64 into Duration