NFC芯片相關(guān)的內(nèi)容總結(jié)
前言
我們提到NFC的一些標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)主要是讀卡器和標(biāo)簽卡之間的通信協(xié)議。所以我們要對標(biāo)簽卡進行讀寫就需要了解相關(guān)協(xié)議。我們先從ISO14443A開始了解,因為目前市面上使用該標(biāo)準(zhǔn)的卡最多。
ISO14443簡介
ISO14443分為4個部分協(xié)議,這4個部分對應(yīng)不同的分層。
ISO14443-1: 定義物理特性,可以理解為物理層。
ISO14443-3:?初始化和防碰撞。
ISO14443-4:?傳輸協(xié)議。
注意:ISO14443A和ISO14443B都是分成這4個部分,大多數(shù)是共用的,只是里面有部分是描述A的,部分是描述B的。
名詞解析 PCD: Proximity Coupling Device, 近耦合設(shè)備, 簡單理解就是讀寫卡設(shè)備。 PICC: Proximity Card, 感應(yīng)卡,簡單理解就是標(biāo)簽卡。 SAK: Select Acknowledge
UID: Unique Identifier, 唯一標(biāo)識符
命令介紹
對于軟件開發(fā)者而言,我們主要是研究ISO14443-3和ISO14443-4協(xié)議。初始化和防碰撞相關(guān)內(nèi)容在ISO14443-3上。
ISO14443-3協(xié)議中定義了相關(guān)的時序和命令,我們先不探討時序,本文主要來了解命令(Command)定義。
REQA/WUPA
讀卡器發(fā)送REQA或WUPA命令來檢查是否有卡存在。命令碼如下:
*注意:?只有7個bit
那這兩條命令有什么區(qū)別呢?
WUPA命令是處于IDLE或HALT狀態(tài)的卡都會應(yīng)答,而REQA命令只有處于IDLE狀態(tài)的卡會應(yīng)答。標(biāo)簽卡剛上電就處于IDLE狀態(tài),當(dāng)讀卡器發(fā)送HALT命令之后,標(biāo)簽卡就進入HALT狀態(tài)(就是休眠狀態(tài))。
ANTICOLISION和SELECT
這兩條命令是用來進行防碰撞的,所謂的防碰撞就是當(dāng)有多張卡被檢查到時,要如何選擇卡。命令格式如下:
Byte1 | Byte2 | Byte3~Byte7 |
SEL | NVB | UID |
(1)?SEL:選擇碼,選擇代碼分成三個層次,級別一選擇代碼為0x93,級別二為0x95,級別三為0x97。為什么會有三級呢? 因為一張卡的UID有可能是4Byte,7Byte或10Byte。可能有些人又會有疑問,上面UID字段不是才5Byte嗎,如何讀出7個和10個字節(jié)呢?下面內(nèi)容會解釋。
(2)?NVB:有效比特數(shù),指PCD傳輸了的字節(jié)數(shù)和比特位數(shù)。NVB的高4位表示已經(jīng)傳輸?shù)淖止?jié)數(shù),低4位表示已經(jīng)傳輸?shù)腷it。比如:00100001, 就是2byte+1bit,總共傳輸了17bit。當(dāng)NVB為0x70時,則表示的是SELECT命令。
(3)UID: 唯一ID, ?傳輸?shù)拈L度根據(jù)具體的碰撞情況而定,傳輸范圍在0~40個比特位之間,它會由NVB指出。
防碰撞是用來確定要選擇的卡的一個過程,它會循環(huán)輪詢UID的每個bit,最終確定卡的UID。
HALT
HALT命令用來讓卡進入休眠狀態(tài)。命令格式如下:
CRC_A為兩個字節(jié), 這條指令是沒有應(yīng)答的!
ATQA
ATQA命令是REQA或WUPA命令的應(yīng)答。命令格式如下:
(1)Proprietary coding:這幾位留給廠家自定義
(2)UID size bit frame:?指示UID的長度
(3)Bit frame anticollision:防撞比特位,不為0時表示有多張卡響應(yīng)REQA或WUPA命令。
SAK
SAK是SELECT命令的應(yīng)答,命令格式如下:
SAK字段定義如下:
通過bit3和bit6來確定UID是否完整,以及PICC是否支持ISO14443-4。
PCD檢測PICC流程
PCD檢測PICC的主要包含PICC檢測、防碰撞和確定PICC類型三個部分。
(1)PCD發(fā)出REQA命令,如果有PICC響應(yīng)ATQA,則表示找到ISO14443A類型的PICC。
(2)進行防碰撞, 防碰撞的過程分成三個級別,第一個級別必須要有,第二和第三級別根據(jù)UID的長度而定。
(3)確定PICC類型,該部分主要由PICC發(fā)送SAK,然后PCD解析SAK,從而確定PICC是否支持ISO14443-4。
防碰撞流程
(1)上圖中的流程1~3設(shè)置了SEL和NVB, 然后PCD發(fā)送ANTICOLLISION命令。上面解釋過NVB的含義,所以0x20表示兩個字節(jié),也就對應(yīng)SEL和NVB這兩個字節(jié)。
(2)流程4~5會根據(jù)收到的數(shù)據(jù)判斷是否有bit沖突。有沖突則要選擇該位是0,還是1,然后繼續(xù)發(fā)送ANTICOLLISION命令,直到?jīng)]有沖突。
(3)沒有bit沖突之后,PCD發(fā)送SELECT命令,最后收到PICC的SAK。
防碰撞級別
上面說過防碰撞級別,通過下圖來更直觀地理解。
如果UID為4個字節(jié),則只需發(fā)送第一級ANTICOLISION(0x93);如果UID長度為7個字節(jié),則發(fā)完第一級ANTICOLISION(0x93),? 還要繼續(xù)發(fā)第二級ANTICOLISION(0x95);如果UID長度為10個字節(jié),除了發(fā)送第一,二級,還要發(fā)送第三級ANTICOLISION(0x97)。
通過多級ANTICOLISION之后才能獲取到標(biāo)簽卡(PICC)的完整UID。
總結(jié)
單純看協(xié)議可能會比較枯燥,所以建議可以找一份代碼,邊看代碼邊閱讀協(xié)議,比如RC522的參考代碼。
審核編輯:劉清
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
相關(guān)閱讀:
- [移動通信] 5G 3GPP全球頻譜介紹 2023-10-24
- [電子說] 射頻識別技術(shù)漫談(27)——CPU卡概述 2023-10-24
- [電子說] 射頻識別技術(shù)漫談(26)——Felica的文件系統(tǒng) 2023-10-24
- [制造/封裝] 智能工廠系統(tǒng)集成解決方案 2023-10-24
- [電子說] 功率放大器的基本原理、分類、工作模式和應(yīng)用 2023-10-23
- [電子說] RFID資產(chǎn)管理解決方案 2023-10-23
- [電子說] 華普微推出首款Matter模塊,助力智能家居互聯(lián)互通 2023-10-23
- [電子說] 近場通訊結(jié)構(gòu)解析 2023-10-23
( 發(fā)表人:劉芹 )