2016-12-20 23 views
2

AndroidでNFCを使用して学習を開始しました。 NDEF形式で簡単に読み書きできます。MEFARE DESFire EV1をNFC Forum Type 4タグとして設定する

私の問題は、MIFARE DESFire EV1であり、私はいくつかの工場のカードを持っていると私は、彼らがNFCフォーラムのタイプ4タグ仕様に準拠していないと、結果的に、中に読み取りまたは書き込むことが受け入れないことを理解しますNDEF形式(工場出荷時の設定)。

android.nfc.tech.NfcAまたはandroid.nfc.tech.IsoDepでタグにアクセスできます。

これまでのところ、IsoDep.transceive()メソッドを使用して、NFC Forum Type 4に準拠するタグを作成するためのコマンドを渡す必要があることを理解しています。

しかし、私は多くの問題を抱えています。私はTagWriterを使用しており、それは完全にサービスを行います。 NDEFデータセットを使用するたびに、カードにNFC Forum Type 4タグ、したがってNDEFタグを作成するルーチンが自動的に実行されます。

しかし、この手順を自分で行うための簡単な例は見つかりませんでした。仕様書NFCForum-TS-Type-Tag_2.0を読んだ後でさえ、私はまだ非常に迷っています。

TagWriterアプリケーションが実行するプロセスを実行する具体的な例はありますか?

  • (ここでOK)NfcA/IsoDepを認識カードはNFCフォーラムのタイプ4タグの仕様に準拠してください
  • スタートandroid.nfc.tech.Ndef
  • を読み、NDEF
の書き込みを有効としてタグを認識

答えて

4

MFCARE DESFire EV1をNFCフォーラムタイプ4タグ(V2.0)として準備する手順は、プラットフォーム独立NFCフォーラム仕様の一部ではありません。代わりに、この手順はアプリケーションノートAN11004: MIFARE DESFire as Type 4 Tagのチップメーカ(NXP)によって定義されています。手順は次のとおりです。

  1. Androidが既にNdefタグテクノロジを検出している場合は、完了です。 AndroidはNDEFタグアプリケーションとNDEFデータファイルに含まれているNDEFメッセージを検出しようとしますので、Ndefタグ技術を見つけることは既にNDEFのために用意されている(つまり既にNFC Forum Type 4タグとして設定されています)。

  2. これ以外の場合、タグが実際にDESFire EV1タグであるかどうかを確認します。これは、AN10833: MIFARE Type Identification Procedureに記載されているタイプ識別手順に基づいて、DESFireタグから取得したバージョン情報に基づいて実行できます。

  3. タグがDESFire EV1タグであることがわかったら(タグに必要な変更を適用するために十分なアクセス権を持っている必要があります)、最初に作成しますNDEFタグアプリケーション。これは、作成中にD2760000850101に設定されたISO 7816-4 DF名(= AID)を持つDESFireアプリケーションです。 DESFire AID、ISOファイルIDに対して選択した値は、適切なT4T操作にとって重要ではありません(EVF前世代の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に設定し、Ndefタグテクノロジを使用して読み取りおよび書き込みアクセスを許可するタグの場合は0xEEE0に設定します。

  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製品データシートで確認できます(NXPのNDAでのみ使用可能)。

+0

バイトオーダーにコメントできますか?ドキュメントAN11004によると、「NDEF仕様データはNetwork Byte-Order(ビッグエンディアン)で表されていますが、APDUコマンドはLSBの最初の表記を使用しています。 APDUコマンドを送信するとき、上記のデータ(項目7)を逆の順序で発行すべきではありませんか? NXPアプリ(Android)が「タイプ4タグバージョン1」をDesfireアプリケーションの見出しの下に認識しているため、アプリケーションを正しくセットアップできたとはかなり確信していますが、NDEFタブに移動しても、表示されています。私の問題がCCかNDEFファイルかどうかは分かりません。ありがとう。 – Paul

+0

@Paul興味のあるフィールドについてもう少し具体的にすることはできますか?どのAPDUにコマンドがありますか?あなたはMIFARE DESFireコマンドを参照していますか?これらはLSBの最初の記法を使用します(しかし、バイナリデータではなく整数フィールドにのみ影響します)。 CCのフィールドの順序は正しいです(上の答えでCCファイルに書き込む必要があります)。 –

関連する問題