我正在尝试将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已被释放。
    启动器

  • 欢迎提供与此代码有关的任何建议或意见。

    提前谢谢了!

    最佳答案

    首先,存在几种不同版本的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命令。
  • 08-26 04:31