读卡器 100 轮(500ms 轮间间隔)稳定性测试记录
| 项目 | 内容 |
|---|---|
| 测试日期 | 2026-08-23 |
| 测试时间 | 10:30:37–10:31:13 CST |
| 目标轮次 | 最多 100 轮 |
| 轮间间隔 | 每轮关闭完成后等待 500ms,再连接下一轮;第 100 轮后不等待 |
| 停止规则 | 任一轮任一阶段首次失败,立即停止,不重试 |
| Android 设备 | F700_HW(RK3568) |
| 读卡器 | New-CAP 0005 / HID RF Picc Reader |
| USB 标识 | VID 0x0610 / PID 0x2010 |
| 读卡卡片 | UID 92071FC9,CPU 卡 |
| 测试入口 | CardReaderStabilityInstrumentedTest |
| 启动参数 | interCycleDelayMs=500 |
| 测试结果 | 第 1–29 轮通过,第 30 轮失败并停止,未执行第 31–100 轮 |
1. 测试口径
每轮严格执行:
- 连接并初始化读卡器;
- 寻卡并取得 UID;
- 完整读卡,读取基础数据、主钱包和补助钱包;
- 校验寻卡 UID、读卡 UID 以及业务字段跨轮一致;
- 关闭并释放读卡器;
- 本轮成功后等待 500ms,再开始下一轮。
间隔位于“上一轮关闭成功”与“下一轮连接开始”之间。单轮 durationMs 不包含其后的 500ms;测试总耗时包含已实际发生的轮间等待。失败轮不再等待,也不执行重试。
2. 执行结果
| 指标 | 结果 |
|---|---|
| 计划上限 | 100 轮 |
| 实际尝试 | 30 轮 |
| 完整通过 | 29 轮 |
| 失败 | 1 轮 |
| 未执行 | 70 轮 |
| 通过轮次占计划 | 29% |
| 首次失败轮次 | 第 30 轮 |
| 已执行 500ms 间隔 | 29 次,共 14.5 秒 |
| 失败后是否继续 | 否 |
| Android 仪器测试总时间 | 36.607 秒 |
| START 到 FAIL 日志跨度 | 36.577 秒 |
验收结论:未达到 100 轮连续稳定通过。 本次 500ms 轮间间隔没有消除此前观察到的偶发 APDU 短响应。
3. 成功轮次数据一致性
第 1–29 轮读取结果全部一致:
| 字段 | 稳定值 |
|---|---|
| UID | 92071FC9 |
| 卡号 | 1705827 |
| 余额 | 604 分 |
| 主钱包消费计数 | 43 |
| 补助余额 | 0 分 |
| 补助消费计数 | 0 |
未观察到循环读取导致卡片余额或消费计数变化。
4. 成功轮次性能统计
统计范围为第 1–29 轮的完整周期,均不含其后的 500ms 等待:
| 指标 | 耗时 |
|---|---|
| 最小值 | 706 ms |
| 最大值 | 808 ms |
| 平均值 | 738.55 ms |
| 中位数 | 710 ms |
| P95 | 808 ms |
| 前 10 轮平均 | 768.5 ms |
| 后 10 轮平均 | 735.0 ms |
5. 首次失败记录
| 项目 | 内容 |
|---|---|
| 轮次 | 第 30 轮 |
| 失败阶段 | readCard → readBaseData |
| 失败命令 | 00 B0 96 80 35 |
| 命令用途 | 基础信息扩展记录第 2 段,当前业务字段不解析 |
| 原始逻辑响应 | 03 01(2 字节) |
| 该轮耗时 | 602 ms |
| 错误分类 | PROTOCOL_ERROR |
| 停止行为 | 捕获错误、关闭读卡器、终止测试 |
| 后续轮次 | 第 31–100 轮未执行 |
精确调用链:
readCard()
└─ readBaseData()
├─ SELECT EC01 已完成
├─ READ 00 B0 95 09 0B 已完成
├─ READ 00 B0 82 00 0E 已完成
├─ READ 00 B0 96 00 80 已完成
└─ READ 00 B0 96 80 35 返回 03 01,失败并停止
正常 APDU 逻辑响应至少需要 SW1 + SW2 + CRC-A(2 bytes),最短为 4 字节。03 01 只有 2 字节,不能按当前 APDU 响应格式完成 CRC-A 和状态字校验,因此实现按协议错误终止;这两个字节的厂商正式语义目前未知。
6. 与前两次测试的对照
| 测试 | 轮间间隔 | 结果 | 首次失败位置 |
|---|---|---|---|
| 首次正式测试 | 0ms | 32 轮通过,第 33 轮失败 | 补助钱包阶段,选择 EC01 时短响应;首次日志未记录原始字节 |
| 诊断复现 | 0ms | 100/100 通过 | 未复现 |
| 本次正式测试 | 500ms | 29 轮通过,第 30 轮失败 | 基础数据阶段,00B0968035 返回 0301 |
这组证据说明:
- 异常不是固定发生在第 33 轮,也不是固定发生在同一条 APDU;
- 500ms 的轮间等待不足以保证 100 轮稳定;
- 读卡器报警仍不能单独解释异常,因为此前报警后即时完整读卡成功;
- 当前最准确的分类仍是“读卡器/卡片通讯链路偶发返回不符合正常 APDU 包装格式的 2 字节响应”;
- 尚不能仅凭
0301判断根因属于读卡器固件、射频会话、卡片响应、USB HID 错位或其他内部状态。
7. 逐轮记录
| 轮次 | 结果 | 单轮耗时(ms) | UID | 余额(分) | 消费计数 | 说明 |
|---|---|---|---|---|---|---|
| 1 | 通过 | 800 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 2 | 通过 | 796 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 3 | 通过 | 808 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 4 | 通过 | 808 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 5 | 通过 | 808 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 6 | 通过 | 775 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 7 | 通过 | 730 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 8 | 通过 | 741 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 9 | 通过 | 710 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 10 | 通过 | 709 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 11 | 通过 | 710 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 12 | 通过 | 710 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 13 | 通过 | 708 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 14 | 通过 | 708 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 15 | 通过 | 709 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 16 | 通过 | 710 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 17 | 通过 | 709 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 18 | 通过 | 710 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 19 | 通过 | 709 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 20 | 通过 | 710 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 21 | 通过 | 710 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 22 | 通过 | 714 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 23 | 通过 | 706 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 24 | 通过 | 708 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 25 | 通过 | 721 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 26 | 通过 | 765 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 27 | 通过 | 765 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 28 | 通过 | 764 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 29 | 通过 | 787 | 92071FC9 | 604 | 43 | 连接、寻卡、完整读卡、关闭均成功 |
| 30 | 失败并停止 | 602 | - | - | - | readCard / PROTOCOL_ERROR / APDU response is too short for command 00B0968035: 0301 (2 bytes) |
8. 原始数据
9. 正式结论
本次正式测试失败,不能声明“100 轮通过”。
有效结果为:在每轮关闭后等待 500ms 的条件下,第 1–29 轮完整通过;第 30 轮读取基础扩展记录时收到 0301 两字节短响应,测试按首次失败停止规则终止。该样本首次明确记录了失败命令和原始响应,证明增加 500ms 轮间间隔不能彻底规避问题。