教日月换新天。为有牺牲多壮志,敢

PN532教程

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!

1、PN532数据包格式:

(1)正常数据包:
0000FFLENLCSTFIPD0PD1PDnDCS00
                       
  • 00 :序列头
  • 00 FF :起始号
  • LEN :数据包长度,包含TFI
  • LCS :数据长度校验和,LEN+LCS = 0
  • TFI :命令
  • PD0…PDn:数据
  • DCS :数据校验和,TFI+PD0+…+PDn = 0
  • 00 :序列结尾
(2)应答包:
0000FF00FF00
           
  • 00 FF :应答包
(3)非应答包:
0000FFFF0000
           
  • FF 00 :没有应答
(4)加长数据包:
0000FFFFFFLENMLENLLCSTFIPD0PD1PDnDCS00
                             

在正常情况下,只能发送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)。 

posted @   为敢技术  阅读(1776)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2019-03-30 [Mac]macOS Mojave :发现 Mac 的新功能。
点击右上角即可分享
微信分享提示