標(biāo)題: 零知開源分享-使用PN532模塊讀寫NFC卡片 [打印本頁]

作者: roc2    時間: 2019-6-4 15:41
標(biāo)題: 零知開源分享-使用PN532模塊讀寫NFC卡片
一、串口命令操作
1、數(shù)據(jù)幀結(jié)構(gòu)
使用串口命令操作時候,需要按照下面的幀格式進(jìn)行數(shù)據(jù)傳輸,這是通信的基礎(chǔ)。

下面詳細(xì)解釋一下:
這種的數(shù)據(jù)結(jié)構(gòu)只能有255 個data (包括TFI),還有幾種結(jié)構(gòu),這里先不說了。
2、讀寫示例分析
使用的是pn532為主控芯片的NFC串口模塊,來讀寫M1卡,注意下所有數(shù)字為16進(jìn)制形式。用usb轉(zhuǎn)串口模塊將pn532與電腦連接,串口助手發(fā)送選擇hex。
波特率:默認(rèn) 115200 ,數(shù)據(jù)位:8 ,校驗位:無 ,停止位:1, 流控:無。硬件連接正常后開始操作,詳細(xì)步驟分析如下:
(1) 喚醒PN532:
  1. 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
  2. PN532->PC: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00
復(fù)制代碼
其實第一條不符合普通的發(fā)送格式,比較特殊。如果沒有正常返回,檢查硬件連接和波特率。
(2)獲取卡UID,也就是卡的唯一ID號
  1. PC->PN532: 00 00 FF 04 FC D4 4A 02 00 E0 00
復(fù)制代碼
分析:
   04 //代表有四個數(shù)據(jù)分別是 D4 4A 02 00;
   FC //這是04的補碼 ;
   4a //命令;
   02 //卡數(shù)量,0--2;
   00 //波特率 106K;
   E0 //校驗位  D4+4A+02+00=0x0120  取后兩位20的補碼為E0。至于補碼怎么計算自己百度吧。
  1. PN532->PC:  00 00 FF 00 FF 00
  2.                    00 00 FF 0C F4 D5 4B 01 01 00 04 08 04 A1 9F F5 5E 3B 00
復(fù)制代碼
分析:
    00 00 FF 00 FF 00  //ACK;
    00 00 FF 0C F4 D5 //PN532 到 MCU;
    4B //響應(yīng)命令;
    01 //目標(biāo)卡1;
    01 //目標(biāo)卡數(shù)量,最大為0x02,最小為0;
    00 04 //atq;
    08 //卡容量 08=1K;
    04 //4個字節(jié)UID;
    02 F5 13 BE //UID;
    06 00 //DCS+POST;
到這一步總體來說還算順利,主要是因為可以發(fā)送完命令在再刷卡也行,也可以把卡一直放上。
(3)密鑰驗證,注意驗證完秘鑰,卡不能離開,需要一直放在上面,才能順利的完成下面讀寫操作,還有注意替換步驟(2)的UID,最后根據(jù)自己的UID計算校驗位即倒數(shù)第二位。
  1. PC->PN532:  00 00 fF 0F F1 D4 40 01 60 07 FF FF FF FF FF FFA1 9F F5 5E C2 00
復(fù)制代碼
分析:   
     40 //命令;
     01 //卡1;
     60 //密鑰驗證命令;
     07 //塊號;
     ff ff ff ff ff ff //密鑰;
     A1 9F F5 5E //UID 替換為步驟2得到的UID ;
     C2 //檢驗位,根據(jù)替換的UID計算,計方法跟步驟(2)一樣。
  1. PN532->PC: 00 00 FF 00 FF 00
  2.                   00 00 FF 03 FD D5 41 00 EA 00
復(fù)制代碼
分析:
    41 00 //正確狀態(tài)。
(4)開始讀卡,M1卡有16個扇區(qū),每個扇區(qū)4個塊。
  1. PC->PN532: 00 00 ff 05 fb D4 40 01 30 07 B4 00 //讀第7塊
  2. PC->PN532: 00 00 ff 05 fb D4 40 01 30 06 B5 00 //讀第6塊
  3. PC->PN532: 00 00 ff 05 fb D4 40 01 30 08 B3 00 //讀第8塊
復(fù)制代碼
分析:  
     40 //命令;
     01 //卡1;
     30 //讀卡命令;
     07 //塊號。
  1. PN532->PC: 00 00 FF 00 FF 00 //ACK
  2.                   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塊
  3. PN532->PC: 00 00 FF 00 FF 00 //ACK
  4.                   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塊
復(fù)制代碼
分析:
    41 00 //正確
    錯誤會返回: 00 00 FF 00 FF 00
                      00 00 FF 03 FD D5 41 13 D7 00
    41 03 //錯誤。
(5)寫卡
  1. 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
復(fù)制代碼
分析:   
    40 //命令;
     01 //卡1;
     A0 //寫卡命令;
     06 //塊號;
     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  //16字節(jié)數(shù)據(jù);
     CD//校驗和,如果更改其他的數(shù)需重新計算。
  1. PN532->PC: 00 00 00 FF 00 FF 00
  2.                   00 00 FF 03 FD D5 41 00 EA 00
復(fù)制代碼
分析:
    41 00 //正確。
二、使用上位機(jī)方式進(jìn)行操作
下面使用上位機(jī)軟件進(jìn)行讀寫測試:我們使用一個USB轉(zhuǎn)串口模塊連接到PN532模塊。
PN532模塊:

電路連接如下:

我們使用模塊的串口模式接口,因此在上面的配置模式中我們選的是HSU這個,即1、2兩個開關(guān)都在左邊(基于上圖)。
連接好以后,我們打開上位機(jī)軟件,如下圖:

如果我們連接沒有問題,接口選擇也正確,就會顯示“發(fā)現(xiàn)NFC設(shè)備”標(biāo)識,如果沒有連接好,則會出現(xiàn)“未發(fā)現(xiàn)NFC設(shè)備”。
上一步成功后,我們就可以操作PN532來進(jìn)行讀寫其他NFC卡片設(shè)備了。
我們把門禁卡放在PN532模塊上方,如下圖所示:

然后點擊上位機(jī)中的【讀取卡:讀取卡片內(nèi)容】,就可以讀取到卡片的內(nèi)容了:

更多詳細(xì)資料可到零知實驗室官網(wǎng)免費領(lǐng)取。







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1