<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>電子百科>無線通信>

NFC芯片相關的內容總結

2022年09月15日 09:44 嵌入式軟件開發交流 作者:young 用戶評論(0

前言

我們提到NFC的一些標準,這些標準主要是讀卡器和標簽卡之間的通信協議。所以我們要對標簽卡進行讀寫就需要了解相關協議。我們先從ISO14443A開始了解,因為目前市面上使用該標準的卡最多。

ISO14443簡介

ISO14443分為4個部分協議,這4個部分對應不同的分層。

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

ISO14443-2:?射頻電源信號接口。

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

ISO14443-4:?傳輸協議。

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

名詞解析 PCD: Proximity Coupling Device, 近耦合設備, 簡單理解就是讀寫卡設備。 PICC: Proximity Card, 感應卡,簡單理解就是標簽卡。 SAK: Select Acknowledge

UID: Unique Identifier, 唯一標識符

命令介紹

對于軟件開發者而言,我們主要是研究ISO14443-3和ISO14443-4協議。初始化和防碰撞相關內容在ISO14443-3上。

ISO14443-3協議中定義了相關的時序和命令,我們先不探討時序,本文主要來了解命令(Command)定義。

REQA/WUPA

讀卡器發送REQA或WUPA命令來檢查是否有卡存在。命令碼如下:

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

*注意:?只有7個bit

那這兩條命令有什么區別呢?

WUPA命令是處于IDLE或HALT狀態的卡都會應答,而REQA命令只有處于IDLE狀態的卡會應答。標簽卡剛上電就處于IDLE狀態,當讀卡器發送HALT命令之后,標簽卡就進入HALT狀態(就是休眠狀態)。

ANTICOLISION和SELECT

這兩條命令是用來進行防碰撞的,所謂的防碰撞就是當有多張卡被檢查到時,要如何選擇卡。命令格式如下:

Byte1 Byte2 Byte3~Byte7
SEL NVB UID

(1)?SEL:選擇碼,選擇代碼分成三個層次,級別一選擇代碼為0x93,級別二為0x95,級別三為0x97。為什么會有三級呢? 因為一張卡的UID有可能是4Byte,7Byte或10Byte??赡苡行┤擞謺幸蓡?,上面UID字段不是才5Byte嗎,如何讀出7個和10個字節呢?下面內容會解釋。

(2)?NVB:有效比特數,指PCD傳輸了的字節數和比特位數。NVB的高4位表示已經傳輸的字節數,低4位表示已經傳輸的bit。比如:00100001, 就是2byte+1bit,總共傳輸了17bit。當NVB為0x70時,則表示的是SELECT命令。

(3)UID: 唯一ID, ?傳輸的長度根據具體的碰撞情況而定,傳輸范圍在0~40個比特位之間,它會由NVB指出。

防碰撞是用來確定要選擇的卡的一個過程,它會循環輪詢UID的每個bit,最終確定卡的UID。

HALT

HALT命令用來讓卡進入休眠狀態。命令格式如下:

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

CRC_A為兩個字節, 這條指令是沒有應答的!

ATQA

ATQA命令是REQA或WUPA命令的應答。命令格式如下:

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

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

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

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

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

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

SAK

SAK是SELECT命令的應答,命令格式如下:

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

SAK字段定義如下:

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

通過bit3和bit6來確定UID是否完整,以及PICC是否支持ISO14443-4。

PCD檢測PICC流程

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

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

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

(2)進行防碰撞, 防碰撞的過程分成三個級別,第一個級別必須要有,第二和第三級別根據UID的長度而定。

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

防碰撞流程

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

(1)上圖中的流程1~3設置了SEL和NVB, 然后PCD發送ANTICOLLISION命令。上面解釋過NVB的含義,所以0x20表示兩個字節,也就對應SEL和NVB這兩個字節。

(2)流程4~5會根據收到的數據判斷是否有bit沖突。有沖突則要選擇該位是0,還是1,然后繼續發送ANTICOLLISION命令,直到沒有沖突。

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

防碰撞級別

上面說過防碰撞級別,通過下圖來更直觀地理解。

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

如果UID為4個字節,則只需發送第一級ANTICOLISION(0x93);如果UID長度為7個字節,則發完第一級ANTICOLISION(0x93),? 還要繼續發第二級ANTICOLISION(0x95);如果UID長度為10個字節,除了發送第一,二級,還要發送第三級ANTICOLISION(0x97)。

通過多級ANTICOLISION之后才能獲取到標簽卡(PICC)的完整UID。

總結

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




審核編輯:劉清

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

( 發表人:劉芹 )

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
      <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
      <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
      <acronym id="s8ci2"></acronym>
      <acronym id="s8ci2"><center id="s8ci2"></center></acronym>