我试图将我的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用户手册:
欢迎任何与此代码相关的建议或评论。
非常感谢提前!
答案 0 :(得分:1)
首先,存在几种不同版本的ACR122U,它们的行为有很大不同。我已经成功地使用版本101和102测试了上述序列,并且可以模拟这些读取器的无结构智能卡。但是,版本103似乎接受这些命令,但无法检测为非接触式卡。我的测试都没有透露你的问题。
除了这种不一致的行为外,这个问题可能有几个原因:
连接在TgInitAsTarget
和TgGetData
之间超时,因为对TgInitAsTarget
和TgGetData
命令的响应之间存在太多延迟。我在单步调试我的卡仿真代码时遇到了这个问题。
阅读器会自动启用自动PICC检测(这似乎仅在2xx版本上可用),因此会覆盖您为卡片仿真发送的命令和参数。 ACR122U手册指示您可以通过发送APDU命令FF 00 51 00 00
来禁用自动PICC检测。我用我的10x版本尝试了这个,他们不了解该命令。
导致模拟PICC被释放的激活(并因此导致TgGetData
返回状态码0x29)可能是读者常规操作的一部分:例如,这可能表明读者激活模拟的PICC,然后停止它并停用HF场,然后读取器可以重新激活HF场并重新激活模拟的PICC。在这种情况下,您必须重新启动PICC仿真(一旦从TgInitAsTarget
收到状态代码0x29,就会发出另一个TgGetData
命令。