读卡器单次连接 100 轮寻卡读卡稳定性测试记录
| 项目 | 内容 |
|---|---|
| 测试日期 | 2026-08-23 |
| 测试时间 | 10:51:08–10:51:41 CST |
| 目标轮次 | 最多 100 轮 |
| 连接方式 | 测试开始时连接一次,循环结束或首次失败后关闭一次 |
| 循环操作 | 寻卡 → 完整读卡 |
| 轮间间隔 | 每轮成功后等待 200ms |
| 停止规则 | 任一阶段首次失败立即停止,不重试 |
| Android 设备 | F700_HW(RK3568) |
| 读卡器 | New-CAP 0005 / HID RF Picc Reader,VID 0610 / PID 2010 |
| 卡片 | UID 92071FC9 |
| 启动模式 | mode=singleConnection,interCycleDelayMs=200 |
| 测试结果 | 第 1–36 轮通过,第 37 轮读卡阶段返回 CARD_REMOVED 并停止,未执行第 38–100 轮 |
1. 测试目标
验证此前偶发失败是否必须由“每轮重新打开和关闭 USB 读卡器”触发。本次把 USB 连接固定为一次:
连接读卡器(一次)
→ [寻卡 → 完整读卡 → 等待 200ms] × 最多 100
→ 关闭读卡器(一次)
测试过程中仍校验寻卡 UID 与读卡 UID 一致,并比较卡号、余额、主钱包消费计数、补助余额和补助计数。
2. 执行结果
| 指标 | 结果 |
|---|---|
| 计划上限 | 100 轮 |
| 实际尝试 | 37 轮 |
| 完整通过 | 36 轮 |
| 失败 | 1 轮 |
| 未执行 | 63 轮 |
| USB 连接次数 | 1 次 |
| USB 关闭次数 | 1 次(失败后的 finally 关闭) |
| 已执行 200ms 间隔 | 36 次,共 7.2 秒 |
| Android 仪器测试总时间 | 33.330 秒 |
| START 到 FAIL 日志跨度 | 33.288 秒 |
| 首次失败轮次 | 第 37 轮 |
未达到 100 轮连续稳定通过。
3. 成功轮次数据与性能
第 1–36 轮数据完全一致:
| 字段 | 稳定值 |
|---|---|
| UID | 92071FC9 |
| 卡号 | 1705827 |
| 余额 | 604 分 |
| 主钱包消费计数 | 43 |
| 补助余额/计数 | 0 / 0 |
成功轮次耗时不含其后的 200ms:
| 指标 | 耗时 |
|---|---|
| 最小值 | 654ms |
| 最大值 | 792ms |
| 平均值 | 715.33ms |
| 中位数 | 693ms |
| P95 | 792ms |
| 前 10 轮平均 | 693.6ms |
| 后 10 轮平均 | 693.0ms |
4. 第 37 轮失败定位
| 项目 | 内容 |
|---|---|
| 失败阶段 | readCard → readBaseData → activateExpected |
| 上层错误 | CARD_REMOVED |
| 错误信息 | The card was removed before the read completed |
| 该轮耗时 | 251ms |
| 失败前最近成功 | 第 36 轮,耗时 693ms |
| USB 状态 | 测试后 F700-HW 在线,读卡器 0610:2010 仍可枚举 |
调用顺序说明:
第 37 轮
├─ 外层 findCard() 成功
└─ readCard()
├─ readCard 内部 findCard() 已越过,未抛错
└─ readBaseData()
└─ activateExpected() 激活响应判定无卡,抛 CARD_REMOVED
因为测试日志的阶段已经从 findCard 切换为 readCard,且堆栈位于 readBaseData.activateExpected,所以不是该轮最初寻卡失败,而是同一轮稍后的射频重新激活没有识别到卡片。
5. 对“频繁打开和关闭”假设的判断
本次原始日志只出现一次 CONNECTED、一次最终 DISCONNECTED,Android 的 UsbDeviceConnectionJNI: close 也只出现一次。尽管没有逐轮重新连接,第 37 轮仍出现射频无卡判断。
因此当前可以得出:
- 频繁打开/关闭不是该故障发生的必要条件,也不是唯一原因;
- 它是否会提高故障概率仍不能由一次单连接测试判断;
- 故障更接近持续读卡过程中,某次卡片重新激活没有被读卡器识别;
- 仍需记录激活命令的原始 HID 响应,区分设备返回
0103、其他状态或 Android 解析问题; - 持续放卡、读卡器报警和射频会话内部状态仍是主要待验证方向。
6. 逐轮记录
| 轮次 | 结果 | 单轮耗时(ms) | UID | 余额(分) | 消费计数 | 说明 |
|---|---|---|---|---|---|---|
| 1 | 通过 | 705 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 2 | 通过 | 692 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 3 | 通过 | 692 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 4 | 通过 | 692 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 5 | 通过 | 692 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 6 | 通过 | 692 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 7 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 8 | 通过 | 692 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 9 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 10 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 11 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 12 | 通过 | 726 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 13 | 通过 | 748 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 14 | 通过 | 748 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 15 | 通过 | 748 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 16 | 通过 | 748 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 17 | 通过 | 760 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 18 | 通过 | 792 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 19 | 通过 | 792 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 20 | 通过 | 792 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 21 | 通过 | 792 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 22 | 通过 | 792 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 23 | 通过 | 726 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 24 | 通过 | 682 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 25 | 通过 | 654 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 26 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 27 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 28 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 29 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 30 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 31 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 32 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 33 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 34 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 35 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 36 | 通过 | 693 | 92071FC9 | 604 | 43 | 寻卡、完整读卡成功 |
| 37 | 失败并停止 | 251 | - | - | - | readCard / CARD_REMOVED / The card was removed before the read completed |
7. 原始数据
8. 正式结论
本次单次连接测试未通过:第 1–36 轮成功,第 37 轮在完整读卡的基础数据阶段重新激活卡片时返回 CARD_REMOVED,测试关闭读卡器并停止。该结果证明取消逐轮 USB 打开/关闭仍会出现射频失联,因而“频繁打开和关闭”不能作为完整根因。