# 全链路测试结果(第一轮 · 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 ## 图片输入机制 review(典狱长测试案例,2026-07-29) **链路全景**:源图获取 → 设备适配处理 → 管线量化 → 双平面分块上传 → 槽位显示 | 阶段 | 实现 | 本案例 | |---|---|---| | 源图 | 任意 RGB 图(网络/本地) | 典狱长格赫罗斯 960×565(腾讯新闻角色文配图) | | 设备适配 | 裁剪聚焦 + 风格化(本案例:FIND_EDGES 线稿+红区检测)→ 400×300 | 黑线白底 + 红手套点缀 | | 管线量化 | `image_pipeline.process_image`:调整→抖动→1bpp MSB 双平面(bw: 任通道>0;red: R>0,G=0,B=0) | `--algo none`(已量化图,保线条锐利) | | 上传 | 63×2 块 ×244B(03 ff/00 + 2B 偏移),`01` 结束 | slot 1(图二) | | 显示 | `mode imageN`(e1000N+e2) | image1 | **机制评审结论**: 1. 任意风格图均可达:预处理(PIL 全能力)与设备管线解耦,风格化在本地完成,设备只收 1bpp 结果——**图片输入机制通用、可编程、agent 可编排**。 2. 已量化图必须用 `--algo none` 直通,避免二次抖动破坏线条。 3. 三色通道映射与固件一致(bw=黑、red=红、双0=白背景)。 4. 待办:处理脚本可产品化为 `ppclock image --style lineart`(后续增强项)。 测试产物:analysis/web/warden_400x300.png(400×300 线稿)+ 上屏实拍(待用户目视确认)。