99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>無(wú)線通信>

NFC芯片相關(guān)的內(nèi)容總結(jié)

2022年09月15日 09:44 嵌入式軟件開(kāi)發(fā)交流 作者:young 用戶評(píng)論(0

前言

我們提到NFC的一些標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)主要是讀卡器和標(biāo)簽卡之間的通信協(xié)議。所以我們要對(duì)標(biāo)簽卡進(jìn)行讀寫(xiě)就需要了解相關(guān)協(xié)議。我們先從ISO14443A開(kāi)始了解,因?yàn)槟壳笆忻嫔鲜褂迷摌?biāo)準(zhǔn)的卡最多。

ISO14443簡(jiǎn)介

ISO14443分為4個(gè)部分協(xié)議,這4個(gè)部分對(duì)應(yīng)不同的分層。

ISO14443-1: 定義物理特性,可以理解為物理層。

ISO14443-2:?射頻電源信號(hào)接口。

ISO14443-3:?初始化和防碰撞。

ISO14443-4:?傳輸協(xié)議。

注意:ISO14443A和ISO14443B都是分成這4個(gè)部分,大多數(shù)是共用的,只是里面有部分是描述A的,部分是描述B的。

名詞解析 PCD: Proximity Coupling Device, 近耦合設(shè)備, 簡(jiǎn)單理解就是讀寫(xiě)卡設(shè)備。 PICC: Proximity Card, 感應(yīng)卡,簡(jiǎn)單理解就是標(biāo)簽卡。 SAK: Select Acknowledge

UID: Unique Identifier, 唯一標(biāo)識(shí)符

命令介紹

對(duì)于軟件開(kāi)發(fā)者而言,我們主要是研究ISO14443-3和ISO14443-4協(xié)議。初始化和防碰撞相關(guān)內(nèi)容在ISO14443-3上。

ISO14443-3協(xié)議中定義了相關(guān)的時(shí)序和命令,我們先不探討時(shí)序,本文主要來(lái)了解命令(Command)定義。

REQA/WUPA

讀卡器發(fā)送REQA或WUPA命令來(lái)檢查是否有卡存在。命令碼如下:

02c649c4-348d-11ed-ba43-dac502259ad0.png

*注意:?只有7個(gè)bit

那這兩條命令有什么區(qū)別呢?

WUPA命令是處于IDLE或HALT狀態(tài)的卡都會(huì)應(yīng)答,而REQA命令只有處于IDLE狀態(tài)的卡會(huì)應(yīng)答。標(biāo)簽卡剛上電就處于IDLE狀態(tài),當(dāng)讀卡器發(fā)送HALT命令之后,標(biāo)簽卡就進(jìn)入HALT狀態(tài)(就是休眠狀態(tài))。

ANTICOLISION和SELECT

這兩條命令是用來(lái)進(jìn)行防碰撞的,所謂的防碰撞就是當(dāng)有多張卡被檢查到時(shí),要如何選擇卡。命令格式如下:

Byte1 Byte2 Byte3~Byte7
SEL NVB UID

(1)?SEL:選擇碼,選擇代碼分成三個(gè)層次,級(jí)別一選擇代碼為0x93,級(jí)別二為0x95,級(jí)別三為0x97。為什么會(huì)有三級(jí)呢? 因?yàn)橐粡埧ǖ腢ID有可能是4Byte,7Byte或10Byte??赡苡行┤擞謺?huì)有疑問(wèn),上面UID字段不是才5Byte嗎,如何讀出7個(gè)和10個(gè)字節(jié)呢?下面內(nèi)容會(huì)解釋。

(2)?NVB:有效比特?cái)?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時(shí),則表示的是SELECT命令。

(3)UID: 唯一ID, ?傳輸?shù)拈L(zhǎng)度根據(jù)具體的碰撞情況而定,傳輸范圍在0~40個(gè)比特位之間,它會(huì)由NVB指出。

防碰撞是用來(lái)確定要選擇的卡的一個(gè)過(guò)程,它會(huì)循環(huán)輪詢UID的每個(gè)bit,最終確定卡的UID。

HALT

HALT命令用來(lái)讓卡進(jìn)入休眠狀態(tài)。命令格式如下:

02ec2928-348d-11ed-ba43-dac502259ad0.png

CRC_A為兩個(gè)字節(jié), 這條指令是沒(méi)有應(yīng)答的!

ATQA

ATQA命令是REQA或WUPA命令的應(yīng)答。命令格式如下:

0304ee18-348d-11ed-ba43-dac502259ad0.png

(1)Proprietary coding:這幾位留給廠家自定義

(2)UID size bit frame:?指示UID的長(zhǎng)度

0326ebf8-348d-11ed-ba43-dac502259ad0.png

(3)Bit frame anticollision:防撞比特位,不為0時(shí)表示有多張卡響應(yīng)REQA或WUPA命令。

0348c6ec-348d-11ed-ba43-dac502259ad0.png

SAK

SAK是SELECT命令的應(yīng)答,命令格式如下:

03976d88-348d-11ed-ba43-dac502259ad0.png

SAK字段定義如下:

03cbdaa0-348d-11ed-ba43-dac502259ad0.png

通過(guò)bit3和bit6來(lái)確定UID是否完整,以及PICC是否支持ISO14443-4。

PCD檢測(cè)PICC流程

03fba49c-348d-11ed-ba43-dac502259ad0.png

PCD檢測(cè)PICC的主要包含PICC檢測(cè)、防碰撞和確定PICC類型三個(gè)部分。

(1)PCD發(fā)出REQA命令,如果有PICC響應(yīng)ATQA,則表示找到ISO14443A類型的PICC。

(2)進(jìn)行防碰撞, 防碰撞的過(guò)程分成三個(gè)級(jí)別,第一個(gè)級(jí)別必須要有,第二和第三級(jí)別根據(jù)UID的長(zhǎng)度而定。

(3)確定PICC類型,該部分主要由PICC發(fā)送SAK,然后PCD解析SAK,從而確定PICC是否支持ISO14443-4。

防碰撞流程

0439446e-348d-11ed-ba43-dac502259ad0.png

(1)上圖中的流程1~3設(shè)置了SEL和NVB, 然后PCD發(fā)送ANTICOLLISION命令。上面解釋過(guò)NVB的含義,所以0x20表示兩個(gè)字節(jié),也就對(duì)應(yīng)SEL和NVB這兩個(gè)字節(jié)。

(2)流程4~5會(huì)根據(jù)收到的數(shù)據(jù)判斷是否有bit沖突。有沖突則要選擇該位是0,還是1,然后繼續(xù)發(fā)送ANTICOLLISION命令,直到?jīng)]有沖突。

(3)沒(méi)有bit沖突之后,PCD發(fā)送SELECT命令,最后收到PICC的SAK。

防碰撞級(jí)別

上面說(shuō)過(guò)防碰撞級(jí)別,通過(guò)下圖來(lái)更直觀地理解。

046e2468-348d-11ed-ba43-dac502259ad0.png

如果UID為4個(gè)字節(jié),則只需發(fā)送第一級(jí)ANTICOLISION(0x93);如果UID長(zhǎng)度為7個(gè)字節(jié),則發(fā)完第一級(jí)ANTICOLISION(0x93),? 還要繼續(xù)發(fā)第二級(jí)ANTICOLISION(0x95);如果UID長(zhǎng)度為10個(gè)字節(jié),除了發(fā)送第一,二級(jí),還要發(fā)送第三級(jí)ANTICOLISION(0x97)。

通過(guò)多級(jí)ANTICOLISION之后才能獲取到標(biāo)簽卡(PICC)的完整UID。

總結(jié)

單純看協(xié)議可能會(huì)比較枯燥,所以建議可以找一份代碼,邊看代碼邊閱讀協(xié)議,比如RC522的參考代碼。




審核編輯:劉清

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

( 發(fā)表人:劉芹 )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?