 NFC之PN532使用
							時間:2018-09-27      來源:未知
							NFC之PN532使用
							時間:2018-09-27      來源:未知 
							一、簡介
PN532是(shi)一個高度集成的非接觸讀(du)寫芯片(pian),它(ta)包含(han)80C51微控(kong)制(zhi)器內核,集成了13.56MHz下的各種主動/被動式非接觸通信方法和協(xie)議。
本文引用地址://fsbing.cn/emb/Column/7286.html
工作模式:
● 讀寫(xie)器模式,支持ISO/IEC 14443A / MIFARE®機(ji)制
● 讀寫器模(mo)式,支持(chi) FeliCa機制
● 讀寫器模式(shi),支持ISO/IEC 14443B機(ji)制
● 卡(ka)操作模式,支(zhi)持ISO 14443A / MIFARE®機制
● 卡操(cao)作模式,FeliCa機制(zhi)
● ISO/IEC18092,ECM340點對點
特性
● 帶(dai)40 kB ROM和1 kB RAM的(de)80C51微控制器內核
● 高度集成的模擬電路,解調和(he)譯碼響應
● 輸出緩沖驅動器(qi)通過少量(liang)的外部無(wu)源器(qi)件連接天線
● 集成了RF場檢測器
● 集成了數據模式檢測器(qi)
● 支(zhi)持ISO/IEC 14443A / MIFARE®
● 只在讀寫(xie)器模式中支(zhi)持ISO/IEC 14443B
● 在讀寫器模式中(zhong)典型(xing)工(gong)作距離超過50mm,具體距離由天線尺寸、調諧和電源決定
● 在(zai)NFCIP-1模式下工作(zuo)距離高達(da)50mm,具體視天線的(de)尺寸、調諧以(yi)及電源(yuan)而定
● 在卡操作模式中典型工作距離約為100mm,具體距離由天線(xian)尺(chi)寸(cun)、調諧和外部(bu)場強度決定
● 在讀寫器模(mo)式中,支持Mifare Classic加密,可支持212 kbit/s和424 kbit/s兩(liang)種更高數據傳輸速率(lv)
● FeliCa模式(shi)下,支持106kbit/s 、212kbit/s和424kbit/s的通信波特率
● 集成了NFCIP-1的RF接口(kou),傳輸速率高(gao)達(da)424kbit/s
● 支持主機接口:
-SPI接口
-I2C接口
-串(chuan)行UART
● 靈活的中斷模式
● 低(di)功耗模式 一(yi)硬件掉電模式 一(yi)軟件掉電模式
● 當器件處于(yu)掉(diao)電模式時能夠通(tong)過I2C、HSU和SPI接口(kou)自(zi)動喚醒
● 可編程定時器
● 石英晶體振蕩器
● 2.7V~5.5V的電(dian)源
二、通信接口
PN532和主(zhu)機之間有(you)(you)三種方(fang)式(shi)進行通(tong)(tong)信:I2C 、SPI、 HSU,這(zhe)樣幾乎滿足(zu)了所有(you)(you)的(de)主(zhu)控芯片。下圖(tu)是(shi)通(tong)(tong)信方(fang)式(shi)的(de)選擇
  
需要(yao)注意的是:
SPI只能選擇(ze)工作模式0。也(ye)就(jiu)是(shi)說SPI的空閑(xian)電平為 高電平、數(shu)據總是(shi)在(zai)SCK的第(di)一個邊沿(yan)采樣、數(shu)據發送格式總是(shi)LSB在(zai)前。只要NSS引腳(jiao)拉低,芯片就(jiu)會被喚(huan)醒。
HSU高(gao)速串(chuan)口的默認(ren)配置是:8個數據位(wei),1個停止位(wei),LSB先發送,波特率115200,無校驗
I2C模式下,默認的從(cong)機地(di)址是(shi)0x48,先發送MSB,高支(zhi)持速率400KHz
三、數據包格式
PN532與主機之(zhi)間的(de)通信數(shu)據有固定(ding)的(de)格(ge)式(shi),只要(yao)我(wo)們按照(zhao)規定(ding)的(de)格(ge)式(shi)發(fa)送數(shu)據,就可以(yi)完全控制PN532。這樣(yang)大大提(ti)高我(wo)們開發(fa)的(de)效(xiao)率
1、 正(zheng)常數(shu)據包
 
00 序列頭
00 FF 起(qi)始號
LEN 數(shu)據包(bao)的長度(du),包(bao)含TFI
LCS 數據長度校驗(yan)和, LEN+LCS=0
TFI 命令
PD0 PD1 … PDn 數據
DCS 數據校驗和 TFI+PD0+…PDn = 0
00 序列結(jie)尾
2、 PN532應答(da)包
  
00 序列頭
00 FF 起始號
00 FF 應答包
00 結(jie)束(shu)序列
3、 非應(ying)答(da)包
  
00 序列頭
00 FF 起始號
FF 00 沒有應答
00 結束(shu)序列
4、 加長數(shu)據包
正常(chang)的(de)情況下,只能發送(song)(song)256個字節(jie)的(de)數據,PN532提供(gong)一種特殊(shu)的(de)格式,可(ke)以發送(song)(song)更(geng)多的(de)數據。當然我們(men)在使(shi)用的(de)時候要依據實際的(de)情況去選(xuan)擇
  
00 序列頭
00 FF 起始號
FF 正常模(mo)式(shi)下的包長(chang)度,這里(li)是(shi)FF
FF 正常模式下的包長度校驗和,這里(li)是(shi)FF
LENM 數據包的長度高字節(jie),
LENL 數據包(bao)的長度(du)低字節,包(bao)含TFI
LCS 數(shu)據長度(du)校驗和,LENM + LENL +LCS=0
TFI 命令
PD0 PD1 … PDn 數據
DCS 數據(ju)校驗和 TFI+PD0+…PDn = 0
00 序列結尾
四、喚醒PN532
將(jiang)芯(xin)片喚(huan)醒必須(xu)滿足以(yi)下3個條(tiao)件
1)PVDD引腳拉高
2)I2C模(mo)式(shi)下發送地址48h,SPI模(mo)式(shi)下將(jiang)NSS拉(la)低,串口(kou)模(mo)式(shi)下的(de)其實(shi)數(shu)據頭必須為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(虛擬模式(shi))或者14 01(正常模式(shi))
五、讀寫S50卡片過程
1、喚(huan)醒模(mo)塊,主機發送命令
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
在喚醒(xing)模塊(kuai)的過程中,數據的包頭(tou)有些特殊,而(er)這個包頭(tou)是有芯片手冊中找到的。
注意,為(wei)了簡略,下(xia)面的命(ming)令只包含(han)數據包格(ge)式中的TFI\DATA,其他的請讀者自行加上
2、掃描卡片(pian)并獲取到卡片(pian)ID,主機(ji)發(fa)送
0xd4,0x4A(列出卡片),0x02(數量多2個),0x00(波(bo)特率)
Response
0xd5,0x4b,0x02兩個設備
0x01(一(yi)號設(she)備),0x04,0x00,0x08,0x04(長度),id1,id2,id3,id4,
0x02(二號設備),0x04,0x00,0x00,0x04(長(chang)度),id1,id2,id3,id4,
3、驗證A秘鑰,主(zhu)機(ji)發送(song)
0xd4,0x40(交換數據),0x01(1號(hao)設備(bei)),0x60(驗證A),0x03(地址(zhi))
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF(keyA),0xC1,0x32,0x77,0x03(id)
Response
0xd5,0x41,0x00(成功)
4、驗(yan)證B秘(mi)鑰,主(zhu)機發送
0xd4,0x40(交換數據),0x01(1號設備),0x61(驗(yan)證B),0x03(地址)
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF(keyB),0xC1,0x32,0x77,0x03(id)
Response
0xd5,0x41,0x00(成功(gong))
5、讀卡,主機發送(song)
0xd4,0x40(交換數據),0x01(1號設(she)備(bei))1,0x30(讀16Bytes),0x02(地址)
Response
0xd5,0x41,0x00(成功),byte1,btyte2…
6、寫卡,主機發送
0xd4,0x40(交換數(shu)據(ju)),0x01(1號(hao)設備)1,0xA0(寫16Bytes),0x02(地址),Data1,data2…
Response
0xd5,0x41,0x00(成功)

