ISO14443 Type A類型卡的防碰撞過程以及命令解析

一、介紹

本博文介紹了PCD(Proximity Coupling Device)使用ISO14443-3 Type A協議檢測匹配的PICC(Polling For Proximity Cards)命令以及防碰撞過程(Anticollision Proccess)。

二、命令

2.1 REQAWUQA

2.1.1 命令概要

REQA命令和WUPA命令是PCD用來檢測Type A類型卡是否在無線射頻場(RF)。區別在於REQA命令是用PCD在剛開始檢測PICC是否在RF中,而WUPA是用在PCD讓PICC由停止態(HALT State)回到類準備態(READY* State)。

2.1.2 命令格式

REQA命令和WUPA命令只有一個字節(短幀格式),它們的格式如下(b表示bit;B表示Byte):

A、REQA命令:0x26

b8 b7 b6 b5 b4 b3 b2 b1
RFU 0 1 0 0 1 1 0

注:RFU爲Reserved for Future ISO/IEC Use的縮寫,我喜歡稱之爲“預留”或者“未使用”。

B、WUPA命令:0x52

b8 b7 b6 b5 b4 b3 b2 b1
RFU 1 0 1 0 0 1 0

2.2 ANTICOLISIONSELECT

2.2.1 命令概要

這兩個命令用在防碰撞過程,他們共同包含以下三部分:
(1) 選擇代碼(SEL),佔一個字節。
(2) 有效字節(NVB),佔一個字節。
(3) 0~40個Unique Identifier(UID)比特位。
其中,選擇代碼分成三個層次,根據防碰撞的級別使用(根據參與防碰撞的UID長度使用)。級別一選擇代碼爲0x93,級別二爲0x95,級別三爲0x97。
有效字節是指PCD傳輸了的字節數和比特位數。NVB的高四個比特位表示已經傳輸的比特數除8得到的結果,它包含SEL和NVB字節。所以字節數最小值爲2(只有SEL和NVB),最大值爲7(含有SEL、NVB和5個字節的UID);NVB的低四個比特位表示已經傳輸的比特位數模8,它包含SEL和NVB字節,因此它的最小值爲0,最大值爲7。

2.2.2 命令格式

B1 B2 B3~B7
SEL NVB UID

注:UID傳輸的長度根據具體的碰撞請情況而定,傳輸範圍在0~40個比特位之間。它會由NVB指出。

2.3 HLTA

2.3.1 命令概要

該命令用於PICC不響應PCD的解調命令,它佔兩個字節,後面跟着一個CRC_A。第一個字節爲0x50,第二個字節爲0x00,CRC_A的計算方法參見ISO14443-3文檔。

2.3.2 命令格式

1st Byte 2nd Byte 3rdByte 4th Byte
0x50 0x00 CRC_A

2.4 ATQA

2.4.1 命令概要

ATQA命令是PICC對PCD發出的REQA或WUPA命令的響應命令。當PCD發出REQA命令時,多張PICC都有響應時,該命令可以指出防撞的發生情況。

2.4.2 命令格式

這裏寫圖片描述
注:
A、所有的RFU都默認設置爲0.
B、專有編碼(Proprietary Coding)根據製造廠商而定,由PICC自己響應。
C、UID類型(UID size bit frame)分成三種。
這裏寫圖片描述
其中UID爲單尺寸時,表示PICC的UID長度爲4個字節;雙尺寸表示PICC的UID長度爲7個字節;三尺寸表示PICC的UID長度爲10個字節。
D、防撞比特位,該區域的值不爲0時表示有多張卡響應REQA命令。
這裏寫圖片描述

三、PCD檢測PICC過程

3.1 描述

PCD檢測PICC的UID包含卡檢測、防碰撞和具體PICC類型識別三個部分。
——第一部分是卡檢測。主要是由PCD發出REQA命令,在RF場中的PICC發出ATQA進行響應的部分。如果有PICC響應ATQA,則表示RF場中含有ISO14443 Type A類型的PICC。若ATQA中的碰撞比特位不爲零,表示有多張PICC存在RF中,需要進行多次防碰撞。
——第二部分是防碰撞。防碰撞的過程分成三個級別,第一個級別必須要有,第二和第三級別視具體情況而定(ATQA的碰撞比特位和UID的長度)。如果只有一張PICC,那麼只進行第一級別的防碰撞過程;多張相應REQA,纔會進行第二第三級別的防碰撞過程。
——第三部分是具體PICC類型識別。該部分主要由PICC發送SAK,由PCD解析SAK從而確定PICC的具體類型。

3.2 流程圖

PCD檢測PICC流程圖
說明:該流程圖包含三個部分:卡檢測、防碰撞、卡具體類型識別。

四、防碰撞

4.1 描述

(1)PCD設置SEL編碼和選擇碰撞級別。(當SEL編碼爲0x93時,表示碰撞級別一;當SEL編碼爲0x95時,表示碰撞級別二;當SEL編碼爲0x97時,表示碰撞級別三)。
(2)PCD設置NVB的初始值爲0x20。表示傳輸的字節(SEL和NVB)數爲2*8 / 8 = 2,傳輸的比特位爲 2*8 % 8 = 0;
(3)PCD發送SELECT命令,傳輸SEL和NVB。
(4)所有在RF中的PICC發送ATQA進行響應REQA。
(5)假定所有的PICC都有自己獨特的UID序列。如果只有一張PICC進行響應,那麼ATQA中的碰撞比特位爲0;否則進行第(6)步到第(10)步。
(6)PCD根據ATQA識別PICC的UID中碰撞的位置。
(7)根據傳輸的字節數和比特位數重新設置NVB的值,PCD需要設置碰撞響應規則是以比特位1進行,還是以比特位0進行。
(8)PCD發送SELECT命令,傳輸重新設置好的SEL和NVB。
(9)只有PICC的UID等於PCD發送SELECT命令的UID時,表示防碰撞過程成功。
(10)如果還沒選出PICC中的UID,即還有多張卡響應,那麼重複第(6)步到第9步,進行更高級別的碰撞。
(11)如果更高級別的碰撞發生了,PCD應將NVB設置成0x70,表示傳輸了7字節。7 = 1 + 1 + 5(1個字節SEL,1個字節NVB和5個字節【可能是1個字節的CT(0x88)加上3個字節的UID,再加上一個字節的BCC(前面四個傳輸字節異或結果);也可能是四個字節的UID加上一個字節的BCC(前面四個字節UID異或的結果)】)。
(12)PCD發送SELECT命令,傳輸1個字節SEL,1個字節NVB和5個字節UID。
(13)PICC響應SAK,PCD匹配5個字節的UID。
(14)如果UID是完整的,PICC傳輸的SAK清除碰撞級別比特位和從準備態(READY State)切換到激活態(ACTIVE State)或者從類準備態(READY* State)切換到類激活態(ACTIVE* State)。
(15)PCD會檢查SAK去決定是否進行更高層次的防碰撞過程,如果需要則會提升碰撞級別。

注:
A、如果PCD一開始就知道PICC的UID是完整的,那麼PCD會跳過步驟(2)到(10),也就是沒有防碰撞過程。
B、如果含有更高級別的防碰撞過程,那麼也就表示PICC的UID長度不止4個字節。因爲4個字節的UID只能進行級別一的防碰撞過程;7個字節的UID最多能進行級別二的防碰撞過程;10字節的UID最多能進行級別三的防碰撞過程。
C、同一碰撞級別裏可能發生多次碰撞。

4.2 流程圖

這裏寫圖片描述

五、碰撞級別

這裏寫圖片描述

六、防碰撞過程示例

這裏寫圖片描述
注:
A、PICC #1是單尺寸UID,uid0的值是0x10;PICC #2是雙尺寸UID。
B、該實例的碰撞響應規則是按比特位1響應。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章