MIFARE 卡


 Mifare是NXP公司生產的一系列遵守ISO14443A標準的射頻卡,包Mifare S50、Mifare S70、Mifare UltraLight、Mifare Pro、Mifare Desfire等,由於Mifare的巨大影響力,業內有時把其它公司生產的遵守ISO14443A標準的射頻卡也稱爲“Mifare”,尤其是Mifare S50卡片,幾乎就是ISO14443A標準的代言人。

    至於“Mifare”這個名字的由來,據說1998年Philips收購了瑞士的米克朗(Mikron)公司,該公司之前開發了一套收費系統叫作MIkron FARE-collection System,即米克朗收費系統,簡寫爲Mifare。

    Mifare系列卡片有時也根據卡內使用芯片的不同,把Mifare UltraLight稱爲MF0,Mifare S50和S70稱爲MF1,Mifare Pro稱爲MF2,Mifare Desfire稱爲MF3。

    Mifare系列的共同特徵就是遵守ISO14443A國際標準,這些共同特徵描述如下:

    1.它們都是接近卡PICC(Proximity ICC),讀寫距離最大10cm。

    2.它們的射頻頻率都是13.56MHz±7KHz。

    3.這些卡片都是無源免接觸的,能量由讀寫器產生的射頻場提供。

    4.讀寫器產生的射頻場的磁場強度在1.5A/m~7.5A/m之間,卡片在這個場強區間內可以連續的正常工作。

    5.卡片首先進入讀寫器的射頻場得電完成初始化,之後等待讀寫器的命令。讀寫器與卡片的數據交流總是採用RTF模式,即讀寫器先發出命令,卡片在規定的時間內對命令作出應答,如果讀寫器沒有命令,卡片無論如何也不能先發言。

    6.讀寫器向卡片發送命令使用100% ASK調製的修正米勒(Modified Miller)碼,卡片應答時使用副載波調製的曼側斯特(Manchester)碼

    7.卡片與讀寫器之間通訊的數據速率有4種:106Kbps,212Kbps,424Kbps,847Kbps。但在讀卡選擇命令(含)之前,通訊速率只能是106Kbps。讀卡選擇之後,卡片和讀寫器可以協商使用什麼樣的速率。106Kbps是怎麼來的,它是載波頻率13.56MHz除以128得來的,通俗的說法是“載波128分頻”。

    8.卡片未進入射頻場時稱爲斷電(Power-Off)狀態,進入射頻場得電覆位後進入休閒(Idle)狀態,收到讀寫器的呼叫命令後進入準備(Ready)狀態,經過防衝突循環被選中後進入激活(Active)狀態,在激活狀態收到休眠命令或不認識的命令後進入休眠(Halt)狀態。   

    9.這些卡片都有一個全球唯一的序列號,序列號的長度可能是4字節,7字節或10字節。當多張卡片同時進入讀寫器的射頻場時,卡片們遵守面向比特的防衝突機制,由讀卡器選出唯一的一張卡片進行操作。讀寫器操作完一張卡片後,可以發送休眠命令讓這張卡片進入休眠狀態,而讀卡器繼續對其他卡片進行操作。

    10.這些卡片在卡選擇(含)之前的操作步驟都是一樣的,卡選擇之後的操作就不一樣了,比如有的需要驗證密碼,有的不需要,而且驗證密碼的方式也有區別。

    11.從卡片進入磁場到卡片被選中要經過兩步。

    第一步是讀寫器呼叫磁場內的卡片,卡片對呼叫做出應答。

    (1)由於磁場內可能有剛進入磁場並得電覆位處於休閒狀態的卡片,也可能有已經被讀寫器操作過,被讀寫器發送休眠命令進入休眠狀態的卡片,對這兩類不同的卡片,讀寫器使用兩種不同的命令進行呼叫:卡請求(REQA,0x26)和卡喚醒(WAKE-UP,0x52)。

    (2)其中卡請求(REQA)只能呼叫處於休閒(Idle)狀態的卡片,卡喚醒(WAKE-UP)可以呼叫所有卡片,包括處於休眠(Halt)和休閒狀態的卡片。

    (3)收到卡呼叫命令後,卡片將對命令做出應答(Answer To Request,ATQA),告訴讀寫器自己是否遵守面向比特的防衝突機制,如果不遵守,讀寫器自然就不會往下操作了,除非雙方約好了一種特殊的防衝突協議,不過那就不叫“遵守ISO14443A”了。ATQA有兩個字節,第一個字節的值沒有規定(RFU),第二個字節的高兩位b7b6表示卡序列號長度(“00”爲4字節,“01”爲7字節,“10”爲10字節), b5位的值沒有規定(RFU),b4-b0表示是否遵守面向比特的防衝突機制,如果遵守,b4-b0必須有且僅有1位爲1。通常情況下,Mifare S50的ATQA是0004H,Mifare S70的ATQA是0002H,Mifare UltraLight的ATQA是0044H,Mifare Light的ATQA是0010H,Mifare Desfire的ATQA是0344H。業內習慣稱ATQA爲卡類型,並且稱“Mifare S50的卡類型是0004H,Mifare S70的卡類型是0002H,Mifare UltraLight的卡類型是0044H,Mifare Desfire的卡類型是0344H……”,這種說法其實是不嚴謹的。已經出現了ATQA爲0044H和0344H的卡片,但這種卡片並不是Mifare UltraLight和Mifare Desfire,而是一種新的7字節的Mifare S50。這很正常,因爲ISO14443A中規定,ATQA的作用是卡片表明自己是否遵守面向比特的防衝突機制以及自身卡序列號的長度,並不是表示哪種類型的卡片。

    (1)之所以把“防衝突”和“選擇”放在一塊說,是因爲二者的命令碼是一樣的,區別在於命令碼後面包含多少位已經確認的卡序列號。

    (2)面向比特的防衝突機制每個防衝突循環需要32bit的卡號參加。讀寫器向所有參加防衝突的卡片發出一個防衝突命令碼,並告訴卡片們已經確定了多少位卡序列號,讓卡序列號前面部分與讀寫器發出的已經確認的序列號相同的卡片做出應答。

    (3)如果已確認的卡序列號小於32位,就是防衝突命令,卡片將回送除了已確認卡序列號之外的剩餘的卡序列號部分;如果已確認的卡序列號等於32位,就是卡選擇命令了,被選中的卡片將作出對選擇的應答(Select AcKnowledge,SAK)。

    (4)防衝突和卡選擇命令還有一個區別就是,卡選擇命令有CRC_A校驗,而防衝突命令沒有CRC_A校驗。

    (5)如果卡片卡號是4個字節,防衝突選擇的命令碼是0x93。

    (6)如果卡片卡號是7個字節,則要進行兩個層次(cascade level)的防衝突選擇,第一層(cascade level 1)的命令碼是0x93;卡號的前3個字節參加;第二層(cascade level 2)的命令碼是0x95,卡號的後4個字節參加。

    (7)如果卡片卡號是10個字節,則要進行三個層次(cascade level)的防衝突選擇,第一層(cascade level 1)的命令碼是0x93,卡號的前3個字節參加;第二層(cascade level 2)的命令碼是0x95,卡號的第4、5、6個字節參加;第三層(cascade level 3)的命令碼是0x97,卡號的後4個字節參加。

    (8)大家可能已經發現,前面說每個防衝突循環需要32bit的卡號參加,後面又說可以3個字節(24bit)參加,是不是前後矛盾?是的,爲了湊夠32bit,如果只有3個字節的卡號參加防衝突循環,則卡片自動在3個卡號字節之前增加一個字節0x88,這個0x88被稱爲層標籤(cascade tag),從而滿足防衝突循環對32bit卡號的要求。

    (9)每一層的防衝突選擇循環如果卡被選中,卡片都要返回“選擇應答”(Select AcKnowledge,SAK),告訴讀寫器是否需要下一層的防衝突選擇循環以及是否遵守ISO14443-4。

    12.最後再次強調以上就是“共同遵守ISO14443A”的含義,也就是從卡片進入磁場到卡片被選中,它們的操作流程都是一樣的。之後大家便分道揚鑣,有的繼續遵守ISO14443-4,有的開始驗證密碼,有的就直接可以進行讀寫操作了。

發佈了30 篇原創文章 · 獲贊 54 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章