2016-12-20 162 views
2

我開始使用NFC在Android中學習。我可以很容易地讀寫NDEF格式。將MIFARE DESFire EV1配置爲NFC論壇NDEF的4型標籤

我的問題是MIFARE DESFire非EV1,我有一些廠卡,據我所知,他們不符合NFC論壇4類標籤規範,因此,不接受被讀取或寫入NDEF格式(在工廠配置時)。

我可以通過android.nfc.tech.NfcAandroid.nfc.tech.IsoDep訪問標籤。

到目前爲止,我知道我需要使用IsoDep.transceive()方法來傳遞命令,使我能夠構建符合NFC論壇4類標準的標籤。

但是我遇到了很多麻煩。我使用TagWriter,它完美地完成了服務。每次使用NDEF數據集時,它都會自動執行一個例程,使卡片成爲NFC論壇第4類標籤,因此也是NDEF標籤。

但是,我找不到任何簡單的例子來自己做這個程序。即使在閱讀規範文檔NFCForum-TS-Type-4-Tag_2.0之後,我仍然很迷茫。

是否有任何實際的例子來做TagWriter應用程序的過程?

  • 認識NfcA/IsoDep(確定這裏)
  • 製作卡片符合NFC論壇4類標籤規範
  • 開始識別標籤的android.nfc.tech.Ndef
  • 啓用讀和NDEF寫入

回答

4

將MIFARE DESFire EV1準備爲NFC論壇4類標籤(V2.0)的過程不屬於平臺獨立NFC論壇規範的一部分。相反,該程序由芯片製造商(恩智浦)在其應用筆記AN11004: MIFARE DESFire as Type 4 Tag中定義。該程序是關於如下:

  1. 如果Android的已經檢測到Ndef標籤技術,你就完成了。由於Android試圖檢測NDEF標記應用程序和NDEF數據文件中包含的NDEF消息,因此找到Ndef標記技術意味着該標記已爲NDEF做好準備(即它已被配置爲NFC Forum Type 4 Tag)。

  2. 否則,你會檢查標籤是否真的是DESFire EV1標籤。您可以根據AN10833: MIFARE Type Identification Procedure中描述的類型標識過程並根據從DESFire標籤獲取的版本信息來執行此操作。

  3. 一旦您知道該標籤是DESFire EV1標籤(並且您有足夠的權限訪問主應用程序以便對標籤進行必要的修改(可能需要和驗證步驟),您首先需要創建NDEF標籤應用程序。這是一個DESFire應用程序,其創建過程中將其ISO 7816-4 DF名稱(= AID)設置爲D2760000850101。您爲DESFire AID,ISO文件ID選擇的值對於正確的T4T操作並不重要(請注意,對於EV1之前的DESFire生成,這是不同的)。關鍵設置取決於您的使用場景。在創建應用程序時需要設置的唯一其他重要參數是允許應用程序中的文件使用ISO 7816-4文件標識符(密鑰設置2字節中的位5設置爲1)。

  4. 選擇新創建的應用程序。

  5. 創建一個新的標準數據文件,容量容器文件,大小爲15個字節。您需要將ISO 7816-4文件ID設置爲E103。確保通過設置Com.Set允許簡單的通信。字節到0x00。設置訪問權限字段,以便稍後可以在初始化期間修改文件內容。

  6. 創建另一個新的標準數據文件,即NDEF數據文件。如果您只使用標籤作爲NDEF標籤,則通常會使用所有剩餘的可用空間。將ISO 7816-4文件ID設置爲E104。確保通過設置Com.Set允許簡單的通信。字節到0x00。將訪問權限字段設置爲0xE000爲只讀標記或0xEEE0爲允許通過Ndef標記技術讀取和寫入訪問的標記。

  7. 選擇能力容器文件和能力容器數據寫入到它:

     
    000F 20 003A 0034 04 06 E104 xxxx 00 yy 
    

    其中xxxx是NDEF數據文件的大小和yy爲0x00,如果該文件是自由地寫入或0xFF的,如果文件是隻讀的。

  8. 選擇NDEF消息文件,並將前2個字節寫爲0x0000(以表示文件爲空)。

注意,創建的DESFire(EV1)卡上的NDEF標籤應用的結構要求您爲使用本地或MIFARE DESFire非的包裝了本地命令集。由於某些版本的Android會導致本機命令出現已知問題,因此最好使用包裝的本機命令。您可以在DESFire產品數據表中找到有關DESFire命令集的詳細信息(僅在恩智浦的NDA下提供)。

+0

你可以評論字節順序嗎?根據文檔AN11004,「根據NDEF規範數據用網絡字節順序表示」(big-endian),但APDU命令使用LSB第一表示法。發送APDU命令時,上面的數據(項目7)是否應該以相反的順序發出?我非常有信心,因爲恩智浦應用程序(Android)在標題Desfire應用程序下確實識別出「Type 4 Tag version 1」,所以我能夠正確設置應用程序,但是如果我轉到NDEF選項卡「沒有填充NDEF數據存儲」被展示。所以我不知道我的問題是CC還是NDEF文件。謝謝。 – Paul

+0

@Paul你可以更具體地瞭解你感興趣的領域嗎?哪個APDU命令?你指的是MIFARE DESFire命令嗎?這些使用LSB第一個符號(但隻影響整數字段而不是二進制數據)。 CC中的字段的順序是正確的(因爲它們應該寫在我上面的答案中的CC文件中)。 –