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
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
沒有留言:
張貼留言