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