2014/10/06

NFC ISO14443A

1. ISO14443

ISO14443 定義描寫了近距離接觸(<10cm)的卡片, 運作在13.56 MHz, 以及card & reader之間的溝通方式, 分成 ISO14443A 及 ISO14443B, 其中 ISO14443A 最為普及

2. ISO14443A

在 NFC forum 定義的 4 種NFC tag type裡, ISO14443A佔了 type1, type2, type4, 還有Mifare classic tag雖然不在NFC forum定義裡, 但也實作了 ISO14443A

在辨識 tag 的過程中, anti-collision 可以得到辨識 tag 所需的資訊, 包括 ATQA, UID, SAK, ATS

  • ATQA : Answer To Request acc. to ISO/IEC 14443-4
  • UID : Unique Identifier, Type A
  • SAK : Select Acknowledge, Type A
  • ATS : Answer To Select acc. to ISO/IEC 14443-4
相關文件可以參考identify Mifare tags
http://www.nxp.com/documents/application_note/AN10833.pdf

3. anti-collision

anti-collision 可以實作在 firmware, 也可以實作在 userspace, 但是中間涉及到傳送7 bit data, 大多數的 driver 不允許傳送非8-bit單位的data, 所以如果沒有對應的SDK就無法實作在userspace

下圖是anti-collision流程圖

(1) 第一步由 reader 往外送 REQA(0x26) 或 WUPA(0x52), 這兩個訊號都是 7-bit, 這是為了讓這兩個 command 可以與其它 command 做區隔, 也因為這兩個 command 都是 7-bit, 所以要將 CRC 的位元檢查關掉

REQA 作用是邀請在整個區域裡新的 tag 來回應這個 command, 整個區域裡也有舊的 tag, 指的是曾經回應過或已經被關掉的tag

WUPA 則是邀請並喚醒區域裡所有tag, 包括回應過或關掉的tag

之所以有新舊的差別, 是因為只要是卡片未離開 reader 的區域, 就會被持續供電

如果沒有任何 tag 回應, 那麼 reader 會持續發出 REQA/WUPA, 中間的間隔雖然有被定義, 但各家廠商作法不同, 有的等上1s, 有的則是等幾個milliseconds,

(2) 接著 tag 回應 ATQA, 此時 reader 開始 anti-collision 的流程, 區分每張卡片的方式是使用 tag的 UID, UID的長度可能是4 bytes, 7 bytes, 或 10 bytes

(3) reader 接著發出 SELECT

(4) tag 回應 UID

(5) reader 發出 SELECT 並帶 UID, 成功的話, tag 會回應 SAK

底下是 libnfc 的 sample flow
http://nfc-tools.org/index.php?title=Libnfc:nfc-anticol

R: 26                                    => Welcome (REQA) (or use WUPA = 0x52)
T: 44  03                                => Respond (ATQA)
R: 93  20                                => Select cascade 1 (SEL)
T: 88  04  34  74  cc                    => CT, UID(byte 1,2,3), BCC
R: 93  70  88  04  34  74  cc  0e  05    => Select available tag (SEL)
T: 24  d8  36                            => Select Acknowledge (SAK) with cascade bit set
R: 95  20                                => Select cascade 2 (SEL)    
T: e1  e3  1c  80  9e                    => UID(byte 4,5,6,7), BCC
R: 95  70  e1  e3  1c  80  9e  b9  e1    => Finish select (SEL)
T: 20  fc  70                            => SAK without cascade bit set
R: e0  50  bc  a5                        => Request Answer to Select (RATS)
T: 06  75  77  81  02  80                => ATS (DESFire EV1)
R: 50  00  57  cd                        => Disable (HALT)

Found tag with UID: 043474e1e31c80

CT  => [Cascade Tag] byte (88), signals that the UID is not complete yet
BCC => [Bit Count Check] byte, calculated as exclusive-or over the four previous bytes

整個流成跑完之後, 其中 ATQA, SAK, ATS 包含廠商資訊
http://nfc-tools.org/index.php?title=ISO14443A







沒有留言:

張貼留言