4

我正在尝试将我的 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 已被其发起方释放

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

提前谢谢了!

4

1 回答 1

1

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

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

  • 和之间的连接超时,TgInitAsTarget因为响应和命令TgGetData之间有太多延迟。我在单步调试我的卡仿真代码时遇到了这种情况。TgInitAsTargetTgGetData

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

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

于 2014-07-25T10:24:26.013 回答