當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > NFC之PN532使用
一、簡介
PN532是一個高度集成的非接觸讀寫芯片,它包含80C51微控制器內(nèi)核,集成了13.56MHz下的各種主動/被動式非接觸通信方法和協(xié)議。
本文引用地址://www.einuk.cn/emb/Column/7286.html
工作模式:
● 讀寫器模式,支持ISO/IEC 14443A / MIFARE®機(jī)制
● 讀寫器模式,支持 FeliCa機(jī)制
● 讀寫器模式,支持ISO/IEC 14443B機(jī)制
● 卡操作模式,支持ISO 14443A / MIFARE®機(jī)制
● 卡操作模式,F(xiàn)eliCa機(jī)制
● ISO/IEC18092,ECM340點對點
特性
● 帶40 kB ROM和1 kB RAM的80C51微控制器內(nèi)核
● 高度集成的模擬電路,解調(diào)和譯碼響應(yīng)
● 輸出緩沖驅(qū)動器通過少量的外部無源器件連接天線
● 集成了RF場檢測器
● 集成了數(shù)據(jù)模式檢測器
● 支持ISO/IEC 14443A / MIFARE®
● 只在讀寫器模式中支持ISO/IEC 14443B
● 在讀寫器模式中典型工作距離超過50mm,具體距離由天線尺寸、調(diào)諧和電源決定
● 在NFCIP-1模式下工作距離高達(dá)50mm,具體視天線的尺寸、調(diào)諧以及電源而定
● 在卡操作模式中典型工作距離約為100mm,具體距離由天線尺寸、調(diào)諧和外部場強(qiáng)度決定
● 在讀寫器模式中,支持Mifare Classic加密,可支持212 kbit/s和424 kbit/s兩種更高數(shù)據(jù)傳輸速率
● FeliCa模式下,支持106kbit/s 、212kbit/s和424kbit/s的通信波特率
● 集成了NFCIP-1的RF接口,傳輸速率高達(dá)424kbit/s
● 支持主機(jī)接口:
-SPI接口
-I2C接口
-串行UART
● 靈活的中斷模式
● 低功耗模式 一硬件掉電模式 一軟件掉電模式
● 當(dāng)器件處于掉電模式時能夠通過I2C、HSU和SPI接口自動喚醒
● 可編程定時器
● 石英晶體振蕩器
● 2.7V~5.5V的電源
二、通信接口
PN532和主機(jī)之間有三種方式進(jìn)行通信:I2C 、SPI、 HSU,這樣幾乎滿足了所有的主控芯片。下圖是通信方式的選擇
需要注意的是:
SPI只能選擇工作模式0。也就是說SPI的空閑電平為 高電平、數(shù)據(jù)總是在SCK的第一個邊沿采樣、數(shù)據(jù)發(fā)送格式總是LSB在前。只要NSS引腳拉低,芯片就會被喚醒。
HSU高速串口的默認(rèn)配置是:8個數(shù)據(jù)位,1個停止位,LSB先發(fā)送,波特率115200,無校驗
I2C模式下,默認(rèn)的從機(jī)地址是0x48,先發(fā)送MSB,高支持速率400KHz
三、數(shù)據(jù)包格式
PN532與主機(jī)之間的通信數(shù)據(jù)有固定的格式,只要我們按照規(guī)定的格式發(fā)送數(shù)據(jù),就可以完全控制PN532。這樣大大提高我們開發(fā)的效率
1、 正常數(shù)據(jù)包
00 序列頭
00 FF 起始號
LEN 數(shù)據(jù)包的長度,包含TFI
LCS 數(shù)據(jù)長度校驗和, LEN+LCS=0
TFI 命令
PD0 PD1 … PDn 數(shù)據(jù)
DCS 數(shù)據(jù)校驗和 TFI+PD0+…PDn = 0
00 序列結(jié)尾
2、 PN532應(yīng)答包
00 序列頭
00 FF 起始號
00 FF 應(yīng)答包
00 結(jié)束序列
3、 非應(yīng)答包
00 序列頭
00 FF 起始號
FF 00 沒有應(yīng)答
00 結(jié)束序列
4、 加長數(shù)據(jù)包
正常的情況下,只能發(fā)送256個字節(jié)的數(shù)據(jù),PN532提供一種特殊的格式,可以發(fā)送更多的數(shù)據(jù)。當(dāng)然我們在使用的時候要依據(jù)實際的情況去選擇
00 序列頭
00 FF 起始號
FF 正常模式下的包長度,這里是FF
FF 正常模式下的包長度校驗和,這里是FF
LENM 數(shù)據(jù)包的長度高字節(jié),
LENL 數(shù)據(jù)包的長度低字節(jié),包含TFI
LCS 數(shù)據(jù)長度校驗和,LENM + LENL +LCS=0
TFI 命令
PD0 PD1 … PDn 數(shù)據(jù)
DCS 數(shù)據(jù)校驗和 TFI+PD0+…PDn = 0
00 序列結(jié)尾
四、喚醒PN532
將芯片喚醒必須滿足以下3個條件
1)PVDD引腳拉高
2)I2C模式下發(fā)送地址48h,SPI模式下將NSS拉低,串口模式下的其實數(shù)據(jù)頭必須為0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00
3)主機(jī)必須發(fā)送命令14 02 00(虛擬模式)或者14 01(正常模式)
五、讀寫S50卡片過程
1、喚醒模塊,主機(jī)發(fā)送命令
0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00
模塊回應(yīng)
0x00,0x00,0xFF,0x02,0xFE,0xD5,0x15,0x16,0x00
在喚醒模塊的過程中,數(shù)據(jù)的包頭有些特殊,而這個包頭是有芯片手冊中找到的。
注意,為了簡略,下面的命令只包含數(shù)據(jù)包格式中的TFI\DATA,其他的請讀者自行加上
2、掃描卡片并獲取到卡片ID,主機(jī)發(fā)送
0xd4,0x4A(列出卡片),0x02(數(shù)量多2個),0x00(波特率)
Response
0xd5,0x4b,0x02兩個設(shè)備
0x01(一號設(shè)備),0x04,0x00,0x08,0x04(長度),id1,id2,id3,id4,
0x02(二號設(shè)備),0x04,0x00,0x00,0x04(長度),id1,id2,id3,id4,
3、驗證A秘鑰,主機(jī)發(fā)送
0xd4,0x40(交換數(shù)據(jù)),0x01(1號設(shè)備),0x60(驗證A),0x03(地址)
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF(keyA),0xC1,0x32,0x77,0x03(id)
Response
0xd5,0x41,0x00(成功)
4、驗證B秘鑰,主機(jī)發(fā)送
0xd4,0x40(交換數(shù)據(jù)),0x01(1號設(shè)備),0x61(驗證B),0x03(地址)
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF(keyB),0xC1,0x32,0x77,0x03(id)
Response
0xd5,0x41,0x00(成功)
5、讀卡,主機(jī)發(fā)送
0xd4,0x40(交換數(shù)據(jù)),0x01(1號設(shè)備)1,0x30(讀16Bytes),0x02(地址)
Response
0xd5,0x41,0x00(成功),byte1,btyte2…
6、寫卡,主機(jī)發(fā)送
0xd4,0x40(交換數(shù)據(jù)),0x01(1號設(shè)備)1,0xA0(寫16Bytes),0x02(地址),Data1,data2…
Response
0xd5,0x41,0x00(成功)