You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ACR122U阅读器SELECT(by AID) APDU无法路由至Android设备问题

排查ACR122U阅读器与Android HCE交互故障的解决方案

从你的描述来看,同款同固件版本的ACR122U一台正常工作、一台无法向Android HCE设备发送SELECT APDU,甚至发送部分PN532指令会卡顿,下面是针对性的排查和解决思路:

一、先排查基础连接与驱动问题

  • 更换USB端口和线材:优先使用USB 2.0端口,避免USB3.0的兼容性干扰;换一根质量可靠的USB线,接触不良或线材损坏经常会导致NFC设备通信异常。
  • 重启设备:同时重启故障阅读器和Android测试设备,有时候阅读器固件临时挂起会导致指令无响应。
  • 重装驱动:在Windows上彻底卸载ACR122U的驱动,然后安装官方最新版本的驱动,确保驱动文件没有损坏。

二、检查并重置阅读器配置

ACR122U的自定义配置可能引发兼容性问题,建议用官方工具或指令排查:

  • 对比两台阅读器的配置:使用ACR122U Control Panel工具查看两台设备的参数,重点确认:
    • ISO-DEP协议是否开启(HCE依赖该协议)
    • 自动轮询模式的设置
    • APDU传输超时参数
  • 重置到出厂设置:执行以下指令重置阅读器,消除自定义配置的影响(执行后阅读器会重启,需重新连接):
    execute(channel, new byte[] {(byte)0xFF, 0x00, 0x00, 0x00, 0x04, (byte)0xD4, 0x14, 0x01, 0x00}, card);
    

三、修正指令序列与格式

你的指令发送逻辑存在几个可能的问题:

  1. 优化指令时序:连续发送两次InListPassiveTarget会干扰阅读器状态,建议调整序列为:
    • 先发送超时设置指令(可选):FF0051C300
    • 发送一次InListPassiveTarget:FF00000004D44A0100,确认收到包含UID的响应后,再发送SELECT APDU
  2. 修正SELECT APDU格式:你当前的指令末尾多了一个00,正确的SELECT APDU应该是:
    execute(channel, new byte[] {0x00, (byte)0xA4, 0x04, 0x00, 7, (byte)0xF0, 0x01, 0x02, 0x03, 0x04, (byte)0x05, 0x07}, card);
    
    多余的00会导致HCE设备无法识别指令,自然不会触发processCommandApdu。
  3. 避免指令冲突:发送PN532芯片级指令前,先停止阅读器的轮询操作,否则会导致卡顿:
    // 停止轮询
    execute(channel, new byte[] {(byte)0xFF, 0x00, 0x00, 0x00, 0x02, (byte)0xD4, 0x02}, card);
    // 再发送芯片状态查询指令
    execute(channel, new byte[] {(byte)0xFF, 0x00, 0x00, 0x00, 0x02, (byte)0xd4, 0x04}, card);
    

四、验证硬件故障

如果以上步骤都无效,大概率是硬件问题:

  • 把故障阅读器拿到另一台Windows机器上测试,排除当前机器的系统/驱动问题。
  • 用故障阅读器测试普通NFC标签(比如Mifare Classic卡),如果连普通标签都无法读取,说明硬件存在故障,需要联系售后。
  • 对比两台阅读器的硬件序列号,确认是否是批次性的固件缺陷。

内容的提问来源于stack exchange,提问作者cliffroot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:28:24