Files
qianbian/docs/field-test-result.md
T

68 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 全链路测试结果(第一轮 · 2026-07-28)
> 执行方式:bridge 模式(host-win 原生 BLE)+ `ppclock batch` 单连接。
> 计划:docs/field-test-plan.md。结论先行:**核心链路全部实机验证通过**。
## 基础设施
| 项 | 结果 |
|---|---|
| 本机 usbip 蓝牙 | ❌ 大 MTU GATT 断流(DECISIONS 2026-07-28),弃用 |
| bridge(host-win 原生) | ✅ 部署于 C:\yi\ble-bridge(build 4,PID 23776,0.0.0.0:8971) |
| 设备 | NRF-5DBF28 @ 18:BC:5A:5D:BF:28 |
## 协议验证(实机)
| # | 项 | 结果 | 证据 |
|---|---|---|---|
| 1 | 扫描/连接 | ✅ | bridge scan/connect,build 2 后稳定 |
| 2 | **GATT 结构** | ✅(有修正) | 实机全表抓取:EPD h=48;**1f1f(h=53) 仅 write 不执行命令;331f(h=57) 为活命令通道**;fef5 SUOTA 六特征在线 |
| 3 | **取设备 ID(EFEF)** | ✅ | `81233F3C267112`(经 331f 写+notify) |
| 4 | **MAC 反解** | ✅ | ID → `28:bf:5d:5a:bc:18` = 广播地址反转(参数序 MAC5 在前,实机校正) |
| 5 | **keygen 离线激活** | ✅ | `activate --auto` 下发 `2564550c1b2d` 成功 |
| 6 | 对时 dd | ✅ | batch line 3 ok |
| 7 | **传图(126×244B 双平面)** | ✅ 屏显确认 | 棋盘+中央红块上屏(曾杀死 usbip 的流量) |
| 8 | 显示图一 e10000 | ✅ 屏显确认 | 切到图片 |
| 9 | 模式切换 e102xx/e101xx | ✅ 屏显确认 | 331f 通道下 clock 画面出现;1f1f 通道无效(实锤对比) |
| 10 | 倒计时+前缀 | ✅ 命令 ok | 屏显待二次确认(序列中停留 8s,见下) |
| 11 | 停车牌 | ⚠ 一次传输中断 | WinError -2147023673(设备睡眠间隙断连,非协议问题) |
| 12 | 刷屏 00/01 | ✅ | 屏显刷新 |
## 待第二轮确认/执行
1. ~~慢速目视序列~~ 已完成(见 #10-12 行)
2. **G4 SUOTA 首刷**:已推进至设备内部产品头门禁(见下"SUOTA 排障全记录"),**用户决策安全收尾**(2026-07-29),后续解法见遗留项
3. 固件 no-op 验证:rotation/wifi 应无屏效
4. 六抖动算法屏显差异、模板 6 种屏显
## SUOTA 排障全记录(2026-07-29)
| 层 | 问题 | 根因与处置 |
|---|---|---|
| 传输 | 三轮"首块前静默停滞" | **asyncio StreamReader 64KiB 行限制**,144KB 镜像请求永不到达(build 9: limit=4MiB) |
| 协议 | 状态码 16 误杀 | 固件反汇编实证 = MEM_DEV type 0x13 信息应答(0x07FCB770),build 10 按信息码处理 |
| 引脚 | 块1 状态 22(0x38000 读失败) | GPIO_MAP 字节序错误;探针实证 **BE 序 {05,06,00,40} 电气有效**(已固化为服务端默认) |
| 门禁 | 状态 20(产品头无效) | **设备 0x38000 无有效 'pR' 产品头**(裸 'pQ' 直启),固件中止首缓冲处理——vendor 级设计 |
**全量烧录实证(用户授权 2026-07-29,留证 docs/suota-flash-log.jsonl)**:mem_dev_ok → 16(信息)→ gpio_map_ok → 块1 发送 → 状态 20 → 安全中止(写 flash 前终止,零写入)。结论:阻断确为 0x38000 产品头缺失/无效,非引脚误读。
**vendor 目录逆向(路线 1)**:qbsg.top /api/firmware/catalog 免认证开放;PP_da14585_4.2_CH.img 与本机镜像 sha256 完全一致(vendor OTA 镜像=本镜像,无产品头附加);NEW 变体同检 0x38000。
**解法路线(遗留 K4)**:①JTAG/UART 写产品头 ②逆向 vendor 付费激活流程(PP_da14585_4.2_NEW 的 activation 疑含产品头写入路径,libapp.so Rust secp256k1/AES)③评估 vendor 原始 OTA 在同类裸启设备上是否同败(vendor 级缺陷)。
设备全程零风险(门禁在写 flash 前中止;END/复位信号从未发出)。
## 已知问题
| # | 问题 | 状态 |
|---|---|---|
| K1 | 停车牌 EF+双写号码:命令 ACK 但屏不显(含 11 位号码、去 e2 变体均试) | 待查:疑似固件家族格式分叉(d8 hex-concat)或渲染与模式联动;协议帧与 web 证据一致 |
| K2 | 设备睡眠快(广播窗 30-60s,无唤醒按钮、自动周期醒) | 已有工作法:batch 单连接 + 守候循环 |
| K3 | 多次命令间隔断连(WinError -2147023673)1 次 | 瞬态(睡眠间隙),重连即恢复 |
| K4 | **SUOTA 产品头门禁**:0x38000 无 'pR' | 解法案:①逆向 vendor 镜像目录是否含产品头镜像 ②研究裸启设备的产品头自举写入路径 ③评估 JTAG/UART 写头 |
## 环境备注
- 设备睡眠:广播窗口 30-60s,连接态清醒;现场统一 batch 单连接+守候循环
- bridge_server build 4:write alt=331f、notify 三订阅、EFEF 走 331f