28
2018
09

PN532+NFC+RFID的使用

    PN532 NFC模块,顾名思义就是一款基于PN532芯片,用于13.56MHz近场通讯功能的模块。模块上带了板载天线,无需外接天线线圈。模块兼容SPI,IIC和UART接口通讯。

Features

 最远5厘米的有效通讯距离

 支持SPI,IIC和UART等多种接口选择切换

 可用于13.56M的非接触式通讯

 兼容ISO14443 Type A and Type B标准


接下来,串口是我们使用最多的工具,我们主要介绍下UART的使用。

1、使用串口,需要配置成串口通讯模式,参照原题图点击下载和PN532使用手册(点击下载)。

image.png

image.png

2、配置好模式,把模块通过串口与电脑连接,使用如下模型操作,如下:


image.png

3、打开串口,配置串口:

     所有数据通信为16进制形式。用串口与PN532链接,串口助手发送选择hex

     硬件连接: 电脑串口RX->PN532 TX
                       电脑串口TX->PN532 RX  
     波特率115200,数据位:8,停止位:1,校验位:无
     硬件连接正常后开始操作,主动发送查询命令:

image.png

      (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

image.png


    (2)获取固件版本:

    发送:00 00 FF 02 FE D4 02 2A 00

         析:02 //两个数据 D4 02

            FE //02的补码

            D4 //MCU 到 PN532

            02 //获得固件版本

            2A // D4+02 =D6后两位的补码

    返回:00 00 FF 00 FF 00 00 00 FF 06 FA D5 03 32 01 06 07 E8 00 

                                                                                 D5 03 IC Ver Rev Support   

         析: 00 00 FF 00 FF 00  //ACK

           00 00 FF 06 FA  // 

           D4//MCU 到 PN532

           03 // 发送的命令02+1

           32 //表示IC卡

           01 //版本

           06 //版次

           07 //表示固件支持的功能



image.png

    (3)获取卡UID,也就是卡的唯一ID号,全球就这一个(理论上)

    读标签:

    发送:00 00 FF 04 FC D4 4A 01 00 E1 00

        析: 04 //代表有四个数据分别是 D4 4A 01 00

                FC //这是04的补码

                D4//MCU  PN532

                4A //命令

                01 //卡数量,1

                00 //波特率 106K

                01 //卡数量,1

                00 //波特率 106K

                E1 //校验位  D4+4A+01+00=0x011F 取后两位1F的补码为E1(十六进制补码为源码取反加1)。



    返回:00 00 FF 00 FF 00 00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 XX XX XX XX 5A 00   

          XX 是标签值.

    实例:00 00 FF 00 FF 00 00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 27 7E C9 1C 44 00

      析:00 00 FF 00 FF 00  //ACK
          00 00 FF 0C F4    //
          D5 //PN532 到 MCU
          4B //响应命令发送命令4A+1
          01 //目标卡1
          01 //目标卡数量,最大为0X02,最小为0
          00 04 //ATQ
          08    //卡容量 08=1K
          04    //4个字节UID
          27 7E C9 1C //UID
          44 //DCS

等待标签数据,发送完命令时,标签还没放上去,此时的数据

image.png

放上标签的数据

image.png


4、就此,读标签卡号完成,接下来介绍读写卡数据。

    (1) 密钥验证,注意验证完秘钥,卡不能离开,需要一直放在上面,才能顺利的完成下面读写操作,我就栽了,验证完秘钥卡就离开了,读写卡怎么都不成功,浪费了一下午。还有注意替第二个步骤的UID,最后根据自己的UID计算校验位即倒数第二位

         发送:00 00 FF 0F F1 D4 40 01 60 02 FF FF FF FF FF FF 27 7E C9 1C 05 00
         析:  40 //命令
               01 //卡1
               60 //密钥验证命令
               02 //块号
               FF FF FF FF FF FF //密钥
               E0 87 DB A4 //UID 替换为步骤2得到的UID 
               05 //检验位,D4 40 01 60 02 FF FF FF FF FF FF 27 7E C9 1C和的补码

        返回: 00 00 FF 00 FF 00 00 00 FF 03 FD D5 41 00 EA 00  
          析: 41 00 //正确状态

image.png

   (2)开始读卡,M1卡有16个扇区,每个扇区4个块

        
         发送: 00 00 FF 05 FB D4 40 01 30 02 B9 00 //读第2块
         析:40 //命令
                01 //卡1
                30 //读卡命令
                B9 //块号

         返回:00 00 FF 00 FF 00 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 

         析: 41 00 //正确状态

      红色16位空数据


image.png

    (3)写卡
      发送: 00 00 FF 15 EB D4 40 01 A0 02 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F D1 00

      析:40 //命令

             01 //卡1

             A0 //写卡命令

             02 //块号

             00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  //16字节数据

             D1 //校验和,如果更改其他的数需重新计算。

    返回: 00 00 00 FF 00 FF 00 00 00 FF 03 FD D5 41 00 EA 00

image.png

  (4)重新读卡。

        
         发送:00 00 FF 05 FB D4 40 01 30 02 B9 00 //读第2块

        返回:00 00 FF 00 FF 00 00 00 FF 13 ED D5 41 00 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 72 00 

     析: 41 00 //正确状态

     红色为写入之后读出的数据,与写入的一致。

假如返回:00 00 FF 00 FF 00 00 00 FF 03 FD D5 41 01 E9 00  

     析:假如 D5 之后的数据不是41 00,需要按照错误码表对照错误

image.png

image.png

image.png



命令帧格式说明 

image.png

       

命令发送与返回的命令帧格式说明

 

image.png

PN532 作为主从模式的切换命令

image.png



打赏 支付宝打赏 微信打赏
« 上一篇 下一篇 »