我正在尝试将PN532置于卡仿真模式。当我发送TgGetData
命令时,出现错误,我从阅读器中收到一个错误。
1。读寄存器
{(byte)0xFF,0x00,0x00,0x00,0x08, (byte)0xD4, 0x06, 0x63, 0x05, 0x63, 0x0D, 0x63, 0x38 }
RESPONSE :: D507 07 07 15 9000
2。更新寄存器
byte xx = (byte) 07;
byte yy = (byte) 07;
byte zz = (byte) 15;
xx = (byte) (xx | 0x004);
yy = (byte) (yy & 0x0EF);
zz = (byte) (zz & 0x0F7);
3。写寄存器
{(byte)0xFF,0x00,0x00,0x00,0x11, (byte) 0xD4, 0x08, 0x63, 0x02, (byte) 0x80,
0x63, 0x03, (byte) 0x80, (byte) 0x63, (byte) 0x05,
xx, 0x63, 0x0D,yy, 0x63, 0x38, zz}
RESPONSE :: D509 9000
4。设定参数
{(byte)0xFF, 0x00, 0x00 ,0x00, 0x03, (byte)0xD4, 0x12, 0x30}
RESPONSE :: D513 9000
5。 TgInitAsTarget
{(byte)0xFF, 0x00, 0x00, 0x00 , 0x27 , (byte)0xD4, (byte)0x8C ,
0x05 , 0x04, 0x00 , 0x12, 0x34, 0x56 , 0x20 , 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00 , 0x00}
RESPONSE :: D58D 08 E0 80 9000
6。 TgGetData
{(byte)0xFF, 0x00, 0x00 ,0x00, 0x02, (byte)0xD4, (byte)0x86}
RESPONSE :: D587 29 9000
因此,
TgGetData
的响应给出了错误代码D587 29 9000,其方法遵循PN532用户手册:启动器
欢迎提供与此代码有关的任何建议或意见。
提前谢谢了!
最佳答案
首先,存在几种不同版本的ACR122U,它们的行为差异很大。我已经成功地使用101和102版测试了上述序列,并可以使用那些阅读器模拟无常数智能卡。但是,版本103似乎接受了这些命令,但无法检测为非接触式卡。我的测试都没有发现您的问题。
除了不一致的行为,还可能有多种原因导致此问题:
TgInitAsTarget
和TgGetData
命令的响应之间有太多延迟,因此TgInitAsTarget
和TgGetData
之间的连接超时。我在单步调试卡仿真代码时遇到了这种情况。 FF 00 51 00 00
禁用自动PICC检测。我在我的10x版本中尝试过此操作,但他们不理解该命令。 TgGetData
返回状态代码0x29)可能是阅读器常规操作的一部分:例如,这可能表明阅读器激活了模拟的PICC,然后将其停止,然后取消激活HF字段后,阅读器便可以重新激活HF字段并重新激活仿真的PICC。在这种情况下,您将必须重新启动PICC仿真(一旦从TgInitAsTarget
收到状态代码0x29,请发出另一个TgGetData
命令。