栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

NFC阅读器“ SELECT(通过AID)” APDU未路由到Android设备

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NFC阅读器“ SELECT(通过AID)” APDU未路由到Android设备

您使用InListPassiveTarget直接指示ACR122U内部的PN532
NFC芯片手动轮询标签。这实际上绕过了ACR122U的抽象层,允许您自动轮询标签并使用“标准PC /
SC”与枚举的智能卡交换APDU命令。因此,无法通过PC / SC接口发送普通APDU,并且SELECt APDU将永远不会到达Android HCE端。

相反,您还需要通过直接与PN532传输模块对话来交换APDU命令。您可以通过将APDU命令包装在InDataExchange命令(或InCommunicateThru,如果您需要控制ISO
/ IEC 14443-4标头字段)中来完成此操作。在您的情况下,包装的SELECT(通过AID)命令APDU类似于:

execute(channel, new byte[] {    (byte)0xFF, 0x00, 0x00, 0x00,  // direct PN532 command    16,     // Lc = command length    (byte)0xD4, 0x40,  // InDataExchange    0x01,   // Tag #1 (equal to the tag number from the InListPassiveTarget response)    0x00, (byte)0xA4, 0x04, 0x00,   // APDU: SELECT (by AID)          7,  // Lc = AID length          (byte)0xF0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07, // AID = F0010203040507          0x00,          // Le = max}, card);

可能是这个特定的读者有缺陷吗?

是的,尽管我对此表示怀疑,但情况可能是这样。请注意,ACR122U固件有许多不同的版本,其中大多数似乎在设计上存在缺陷。特别是以下事实:读取器的某些版本执行自动标签枚举,而某些版本不执行,并且可用API在该读取器的不同版本之间发生了巨大变化,这使得对该设备进行编程变得很困难。

更新:更多观察结果…

  • 对InListPassiveTarget命令的响应不包含ATS数据(在UID字段之后)。也许您的阅读器在标签选择期间不执行自动RATS。可以使用SetParameters命令(在InListPassiveTarget之前)启用此功能:
    execute(channel, new byte[] {(byte)0xFF, 0x00, 0x00, 0x00,  // direct PN532 command3,      // Lc = command length(byte)0xD4, 0x12,  // InDataExchange(1<<4), // fAutomaticRATS = 1

    }, card);

您也可以尝试使用InCommunicateThru手动发送RATS命令:

    execute(channel, new byte[] {    (byte)0xFF, 0x00, 0x00, 0x00,  // direct PN532 command    4,      // Lc = command length    (byte)0xD4, 0x42,  // InCommunicateThru    (byte)0xE0, 0x80,  // RATS (FSD = 256, CID = 0)}, card);

之后,您可以尝试使用InCommunicateThru和原始ISO / IEC 14443-4块与卡进行通信:

    execute(channel, new byte[] {    (byte)0xFF, 0x00, 0x00, 0x00,  // direct PN532 command    16,     // Lc = command length    (byte)0xD4, 0x42,  // InCommunicateThru    0x02,   // PCB (I-block, change to 0x03 for the next block)    0x00, (byte)0xA4, 0x04, 0x00,          // APDU: SELECT (by AID)      7,  // Lc = AID length      (byte)0xF0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07, // AID = F0010203040507      0x00,          // Le = max}, card);
  • ATQA

    0803
    看起来很奇怪。尤其是位帧防冲突字段中的0x03表示该字段中有多个目标(因为符合标准的标记只会在位帧防冲突字段中设置单个位)。 请注意,这是不正确的。 在对InListPassiveTarget的响应中,ATQA的发送顺序为低位优先。因此,位帧防冲突值是0x08(=有效/兼容),专有字段中的值是0x03。

  • 确实,您的阅读器不响应某些PN532命令是很奇怪的(特别是因为固件版本

    32010607
    看起来不错)。我已经用另一个ACR122U测试了一些对您而言失败的命令,它们已成功完成…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号