標籤:
一、介紹
本博文介紹了PCD(Proximity Coupling Device)使用ISO14443-3 Type A協議檢測匹配的PICC(Polling For Proximity Cards)命令以及防碰撞過程(Anticollision Proccess)。
二、命令1 REQA和 WUQA1.1 命令概要
REQA命令和WUPA命令是PCD用來檢測Type A類型卡是否在無線射頻場(RF)。區別在於REQA命令是用PCD在剛開始檢測PICC是否在RF中,而WUPA是用在PCD讓PICC由停止態(HALT State)回到類準備態(READY* State)。
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 ANTICOLISION和SELECT2.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 命令格式
註:UID傳輸的長度根據具體的碰撞請情況而定,傳輸範圍在0~40個位元位之間。它會由NVB指出。
3 HLTA3.1 命令概要
該命令用於PICC不響應PCD的解調命令,它佔兩個位元組。第一個位元組為0x50,第二個位元組為0x00。
3.2 命令格式
B1 | B2
| b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
| 0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
4 ATQA4.1 命令概要
ATQA命令是PICC對PCD發出的REQA或WUPA命令的響應命令。當PCD發出REQA命令時,多張PICC都有響應時,該命令可以指出防撞的發生情況。
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 流程圖
說明:該流程圖包含三個部分:卡檢測、防碰撞、卡具體類型識別。
四、防碰撞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響應。
ISO14443-3 TypeA防碰撞過程以及命令解析