我正在尝试让我的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命令似乎正在工作,返回模式0x25,我们理解这意味着“活动模式,DEP,424kbps”。
然后“GetData”命令立即失败,返回状态码0x29“配置为目标的PN532已被其发起者释放”。
我们尝试使用不同的模式(而不是0x00“All”模式)更改TgInitAsTarget命令,尝试以下所有仍然返回0x29以获取以下GetData命令:
在所有情况下,似乎Android都没有维持连接,尽管我不熟悉NFC DEP协议,足以知道我在这里做错了什么。我已经阅读了PN532芯片参考,它似乎表明我正在做的一切正确。
我也尝试过使用Windows Phone NFC设备,它在GetData上遇到同样的问题和相同的错误代码。
任何熟悉NFC的人都会非常感谢。
戴夫
答案 0 :(得分:2)
要将ACR122(或其中的PN532 NFC控制器芯片)置于卡仿真模式,您可以执行以下操作:
ReadRegister:
> FF000000 08 D406 6305 630D 6338
< D507 xx yy zz 9000
更新寄存器值:
xx = xx | 0x004; // CIU_TxAuto |= InitialRFOn
yy = yy & 0x0EF; // CIU_ManualRCV &= ~ParityDisable
zz = zz & 0x0F7; // CIU_Status2 &= ~MFCrypto1On
WriteRegister:
> FF000000 11 D408 6302 80 6303 80 6305 xx 630D yy 6338 zz
< D509 9000
SetParameters:
> FF000000 03 D412 30
< D513 9000
TgInitAsTarget
> FF000000 27 D48C 05 0400 123456 20 000000000000000000000000000000000000 00000000000000000000 00 00
< D58D xx ... 9000
xx
应该等于0x08。
使用一系列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
)。