2

ACR122 (usb) デバイスでパッシブ NFC タグをエミュレートしようとしていますが、通信が正しく行われません。ここで私が間違っていることを誰かが見て、正しい方向に向けてくれることを願っています。

この他の質問ACR122 - Card Emulationに対する回答は、 http: //code.google.com/p/nfcip-java/source/browse/trunk/nfcip-java/doc/ACR122_PN53x.txtのドキュメントを指していましたが、次の場合これは文字通り、期待どおりに動作しません。

テスト用に Samsung Galaxy S3 Android 4.3 デバイスを使用しており、以下の動作が見られます。

Transmit (TgInitAsTarget)
....'......4V@..  FF 00 00 00 27 D4 8C 00 08 00 12 34 56 40 01 FE 
................  A2 A3 A4 A5 A6 A7 C0 C1 C2 C3 C4 C5 C6 C7 FF FF 
...wfUD3"...      AA 99 88 77 66 55 44 33 22 11 00 00 

Receive
..%....7.5<...w.  D5 8D 25 1E D4 00 08 37 D9 35 3C BF D5 AE 77 9C 
...2Ffm.........  00 00 00 32 46 66 6D 01 01 11 03 02 00 13 04 01 
...               96 90 00 

Transmit (GetData)
.......           FF 00 00 00 02 D4 86 

Receive
..)..             D5 87 29 90 00 

TgInitAsTarget コマンドは機能しているようで、「アクティブ モード、DEP、424kbps」を意味する 0x25 のモードを返します。

しかし、「GetData」コマンドはすぐに失敗し、ステータス コード 0x29「ターゲットとして構成された PN532 がイニシエータによって解放されました」が返されます。

TgInitAsTarget コマンドをさまざまなモード (0x00 "All" モードではなく) で変更しようとしましたが、次の GetData コマンドに対してすべてがまだ 0x29 を返す次のことを試しています。

  • モード 0x01「パッシブ」、応答モード 0x04「DEP」
  • モード 0x02 "DEP"、結果として応答モード 0x25 ("All" と同じ)
  • モード 0x03 "DEP Passive" の結果、応答モードは 0x04 "DEP" になります

どのような場合でも、Android が接続を維持していないように見えますが、NFC DEP プロトコルに精通していないため、ここで何が間違っているのかを知ることができません。PN532 チップ リファレンスを読みましたが、すべて正しく行っているようです。

Windows Phone NFC デバイスも試してみましたが、GetData で同じ問題と同じエラー コードが発生します。

NFC に精通している方からの助けをお待ちしております。

デイブ

4

1 に答える 1

2

ACR122 (またはその内部の PN532 NFC コントローラ チップ) をカード エミュレーション モードにするには、次のようにします。

  1. 読み取り登録:

    > FF000000 08 D406 6305 630D 6338
    < D507 xx yy zz 9000
    
  2. レジスタ値を更新します。

    xx = xx | 0x004;  // CIU_TxAuto |= InitialRFOn
    yy = yy & 0x0EF;  // CIU_ManualRCV &= ~ParityDisable
    zz = zz & 0x0F7;  // CIU_Status2 &= ~MFCrypto1On
    
  3. 書き込み登録:

    > FF000000 11 D408 6302 80 6303 80 6305 xx 630D yy 6338 zz
    < D509 9000
    
  4. パラメータの設定:

    > FF000000 03 D412 30
    < D513 9000
    
  5. TgInitAsTarget

    > FF000000 27 D48C 05 0400 123456 20 000000000000000000000000000000000000 00000000000000000000 00 00
    < D58D xx ... 9000
    

    0x08xxに等しい必要があります。

  6. TgGetData および TgSetData コマンドのシーケンスを使用して通信します。

    > FF000000 02 D486
    < D587 xx <C-APDU> 9000
    

    xxはステータス コード (成功の場合)0x00で、C-APDU はリーダーから送信されたコマンドです。

    > FF000000 yy D48E <R-APDU>
    < D587 xx 9000
    

    yyは 2 + R-APDU の長さ (応答) で、はステータス コード (成功のxxはずです) です。0x00

于 2014-01-14T06:39:28.467 に答える