cryptnox-sdk-esp32 1.0.0
ESP32 SDK for Cryptnox Hardware Wallet
Loading...
Searching...
No Matches
pn532.c File Reference
#include "pn532.h"
#include "driver/gpio.h"
#include "driver/i2c_master.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include <string.h>
Include dependency graph for pn532.c:

Go to the source code of this file.

Macros

#define PN532_PREAMBLE   (0x00U)
#define PN532_STARTCODE1   (0x00U)
#define PN532_STARTCODE2   (0xFFU)
#define PN532_POSTAMBLE   (0x00U)
#define PN532_HOSTTOPN532   (0xD4U)
#define PN532_FIRMWAREVERSION   (0x02U)
#define PN532_SAMCONFIGURATION   (0x14U)
#define PN532_INLISTPASSIVETARGET   (0x4AU)
#define PN532_INDATAEXCHANGE   (0x40U)
#define PN532_INRELEASE   (0x52U)
#define PN532_SPI_STATREAD   (0x02U)
#define PN532_SPI_DATAWRITE   (0x01U)
#define PN532_SPI_DATAREAD   (0x03U)
#define PN532_SPI_READY   (0x01U)
#define PN532_SPI_CLOCK_HZ   (1000000U)
#define PN532_SPI_MODE   (0U)
#define PN532_SPI_NO_PIN   (-1)
#define PN532_SPI_QUEUE_SIZE   (1U)
#define PN532_SPI_BITS   (8U)
#define PN532_I2C_TIMEOUT_MS   (100)
#define PN532_I2C_TX_MAX   (PN532_MAX_APDU_LEN + 16U)
#define PN532_I2C_RX_MAX   (200U)
#define PN532_CS_TOGGLE_DELAY_MS   (2U)
#define PN532_WAKEUP_DELAY_MS   (1000U)
#define PN532_SYNC_DELAY_MS   (100U)
#define PN532_POLL_INTERVAL_MS   (10U)
#define PN532_CMD_TIMEOUT_MS   (1000U)
#define PN532_APDU_TIMEOUT_MS   (5000U)
#define PN532_BYTE_DELAY_MS   (1U)
#define GPIO_LEVEL_LOW   (0U) /* drive pin low */
#define GPIO_LEVEL_HIGH   (1U) /* drive pin high */
#define GPIO_PIN_BITMASK_BASE   (1ULL) /* base bit for gpio_config_t.pin_bit_mask */
#define PN532_WAKEUP_BYTE   (0x55U)
#define PN532_ACK_LEN   (6U)
#define PN532_FRAME_TFI_OVERHEAD   (1U)
#define PN532_FIRMWARE_CMD_LEN   (1U)
#define PN532_FIRMWARE_RESP_LEN   (13U) /* matches Adafruit_PN532::getFirmwareVersion */
#define PN532_FIRMWARE_HDR_LEN   (7U)
#define PN532_FW_IC_OFFSET   (7U)
#define PN532_FW_VER_OFFSET   (8U)
#define PN532_FW_REV_OFFSET   (9U)
#define PN532_FW_SUPPORT_OFFSET   (10U)
#define PN532_SAM_CMD_LEN   (4U)
#define PN532_SAM_RESP_LEN   (9U)
#define PN532_SAM_RESP_CODE_OFFSET   (6U)
#define PN532_SAM_RESP_CODE   (0x15U) /* SAMCONFIGURATION + 1 */
#define PN532_SAM_NORMAL_MODE   (0x01U)
#define PN532_SAM_TIMEOUT   (0x14U) /* 50 ms x 20 = 1 s */
#define PN532_SAM_USE_IRQ   (0x01U)
#define PN532_PASSIVE_CMD_LEN   (3U)
#define PN532_PASSIVE_RESP_LEN   (64U)
#define PN532_PASSIVE_MAX_TARGETS   (1U)
#define PN532_PASSIVE_NUM_TARGETS_OFFSET   (7U)
#define PN532_PASSIVE_EXPECTED_TARGETS   (1U)
#define PN532_PASSIVE_UID_LEN_OFFSET   (12U)
#define PN532_PASSIVE_UID_DATA_OFFSET   (13U)
#define PN532_BYTE_SHIFT_BITS   (8U)
#define PN532_EXCHANGE_CMD_OVERHEAD   (2U)
#define PN532_EXCHANGE_TG   (0x01U)
#define PN532_EXCHANGE_FRAME_MAX   (440U)
#define PN532_EXCHANGE_LEN_OFFSET   (3U)
#define PN532_EXCHANGE_STATUS_OFFSET   (7U)
#define PN532_EXCHANGE_DATA_OFFSET   (8U) /* frame[8] = first DataOut byte for normal frames */
#define PN532_EXCHANGE_LEN_BIAS   (3U) /* LEN covers D5 + CMD + ERR; DataOut = LEN - 3 */
#define PN532_EXCHANGE_STATUS_OK   (0x00U)
#define PN532_FRAME_HDR_LEN   (5U)
#define PN532_FRAME_TAIL_LEN   (2U)
#define PN532_EXT_FRAME_INDICATOR   (0xFFU)
#define PN532_EXT_FRAME_HDR_LEN   (8U)
#define PN532_EXT_FRAME_LENHI_OFFSET   (5U)
#define PN532_EXT_FRAME_LENLO_OFFSET   (6U)
#define PN532_EXT_EXCHANGE_ERR_OFFSET   (10U)
#define PN532_EXT_EXCHANGE_DATA_OFFSET   (11U)
#define PN532_INRELEASE_CMD_LEN   (2U)
#define PN532_INRELEASE_RESP_LEN   (10U)

Functions

static bool pn532_buffer_equal (const uint8_t *lhs, const uint8_t *rhs, uint8_t len)
static void spi_write_byte (pn532_t *dev, uint8_t data)
static uint8_t spi_read_byte (pn532_t *dev)
static uint8_t i2c_read_ready (pn532_t *dev)
static uint8_t read_ready (pn532_t *dev)
static void read_data (pn532_t *dev, uint8_t *buff, uint8_t n)
static bool check_ack (pn532_t *dev)
static void write_command (pn532_t *dev, const uint8_t *cmd, uint8_t cmd_len)
static bool send_command_check_ack (pn532_t *dev, const uint8_t *cmd, uint8_t cmd_len, uint16_t timeout)
static uint16_t read_data_apdu_frame (pn532_t *dev, uint8_t *buff, uint16_t max_len)
static esp_err_t pn532_init_spi (pn532_t *dev, const pn532_config_t *config)
static esp_err_t pn532_init_i2c (pn532_t *dev, const pn532_config_t *config)
esp_err_t pn532_init (pn532_t *dev, const pn532_config_t *config)
 Initialise the PN532 and bring it to a ready state.
uint32_t pn532_get_firmware_version (pn532_t *dev)
 Query the PN532 firmware version.
bool pn532_sam_config (pn532_t *dev)
 Configure the PN532's Security Access Module (SAM).
uint32_t pn532_read_passive_target_id (pn532_t *dev, uint8_t cardbaudrate)
 Scan for a passive ISO 14443-A card and return its UID.
bool pn532_send_apdu (pn532_t *dev, const uint8_t *apdu, uint8_t apdu_len, uint8_t *response, uint16_t *response_len)
 Exchange a single ISO-DEP APDU with the currently selected card.
bool pn532_release_target (pn532_t *dev)
 Release the currently selected NFC target.

Variables

static const char *const PN532_LOG_TAG = "pn532"
static const uint8_t pn532_ack [PN532_ACK_LEN]
static const uint8_t pn532_response_fw [PN532_FIRMWARE_HDR_LEN]

Macro Definition Documentation

◆ GPIO_LEVEL_HIGH

#define GPIO_LEVEL_HIGH   (1U) /* drive pin high */

◆ GPIO_LEVEL_LOW

#define GPIO_LEVEL_LOW   (0U) /* drive pin low */

◆ GPIO_PIN_BITMASK_BASE

#define GPIO_PIN_BITMASK_BASE   (1ULL) /* base bit for gpio_config_t.pin_bit_mask */

Definition at line 91 of file pn532.c.

Referenced by pn532_init_i2c(), and pn532_init_spi().

◆ PN532_ACK_LEN

#define PN532_ACK_LEN   (6U)

Definition at line 103 of file pn532.c.

Referenced by check_ack().

◆ PN532_APDU_TIMEOUT_MS

#define PN532_APDU_TIMEOUT_MS   (5000U)

Definition at line 82 of file pn532.c.

Referenced by pn532_send_apdu().

◆ PN532_BYTE_DELAY_MS

#define PN532_BYTE_DELAY_MS   (1U)

Definition at line 83 of file pn532.c.

Referenced by read_data(), and read_data_apdu_frame().

◆ PN532_BYTE_SHIFT_BITS

#define PN532_BYTE_SHIFT_BITS   (8U)

Definition at line 147 of file pn532.c.

Referenced by pn532_get_firmware_version(), and pn532_read_passive_target_id().

◆ PN532_CMD_TIMEOUT_MS

#define PN532_CMD_TIMEOUT_MS   (1000U)

◆ PN532_CS_TOGGLE_DELAY_MS

#define PN532_CS_TOGGLE_DELAY_MS   (2U)

Definition at line 76 of file pn532.c.

Referenced by pn532_init_spi(), read_data(), read_data_apdu_frame(), read_ready(), and write_command().

◆ PN532_EXCHANGE_CMD_OVERHEAD

#define PN532_EXCHANGE_CMD_OVERHEAD   (2U)

Definition at line 153 of file pn532.c.

Referenced by pn532_send_apdu().

◆ PN532_EXCHANGE_DATA_OFFSET

#define PN532_EXCHANGE_DATA_OFFSET   (8U) /* frame[8] = first DataOut byte for normal frames */

Definition at line 159 of file pn532.c.

Referenced by pn532_send_apdu().

◆ PN532_EXCHANGE_FRAME_MAX

#define PN532_EXCHANGE_FRAME_MAX   (440U)

Definition at line 156 of file pn532.c.

Referenced by pn532_send_apdu(), and read_data_apdu_frame().

◆ PN532_EXCHANGE_LEN_BIAS

#define PN532_EXCHANGE_LEN_BIAS   (3U) /* LEN covers D5 + CMD + ERR; DataOut = LEN - 3 */

Definition at line 160 of file pn532.c.

Referenced by pn532_send_apdu().

◆ PN532_EXCHANGE_LEN_OFFSET

#define PN532_EXCHANGE_LEN_OFFSET   (3U)

Definition at line 157 of file pn532.c.

Referenced by pn532_send_apdu(), and read_data_apdu_frame().

◆ PN532_EXCHANGE_STATUS_OFFSET

#define PN532_EXCHANGE_STATUS_OFFSET   (7U)

Definition at line 158 of file pn532.c.

Referenced by pn532_release_target(), and pn532_send_apdu().

◆ PN532_EXCHANGE_STATUS_OK

#define PN532_EXCHANGE_STATUS_OK   (0x00U)

Definition at line 161 of file pn532.c.

Referenced by pn532_release_target(), and pn532_send_apdu().

◆ PN532_EXCHANGE_TG

#define PN532_EXCHANGE_TG   (0x01U)

Definition at line 154 of file pn532.c.

Referenced by pn532_release_target(), and pn532_send_apdu().

◆ PN532_EXT_EXCHANGE_DATA_OFFSET

#define PN532_EXT_EXCHANGE_DATA_OFFSET   (11U)

Definition at line 177 of file pn532.c.

Referenced by pn532_send_apdu().

◆ PN532_EXT_EXCHANGE_ERR_OFFSET

#define PN532_EXT_EXCHANGE_ERR_OFFSET   (10U)

Definition at line 176 of file pn532.c.

Referenced by pn532_send_apdu().

◆ PN532_EXT_FRAME_HDR_LEN

#define PN532_EXT_FRAME_HDR_LEN   (8U)

Definition at line 173 of file pn532.c.

Referenced by read_data_apdu_frame().

◆ PN532_EXT_FRAME_INDICATOR

#define PN532_EXT_FRAME_INDICATOR   (0xFFU)

Definition at line 172 of file pn532.c.

Referenced by pn532_send_apdu(), and read_data_apdu_frame().

◆ PN532_EXT_FRAME_LENHI_OFFSET

#define PN532_EXT_FRAME_LENHI_OFFSET   (5U)

Definition at line 174 of file pn532.c.

Referenced by pn532_send_apdu(), and read_data_apdu_frame().

◆ PN532_EXT_FRAME_LENLO_OFFSET

#define PN532_EXT_FRAME_LENLO_OFFSET   (6U)

Definition at line 175 of file pn532.c.

Referenced by pn532_send_apdu(), and read_data_apdu_frame().

◆ PN532_FIRMWARE_CMD_LEN

#define PN532_FIRMWARE_CMD_LEN   (1U)

Definition at line 116 of file pn532.c.

Referenced by pn532_get_firmware_version().

◆ PN532_FIRMWARE_HDR_LEN

#define PN532_FIRMWARE_HDR_LEN   (7U)

Definition at line 118 of file pn532.c.

Referenced by pn532_get_firmware_version().

◆ PN532_FIRMWARE_RESP_LEN

#define PN532_FIRMWARE_RESP_LEN   (13U) /* matches Adafruit_PN532::getFirmwareVersion */

Definition at line 117 of file pn532.c.

Referenced by pn532_get_firmware_version().

◆ PN532_FIRMWAREVERSION

#define PN532_FIRMWAREVERSION   (0x02U)

Definition at line 42 of file pn532.c.

Referenced by pn532_get_firmware_version().

◆ PN532_FRAME_HDR_LEN

#define PN532_FRAME_HDR_LEN   (5U)

Definition at line 165 of file pn532.c.

Referenced by read_data_apdu_frame().

◆ PN532_FRAME_TAIL_LEN

#define PN532_FRAME_TAIL_LEN   (2U)

Definition at line 166 of file pn532.c.

Referenced by read_data_apdu_frame().

◆ PN532_FRAME_TFI_OVERHEAD

#define PN532_FRAME_TFI_OVERHEAD   (1U)

Definition at line 110 of file pn532.c.

Referenced by write_command().

◆ PN532_FW_IC_OFFSET

#define PN532_FW_IC_OFFSET   (7U)

Definition at line 119 of file pn532.c.

Referenced by pn532_get_firmware_version().

◆ PN532_FW_REV_OFFSET

#define PN532_FW_REV_OFFSET   (9U)

Definition at line 121 of file pn532.c.

Referenced by pn532_get_firmware_version().

◆ PN532_FW_SUPPORT_OFFSET

#define PN532_FW_SUPPORT_OFFSET   (10U)

Definition at line 122 of file pn532.c.

Referenced by pn532_get_firmware_version().

◆ PN532_FW_VER_OFFSET

#define PN532_FW_VER_OFFSET   (8U)

Definition at line 120 of file pn532.c.

Referenced by pn532_get_firmware_version().

◆ PN532_HOSTTOPN532

#define PN532_HOSTTOPN532   (0xD4U)

Definition at line 36 of file pn532.c.

Referenced by write_command().

◆ PN532_I2C_RX_MAX

#define PN532_I2C_RX_MAX   (200U)

Definition at line 70 of file pn532.c.

Referenced by read_data().

◆ PN532_I2C_TIMEOUT_MS

#define PN532_I2C_TIMEOUT_MS   (100)

Definition at line 66 of file pn532.c.

Referenced by i2c_read_ready(), read_data(), read_data_apdu_frame(), and write_command().

◆ PN532_I2C_TX_MAX

#define PN532_I2C_TX_MAX   (PN532_MAX_APDU_LEN + 16U)

Definition at line 68 of file pn532.c.

Referenced by write_command().

◆ PN532_INDATAEXCHANGE

#define PN532_INDATAEXCHANGE   (0x40U)

Definition at line 45 of file pn532.c.

Referenced by pn532_send_apdu().

◆ PN532_INLISTPASSIVETARGET

#define PN532_INLISTPASSIVETARGET   (0x4AU)

Definition at line 44 of file pn532.c.

Referenced by pn532_read_passive_target_id().

◆ PN532_INRELEASE

#define PN532_INRELEASE   (0x52U)

Definition at line 46 of file pn532.c.

Referenced by pn532_release_target().

◆ PN532_INRELEASE_CMD_LEN

#define PN532_INRELEASE_CMD_LEN   (2U)

Definition at line 184 of file pn532.c.

Referenced by pn532_release_target().

◆ PN532_INRELEASE_RESP_LEN

#define PN532_INRELEASE_RESP_LEN   (10U)

Definition at line 185 of file pn532.c.

Referenced by pn532_release_target().

◆ PN532_PASSIVE_CMD_LEN

#define PN532_PASSIVE_CMD_LEN   (3U)

Definition at line 140 of file pn532.c.

Referenced by pn532_read_passive_target_id().

◆ PN532_PASSIVE_EXPECTED_TARGETS

#define PN532_PASSIVE_EXPECTED_TARGETS   (1U)

Definition at line 144 of file pn532.c.

Referenced by pn532_read_passive_target_id().

◆ PN532_PASSIVE_MAX_TARGETS

#define PN532_PASSIVE_MAX_TARGETS   (1U)

Definition at line 142 of file pn532.c.

Referenced by pn532_read_passive_target_id().

◆ PN532_PASSIVE_NUM_TARGETS_OFFSET

#define PN532_PASSIVE_NUM_TARGETS_OFFSET   (7U)

Definition at line 143 of file pn532.c.

Referenced by pn532_read_passive_target_id().

◆ PN532_PASSIVE_RESP_LEN

#define PN532_PASSIVE_RESP_LEN   (64U)

Definition at line 141 of file pn532.c.

Referenced by pn532_read_passive_target_id().

◆ PN532_PASSIVE_UID_DATA_OFFSET

#define PN532_PASSIVE_UID_DATA_OFFSET   (13U)

Definition at line 146 of file pn532.c.

Referenced by pn532_read_passive_target_id().

◆ PN532_PASSIVE_UID_LEN_OFFSET

#define PN532_PASSIVE_UID_LEN_OFFSET   (12U)

Definition at line 145 of file pn532.c.

Referenced by pn532_read_passive_target_id().

◆ PN532_POLL_INTERVAL_MS

#define PN532_POLL_INTERVAL_MS   (10U)

Definition at line 79 of file pn532.c.

Referenced by send_command_check_ack().

◆ PN532_POSTAMBLE

#define PN532_POSTAMBLE   (0x00U)

Definition at line 35 of file pn532.c.

Referenced by write_command().

◆ PN532_PREAMBLE

#define PN532_PREAMBLE   (0x00U)

Definition at line 31 of file pn532.c.

Referenced by pn532_init_spi(), and write_command().

◆ PN532_SAM_CMD_LEN

#define PN532_SAM_CMD_LEN   (4U)

Definition at line 128 of file pn532.c.

Referenced by pn532_sam_config().

◆ PN532_SAM_NORMAL_MODE

#define PN532_SAM_NORMAL_MODE   (0x01U)

Definition at line 132 of file pn532.c.

Referenced by pn532_sam_config().

◆ PN532_SAM_RESP_CODE

#define PN532_SAM_RESP_CODE   (0x15U) /* SAMCONFIGURATION + 1 */

Definition at line 131 of file pn532.c.

Referenced by pn532_sam_config().

◆ PN532_SAM_RESP_CODE_OFFSET

#define PN532_SAM_RESP_CODE_OFFSET   (6U)

Definition at line 130 of file pn532.c.

Referenced by pn532_sam_config().

◆ PN532_SAM_RESP_LEN

#define PN532_SAM_RESP_LEN   (9U)

Definition at line 129 of file pn532.c.

Referenced by pn532_sam_config().

◆ PN532_SAM_TIMEOUT

#define PN532_SAM_TIMEOUT   (0x14U) /* 50 ms x 20 = 1 s */

Definition at line 133 of file pn532.c.

Referenced by pn532_sam_config().

◆ PN532_SAM_USE_IRQ

#define PN532_SAM_USE_IRQ   (0x01U)

Definition at line 134 of file pn532.c.

Referenced by pn532_sam_config().

◆ PN532_SAMCONFIGURATION

#define PN532_SAMCONFIGURATION   (0x14U)

Definition at line 43 of file pn532.c.

Referenced by pn532_sam_config().

◆ PN532_SPI_BITS

#define PN532_SPI_BITS   (8U)

Definition at line 60 of file pn532.c.

Referenced by spi_read_byte(), and spi_write_byte().

◆ PN532_SPI_CLOCK_HZ

#define PN532_SPI_CLOCK_HZ   (1000000U)

Definition at line 56 of file pn532.c.

Referenced by pn532_init_spi().

◆ PN532_SPI_DATAREAD

#define PN532_SPI_DATAREAD   (0x03U)

Definition at line 54 of file pn532.c.

Referenced by read_data(), and read_data_apdu_frame().

◆ PN532_SPI_DATAWRITE

#define PN532_SPI_DATAWRITE   (0x01U)

Definition at line 53 of file pn532.c.

Referenced by write_command().

◆ PN532_SPI_MODE

#define PN532_SPI_MODE   (0U)

Definition at line 57 of file pn532.c.

Referenced by pn532_init_spi().

◆ PN532_SPI_NO_PIN

#define PN532_SPI_NO_PIN   (-1)

Definition at line 58 of file pn532.c.

Referenced by pn532_init_spi().

◆ PN532_SPI_QUEUE_SIZE

#define PN532_SPI_QUEUE_SIZE   (1U)

Definition at line 59 of file pn532.c.

Referenced by pn532_init_spi().

◆ PN532_SPI_READY

#define PN532_SPI_READY   (0x01U)

Definition at line 55 of file pn532.c.

Referenced by send_command_check_ack().

◆ PN532_SPI_STATREAD

#define PN532_SPI_STATREAD   (0x02U)

Definition at line 52 of file pn532.c.

Referenced by read_ready().

◆ PN532_STARTCODE1

#define PN532_STARTCODE1   (0x00U)

Definition at line 33 of file pn532.c.

◆ PN532_STARTCODE2

#define PN532_STARTCODE2   (0xFFU)

Definition at line 34 of file pn532.c.

Referenced by write_command().

◆ PN532_SYNC_DELAY_MS

#define PN532_SYNC_DELAY_MS   (100U)

Definition at line 78 of file pn532.c.

Referenced by pn532_init().

◆ PN532_WAKEUP_BYTE

#define PN532_WAKEUP_BYTE   (0x55U)

Definition at line 97 of file pn532.c.

Referenced by pn532_init_spi().

◆ PN532_WAKEUP_DELAY_MS

#define PN532_WAKEUP_DELAY_MS   (1000U)

Definition at line 77 of file pn532.c.

Referenced by pn532_init_spi().

Function Documentation

◆ check_ack()

bool check_ack ( pn532_t * dev)
static

Definition at line 291 of file pn532.c.

References pn532_ack, PN532_ACK_LEN, pn532_buffer_equal(), and read_data().

Referenced by send_command_check_ack().

◆ i2c_read_ready()

uint8_t i2c_read_ready ( pn532_t * dev)
static

Definition at line 238 of file pn532.c.

References pn532_t::i2c_dev, and PN532_I2C_TIMEOUT_MS.

Referenced by read_ready().

◆ pn532_buffer_equal()

bool pn532_buffer_equal ( const uint8_t * lhs,
const uint8_t * rhs,
uint8_t len )
static

Definition at line 301 of file pn532.c.

Referenced by check_ack(), and pn532_get_firmware_version().

◆ pn532_init_i2c()

◆ pn532_init_spi()

◆ read_data()

◆ read_data_apdu_frame()

◆ read_ready()

◆ send_command_check_ack()

bool send_command_check_ack ( pn532_t * dev,
const uint8_t * cmd,
uint8_t cmd_len,
uint16_t timeout )
static

◆ spi_read_byte()

uint8_t spi_read_byte ( pn532_t * dev)
static

Definition at line 220 of file pn532.c.

References PN532_SPI_BITS, and pn532_t::spi.

Referenced by read_data(), read_data_apdu_frame(), and read_ready().

◆ spi_write_byte()

void spi_write_byte ( pn532_t * dev,
uint8_t data )
static

Definition at line 211 of file pn532.c.

References PN532_SPI_BITS, and pn532_t::spi.

Referenced by pn532_init_spi(), read_data(), read_data_apdu_frame(), read_ready(), and write_command().

◆ write_command()

Variable Documentation

◆ pn532_ack

const uint8_t pn532_ack[PN532_ACK_LEN]
static
Initial value:
= {
0x00U, 0x00U, 0xFFU, 0x00U, 0xFFU, 0x00U
}

Definition at line 192 of file pn532.c.

Referenced by check_ack().

◆ PN532_LOG_TAG

const char* const PN532_LOG_TAG = "pn532"
static

◆ pn532_response_fw

const uint8_t pn532_response_fw[PN532_FIRMWARE_HDR_LEN]
static
Initial value:
= {
0x00U, 0x00U, 0xFFU, 0x06U, 0xFAU, 0xD5U, 0x03U
}

Definition at line 197 of file pn532.c.

Referenced by pn532_get_firmware_version().