PN532&NTAG213 NFC通信笔记

NFC学习笔记

本片记录PN532与NTAG213调试笔记,PN532配置成UART通讯模式

PN532

PN532配置通讯模式

通过配置 Pin #16和Pin #17引脚,使得PN532工作在HSU(UART)通信模式

ModeI0 (Pin #16)I1 (Pin #17)
HSU00
I2C10
SPI01
RFU11

PN532 User Manua.pdf => 6.1.1 Possible links

PN532 串口通信参数
引脚

IHSU_RX (NSS)HSU_TX (MOSI)
PN532 Pin number2728
串口参数
Data bit8 bits
Parity bitnone
Stop bit1 bit
Baud rate115 200 bauds
Data orderLSB first

PN532 User Manua.pdf => 6.1.1.2 HSU interface

PN532通信协议

在这里插入图片描述

字节长度(byte)说明
PREAMBLE1帧头默认 0x00
START CODEt2固定 0x00 0xFF
LEN1从TFI到DATA的长度
LCS1主机发起 - 0xD4 \ PN532应答 - 0xD5
DATA数据内容 见后文PN532命令
DCS1校验位 - LCS 到DCS数据相加为0
POSTAMBLE1默认0x00

PN532 User Manua.pdf => 6.2.1.1 Normal information frame

示例

MCU => PN532 : 00 00 FF 03 FD D4 14 01 17 00
MCU <= PN532 : 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00

这里需要说明下00 00 FF 00 FF 00响应对上一帧命令应答

PN532通信协议 - 应答帧

这个帧代表之前的命令帧已经收到
在这里插入图片描述示例

MCU => PN532 : 00 00 FF 03 FD D4 14 01 17 00
MCU <= PN532 : 00 00 FF 00 FF 00

PN532 User Manua.pdf => 6.2.1.3 ACK frame

PN532通信协议 - 错误帧

这个帧是PN532响应给主机的,表明之前发送的命令有误。
在这里插入图片描述
示例

MCU => PN532 : 00 00 FF 04 FC D4 40 01 60 8B 00
MCU <= PN532 : 00 00 FF 01 FF 7F 81 00 

PN532 User Manua.pdf => 6.2.1.5 Error frame

PN532命令 - 唤醒PN532

参考很多人写的资料都在PN532上电时候发送,但是验证过这个发不发不影响通信,姑且先做记录

MCU => PN532 : 55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 03 FD D4 14 01 17 00
MCU <= PN532 : 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00 

可以看到PN532会应答00 00 FF 00 FF 00 ,我认为是意义的,后面找资料补充,下面的命令示例都删掉00 00 FF 00 FF 00,避免影响阅读

PN532命令 - 安全访问模块配置

用户指南称为SAMConfiguration,我们设置成Normal mode
在这里插入图片描述

MCU => PN532 : 00 00 FF 03 FD D4 14 01 17 00
MCU <= PN532 : 00 00 FF 02 FE D5 15 16 00 

PN532 User Manua.pdf => 7.2.10 SAMConfiguration

PN532命令 - 寻卡

用户指南称为InListPassiveTarget,用于检测标签,如检测到标签将返回标签UID。
请求帧
在这里插入图片描述

请求帧字节长度(byte)说明
Command10x4A
MaxTg1检测标签数,PN532最大支持2个
BrTy1其他值没测试过,示例填0x00
LEN1从TFI到DATA的长度
InitiatorData [ ]没测试过

应答帧
在这里插入图片描述

应答帧字节长度(byte)说明
Command10x4B
NbTg1检测到卡数量
BrTy1其他值没测试过,示例填0x00
Tg1第几张标签,第一张则为1
SENS_RES2表面标签类型 NTAG21x - 0x00,0x44,为什么是0x00,0x04见下面NTAG21x
SEL_RES1没测试过
NFCIDLength1标签ID长度
NFCID[]标签ID
ATS[]没测试过
MCU => PN532 : 00 00 FF 04 FC D4 4A 01 00 E1 00
MCU <= PN532 : 00 00 FF 0F F1 D5 4B 01 01 00 44 00 07 04 0E 4C 42 1D 12 91 33 00 

PN532 User Manua.pdf => 7.3.5 InListPassiveTarget

PN532命令 - 卡数据交换

用户指南称为InDataExchange,用于标签数据交换,标准准NFC命令可以使用,这里需要结合标签的用户手册.
在这里插入图片描述

请求帧字节长度(byte)说明
Command10x40
Tg1标签序号
DataOut[]标签命令,需要结合标签的用户手册
应答帧字节长度(byte)说明
Command10x41
Status1状态 - 0x00 即正常
DataInt[]标签应答,需要结合标签的用户手册
MCU => PN532 : 00 00 FF 05 FB D4 40 01 30 00 BB 00
MCU <= PN532 : 00 00 FF 13 ED D5 41 00 04 E1 05 68 42 1D 12 94 D9 48 00 00 E1 10 12 00 6F 00 

PN532 User Manua.pdf => 7.3.8 InDataExchange

PN532命令 - 非标准NFC命令卡数据交换

用户指南称为InCommunicateThru,同上要结合标签的用户手册,有些电子标签的操作命令不是标准NFC命令就要使用InCommunicateThru命令来操作,例如NTAG21x的GET_VERSION命令。可以用InCommunicateThru替代InDataExchange来使用
在这里插入图片描述

请求帧字节长度(byte)说明
Command10x42
DataOut[]标签命令,需要结合标签的用户手册
应答帧字节长度(byte)说明
Command10x43
Status1状态 - 0x00 即正常
DataInt[]标签应答,需要结合标签的用户手册
MCU => PN532 : 00 00 FF 03 FD D4 42 60 8A 00
MCU <= PN532 : 00 00 FF 0B F5 D5 43 00 00 04 04 02 01 00 0F 03 CB 00

PN532 User Manua.pdf => 7.3.9 InCommunicateThru

NTAG21x

NTAG21x操作,基本上建立于PN532的InDataExchange和InCommunicateThru命令
NTAG21x支持的命令如下
在这里插入图片描述

Command说明NFC标准PN532操作命令PN532命令码NTAG命令码
GET_VERSION获取卡片信息非标准InCommunicateThru0x420x60
READ标准InDataExchange0x40 / 0x420x30
FAST_READ快读非标准InCommunicateThru0x420x3A
WRITE标准InDataExchange0x40 / 0x420xA2
COMP_WRITE标签命令,需要结合标签的用户手册
READ_CNT标签命令,需要结合标签的用户手册
PWD_AUTH标签命令,需要结合标签的用户手册
READ_SIG标签命令,需要结合标签的用户手册

NTAG213/215/216.pdf => 9.1 NTAG21x command overview

NTAG21x命令 - 获取卡信息

NTAG21x用户指南称为GET_VERSION,可以获取NTAG产品版本、存储大小和其他产品数据,由于是非标准NFC命令,需要用PN532的InCommunicateThru来读
在这里插入图片描述

MCU => PN532 : 00 00 FF 03 FD D4 42 60 8A 00
MCU <= PN532 : 00 00 FF 0B F5 D5 43 00 00 04 04 02 01 00 0F 03 CB 00

其中00 04 04 02 01 00 0F 03是应答的数据,解析如下,可以看到这个是NTAG213卡
在这里插入图片描述

NTAG213/215/216.pdf => 10.1 GET_VERSION

NTAG21x命令 - 读

NTAG21x用户指南称为READ,可以读取NTAG21x寄存器信息、标准NFC命令,PN532的InCommunicateThru或InDataExchange来读,单次读取长度为16字节
在这里插入图片描述

请求帧字节长度(byte)说明
Cmd10x30
Addr1页开始地址
以下示例读取NTAG卡从0页地址开始的数据,关于0页地址数据说明后面再介绍
MCU => PN532 : 00 00 FF 04 FC D4 42 30 00 00
MCU <= PN532 : 00 00 FF 13 ED D5 43 00 04 E1 05 68 42 1D 12 94 D9 48 00 00 E1 10 12 00 6D 00 

NTAG213/215/216.pdf => 10.2 READ

NTAG21x命令 - 快读

NTAG21x用户指南称为FAST_READ,可以读取NTAG21x批量寄存器、非标准NFC命令,PN532的InCommunicateThru来读,PN532单次读取最长页数64Page,即252个字节
在这里插入图片描述

请求帧字节长度(byte)说明
Cmd10x3A
StartAddr1页开始地址
EndAddr1页结束地址地址

以下示例读取NTAG卡从0页到2页的数据

MCU => PN532 : 00 00 FF 05 FB D4 42 3A 00 02 AE 00
MCU <= PN532 : 00 00 FF 00 FF 00 00 00 FF 0F F1 D5 43 00 04 E1 05 68 42 1D 12 94 D9 48 00 00 70 00 

NTAG213/215/216.pdf => 10.3 FAST_READ

NTAG21x命令 - 写

NTAG21x用户指南称为WRITE,可以写入NTAG21x寄存器数据、标准NFC命令,PN532的InCommunicateThru或InDataExchange来写,PN532单次写入固定4个字节。
在这里插入图片描述

请求帧字节长度(byte)说明
Cmd10xA2
Addr1要写入的页地址
Data4固定4个字节

以下示例写NTAG卡0x04页

MCU => PN532 : 00 00 FF 08 F8 D4 42 A2 04 12 34 56 78 30 00
MCU <= PN532 : 00 00 FF 03 FD D5 43 02 E6 00
MCU => PN532 : 00 00 FF 05 FB D4 42 3A 04 04 A8 00
MCU <= PN532 : 00 00 FF 07 F9 D5 43 00 12 34 56 78 D4 00 

NTAG213/215/216.pdf => 10.4 WRITE

NTAG21x命令 - 读计数

NTAG21x用户指南称为,可以得到电子标签读取数次,在读取之前必须使能NFC_CNT_EN在这里插入图片描述

请求帧字节长度(byte)说明
Cmd10x39 - NFC计数命令
Addr10x02 - NFC计数地址
MCU => PN532 : 00 00 FF 04 FC D4 42 39 02 AF 00
MCU <= PN532 : 00 00 FF 06 FA D5 43 00 03 00 00 E5 00

NTAG213/215/216.pdf => 10.6 READ_CNT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值