配置为目标的PN532已由其启动器释放

时间:2014-07-16 09:58:45

标签: java nfc hce acr122

我试图将我的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用户手册:

  • 错误代码0x29:配置为目标的PN532已被其释放 引发剂

欢迎任何与此代码相关的建议或评论。

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

首先,存在几种不同版本的ACR122U,它们的行为有很大不同。我已经成功地使用版本101和102测试了上述序列,并且可以模拟这些读取器的无结构智能卡。但是,版本103似乎接受这些命令,但无法检测为非接触式卡。我的测试都没有透露你的问题。

除了这种不一致的行为外,这个问题可能有几个原因:

  • 连接在TgInitAsTargetTgGetData之间超时,因为对TgInitAsTargetTgGetData命令的响应之间存在太多延迟。我在单步调试我的卡仿真代码时遇到了这个问题。

  • 阅读器会自动启用自动PICC检测(这似乎仅在2xx版本上可用),因此会覆盖您为卡片仿真发送的命令和参数。 ACR122U手册指示您可以通过发送APDU命令FF 00 51 00 00来禁用自动PICC检测。我用我的10x版本尝试了这个,他们了解该命令。

  • 导致模拟PICC被释放的激活(并因此导致TgGetData返回状态码0x29)可能是读者常规操作的一部分:例如,这可能表明读者激活模拟的PICC,然后停止它并停用HF场,然后读取器可以重新激活HF场并重新激活模拟的PICC。在这种情况下,您必须重新启动PICC仿真(一旦从TgInitAsTarget收到状态代码0x29,就会发出另一个TgGetData命令。