1

SIII (Android 4.3) を ACR122U NFC リーダーに装着すると、LED が緑色に点滅し続けます。Samsung S4 (Android 4.3) を入れると、電話がリーダーに接続されるまで LED が緑色に変わります。どちらの場合も、NFC がオンになっていて、デバイスがロック解除された状態になっています。この動作は、SIII で頻繁に切断され、S4 で安定した接続に変換されます。2 つの電話の動作が異なるのはなぜですか? 2 台の電話に、NXP と Broadcom という 2 つの異なるベンダーの NFC チップセットが搭載されていることは承知しています。

私の質問は、これらのデバイス間でこのような一貫性のない動作の原因は何ですか?

別の質問は、なぜ電話が ATR を提供するのかということです。

4

1 に答える 1

3

ACR122U/PN532 を使用したソフトウェア カード エミュレーションのコマンド シーケンスは、この回答にあります。

それに加えて、ACR122U にはさまざまなバージョンがあります。

  • スマートカードの存在を常に示すものもあります。その場合、「シミュレートされた」カードに接続することが可能です

    // SCardConnect with SCARD_SHARE_SHARED, SCARD_PROTOCOL_ANY
    Card card = cardTerminal.connect("*");
    CardChannel cardChannel = card.getBasicChannel();
    

    その後、APDU ラッピングを使用して PN532 コマンドを送信できます。

    > FF000000 Lc PN532-COMMAND
    < PN532-RESPONSE 9000
    

    メソッドでcardChannel.transmit

    CommandAPDU commandAPDU = ...
    // SCardTransmit
    Response responseAPDU = cardChannel.transmit(commandAPDU);
    
  • ACR122U の他のバージョンは、常にスマートカードの存在を「シミュレート」するとは限りません。代わりに、非接触型カードを自動的にポーリングし、実際のカードがリーダーに提示された場合にのみカードの存在を示します。その場合cardTerminal.connect("*");、実際のカードが存在する場合にのみ使用できます。ただし、これは通常、ACR122U がソフトウェア カード エミュレーション モードで使用されている場合には当てはまりません。その場合でも、ダイレクト モードを使用してリーダーへの接続を確立できます。

    // SCardConnect with SCARD_SHARE_DIRECT
    Card card = cardTerminal.connect("direct");
    

    その後、エスケープ コマンドを使用して、同じ APDU でラップされた PN532 コマンドをリーダーと交換できます (エスケープ コマンドがリーダーのバージョンに適しているかどうかをマニュアルで確認することをお勧めします)。

    final int IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND = 0x003136B0; //IOCTL(3500) for Windows
    //final int IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND = 0x42000DAC; //IOCTL(3500) for Linux
    byte[] commandAPDU = ...
    // SCardControl
    byte[] responseAPDU  = card.transmitControlCommand(IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND, commandAPDU);
    
于 2014-03-07T06:34:10.950 に答える