打印
[UNO]

零知开源分享-使用PN532模块读写NFC卡片

[复制链接]
2271|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、串口命令操作
1、数据帧结构
使用串口命令操作时候,需要按照下面的帧格式进行数据传输,这是通信的基础。
下面详细解释一下:
  • PREAMBLE:这个就是所谓的帧头,也称为前导码,一般是00。

  • START CODE :开始码 2个字节,分别是 00和FF 。

  • LEN :这个是数据长度,一个TFI和n个PD。

  • LCS:这个是LEN的补码,也就是(LEN取反+1)。

  • TFI:表示数据流向 ,D4 表示 数据发向PN532,D5 表示 PN532数据发出

  • DATA:这才是我们想要发的数据,DATA的第一个字节PD0为控制字符,其余为普通数据,该包长度为 LEN-1。

  • DCS:其实就是把这些十六进制数加起来,后两位取补码即可。即(TFI + PD0 + PD1 + … + PDn)累加和,取后两位的补码。

  • POSTAMBLE:帧尾 ,一般为 00

这种的数据结构只能有255 个data (包括TFI),还有几种结构,这里先不说了。
2、读写实例分析
使用的是pn532为主控芯片的NFC串口模块,来读写M1卡,注意下所有数字为16进制形式。用usb转串口模块将pn532与电脑连接,串口助手发送选择hex。
波特率:默认 115200 ,数据位:8 ,校验位:无 ,停止位:1, 流控:无。硬件连接正常后开始操作,详细步骤分析如下:
(1) 唤醒PN532:
PC->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
PN532->PC: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00
其实第一条不符合普通的发送格式,比较特殊。如果没有正常返回,检查硬件连接和波特率。
(2)获取卡UID,也就是卡的唯一ID号
PC->PN532: 00 00 FF 04 FC D4 4A 02 00 E0 00
分析:
   04 //代表有四个数据分别是 D4 4A 02 00
   FC //这是04的补码
   4a //命令
   02 //卡数量,0--2
   00 //波特率 106K
   E0 //校验位  D4+4A+02+00=0x0120  取后两位20的补码为E0。至于补码怎么计算自己百度吧。
PN532->PC:  00 00 FF 00 FF 00 
                   00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 A1 9F F5 5E 3B 00
分析:
    00 00 FF 00 FF 00  //ACK
    00 00 FF 0C F4
    D5 //PN532 到 MCU
    4B //响应命令
    01 //目标卡1
    01 //目标卡数量,最大为0x02,最小为0
    00 04 //atq
    08    //卡容量 08=1K
    04    //4个字节UID
    02 F5 13 BE //UID
    06 00 //DCS+POST
到这一步总体来说还算顺利,主要是因为可以发送完命令在再刷卡也行,也可以把卡一直放上。
3、密钥验证,注意验证完秘钥,卡不能离开,需要一直放在上面,才能顺利的完成下面读写操作,还有注意替换步骤(2)的UID,最后根据自己的UID计算校验位即倒数第二位。
PC->PN532:  00 00 fF 0F F1 D4 40 01 60 07 FF FF FF FF FF FFA1 9F F5 5E C2 00
分析:   
     40 //命令
     01 //卡1
     60 //密钥验证命令
     07 //块号
     ff ff ff ff ff ff //密钥
     A1 9F F5 5E //UID 替换为步骤2得到的UID
     C2 //检验位,根据替换的UID计算,计方法跟步骤(2)一样。
PN532->PC: 00 00 FF 00 FF 00 
                  00 00 FF 03 FD D5 41 00 EA 00
分析:
    41 00 //正确状态。
(4)开始读卡,M1卡有16个扇区,每个扇区4个块。
PC->PN532: 00 00 ff 05 fb D4 40 01 30 07 B4 00 //读第7块
PC->PN532: 00 00 ff 05 fb D4 40 01 30 06 B5 00 //读第6块
PC->PN532: 00 00 ff 05 fb D4 40 01 30 08 B3 00 //读第8块
分析:  
     40 //命令
     01 //卡1
     30 //读卡命令
     07 //快号。
PN532->PC: 00 00 FF 00 FF 00 //ACK
                  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  //7块
PN532->PC: 00 00 FF 00 FF 00 //ACK
                  00 00 FF 13 ED D5 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EA 00 //6块
分析:
    41 00 //正确
    错误会返回: 00 00 FF 00 FF 00
                      00 00 FF 03 FD D5 41 13 D7 00
    41 03 //错误。
(5)写卡
PC->PN532: 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
分析:   
    40 //命令
     01 //卡1
     A0 //写卡命令
     06 //块号
     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  //16字节数据
     CD//校验和,如果更改其他的数需重新计算。
PN532->PC: 00 00 00 FF 00 FF 00 
                  00 00 FF 03 FD D5 41 00 EA 00
分析:
    41 00 //正确。
二、使用上位机方式进行操作
下面使用上位机软件进行读写测试:我们使用一个USB转串口模块连接到PN532模块。
PN532模块:
电路连接如下:
我们使用模块的串口模式接口,因此在上面的配置模式中我们选的是HSU这个,即1、2两个开关都在左边(基于上图)。
连接号以后,我们打开上位机软件,如下图:
如果我们连接没有问题,接口选择也正确,就会显示“发现NFC设备”标识,如果没有连接好,则会出现“未发现NFC设备”。
上一步成功后,我们就可以操作PN532来进行读写其他NFC卡片设备了。
我们把门禁卡放在PN532模块上方,如下图所示:
然后点击上位机中的【读取卡:读取卡片内容】,就可以读取到卡片的内容了:







使用特权

评论回复

相关帖子

沙发
njchenmin| | 2019-8-12 07:06 | 只看该作者
软件有共享吗?

使用特权

评论回复
板凳
roc2two|  楼主 | 2019-9-10 14:35 | 只看该作者

所用软件都可到零知实验室官网免费获取哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

85

帖子

1

粉丝