PN532教程
1、PN532数据包格式:
(1)正常数据包:
00 | 00 | FF | LEN | LCS | TFI | PD0 | PD1 | … | PDn | DCS | 00 |
---|---|---|---|---|---|---|---|---|---|---|---|
- 00 :序列头
- 00 FF :起始号
- LEN :数据包长度,包含TFI
- LCS :数据长度校验和,LEN+LCS = 0
- TFI :命令
- PD0…PDn:数据
- DCS :数据校验和,TFI+PD0+…+PDn = 0
- 00 :序列结尾
(2)应答包:
00 | 00 | FF | 00 | FF | 00 |
---|---|---|---|---|---|
- 00 FF :应答包
(3)非应答包:
00 | 00 | FF | FF | 00 | 00 |
---|---|---|---|---|---|
- FF 00 :没有应答
(4)加长数据包:
00 | 00 | FF | FF | FF | LENM | LENL | LCS | TFI | PD0 | PD1 | … | PDn | DCS | 00 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
在正常情况下,只能发送256个字节的数据,PN532提供一种特殊的格式可以发送更多的数据;
– FF :正常模式下时为包的长度,特殊时为FF
– FF :正常模式下为数据长度校验和,特殊为FF
– LENm,LENl:数据包长度的高位和低位,包括TFI
2、PN532操作
下面以操作m1-s50卡为例
(1)唤醒:
发送:55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 03 fd d4 14 01 17 00
应答: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00
(2)寻卡:
- 发送:00 00 FF 04 FC D4 4A 02 00 E0 00
- 应答:00 00 FF 00 FF 00
00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 90 1F 2A A4 51 00
这里 90 1F 2A A4 为 UID号;
(3)验证:
- 发送:00 00 FF 0F F1 D4 40 01 60 07 FF FF FF FF FF FF 90 1F 2A A4 0D 00
- 应答:00 00 FF 00 FF 00
00 00 FF 03 FD D5 41 00 EA 00
验证的是07这个块,41 00 为正确
(4)读写:
注:读写操作时卡在验证后不能拿开
a、读第7块的数据:
- 发送:00 00 FF 05 fb D4 40 01 30 07 B4 00
- 应答:00 00 FF 00 FF 00
00 00 FF 13 ED D5 41 00 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 01 00
41 00 表示正确,00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF为第7块的数据;
b、写第6块:
- 发送:00 00 ff 15 EB D4 40 01 A0 06 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F CD 00
- 应答:00 00 FF 00 FF 00
00 00 FF 03 FD D5 41 00 EA 00
再读取第6块数据会读到写入的数据。
帧(frame)的结构:
1、PREAMBLE | 1 byte:所谓的帧头,也称为前导码,一般是00
2、START CODE | 2 bytes (0x00 and 0xFF):起始码 2个字节,分别是 00和FF
3、LEN | 1 byte indicating the number of bytes in the data field (TFI and PD0 to PDn):数据长度,一个TFI和n个PD
4、LCS | 1 Packet Length Checksum LCS byte that satisfies the relation: Lower byte of [LEN + LCS] = 0x00:是LEN的补码,也就是(LEN取反+1)
5、TFI 1 byte frame identifier, the value of this byte depends on the way of the message
- D4h in case of a frame from the host controller to the PN532,
- D5h in case of a frame from the PN532 to the host controller.
表示数据流向 。
D4h:在从主机控制器到 PN532 的帧的情况下,表示数据发向PN532。
D5h:在从 PN532 到主机控制器的帧的情况下,表示PN532数据发出。
6、DATA | LEN-1 bytes of Packet Data Information The first byte PD0 is the Command Code:要发的数据,DATA的第一个字节PD0为控制字符,其余为普通数据。该包长度为 LEN-1。
7、DCS | 1 Data Checksum DCS byte that satisfies the relation: Lower byte of [TFI + PD0 + PD1 + … + PDn + DCS] = 0x00,
DCS其实就是把这些十六进制数加起来,后两位取补码即可。即(TFI + PD0 + PD1 + … + PDn)累加和,取后两位的补码。
8、POSTAMBLE | 1 byte:帧尾 一般为 00
The amount of data that can be exchanged using this frame structure is limited to 255 bytes (including TFI).
使用这种帧结构可以交换的数据量限制为 255 字节(包括 TFI)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2019-03-30 [Mac]macOS Mojave :发现 Mac 的新功能。