《GD32_OTA_FLOW_COMPARE.html》修订附录 2026-10-19

原报告 · 核对基线 commit eac3717 · 总评审:DCU_DesktopController_专家评审_2026-10-19.html
原报告:GD32 刷写流程对比:ESP32 中继(老)× EtherCAT 直灌(新)
时间线:报告日期 2026-09-13;入库 383535b(09-20)→ 归档 beeae8a
原结论概要:对比老流程(WiFi→ESP32 中继→SPI,2604 次往返)与新流程(EtherCAT CoE SDO,527 帧),结论为新流程是『少一层先决条件』的刷法,当时 0 次上板实测,且刷运行中 APP 的机器尚不支持。

原文件保持不变;本附录逐条记录其结论在当前代码中的状态。

逐条结论跟踪

编号原结论 / 建议当前状态证据(文件:行号)备注
OF-1新流程 0 次上板实测已过时js/ota/boot_ecat.js:55-58, 307-322EtherCAT 直灌已移植入本仓(d73e2fb 起),注释含 2026-10-12/13 实测记录
OF-2正在跑 APP 的机器还不能直接刷部分修复js/ota/boot_ecat.js:663-676主机侧已写 CoE 0x2502:00=1 交接;固件侧无法核实
OF-3刷前刷后 0x100A 版本比对已修复js/ota/boot_ecat.js:629-632, 792-794
OF-44 字节对齐补 0xFF无法在本仓库核实—发生在 native 侧
OF-5固件 OTA.cpp 尾巴丢弃缺陷无法在本仓库核实—固件仓
OF-6老流程无断点续传,每次从偏移 0 重写仍存在js/ota/upload-esp32.js:213-247整文件 POST 且内存双份(O-15)
OF-7报告引用行号 upload-gd32.js:58,194已过时(行号漂移)js/ota/upload-gd32.js:67-68; js/ota/file-handle.js:458, 563file-handle 引用仍有效
OF-8两条路互为备份、复用同一 flash 写入者无法在本仓库核实—前端侧两条路缺统一互斥,见新问题 O-1(致命)

相关新问题(详见总评审)

致命 [O-1] 同一块 GD32 可被两条通道同时刷写

模块
OTA/刷写
位置
js/ota/session.js:128; js/ota/boot_ecat.js:176-189, 576-577; js/ota/console-mode.js:67, 120; js/ota/ecat_load.js:114-117; js/ota/upload-esp32.js:62-91; js/ble/transfer.js:457-472
现象
WiFi 上传进入 VERIFYING/RELAYING 后 window.isUploading 置 false;依赖它的所有忙判(ECAT 按钮、模式切换、ECAT 负载轮询)都放行。bootEcatFlash 只查 bootEcatBusy;startUpload 与 BLE autoFlash 从不查 bootEcatBusy。
风险
ESP32 正经 SPI 中继写 GD32 时,ECAT 或 BLE 又开始刷同一芯片,Flash 内容交错,设备变砖。
修改建议
建立唯一的 flashBusy 互斥(跨帧共享,含 WiFi/中继/BLE/ECAT 全阶段),所有入口统一检查;isUploading 仅作 UI 用途。

建议 [O-15] 大量 window.* 全局、猴补 showOpenFilePicker、内存复制

模块
OTA/刷写
位置
js/ota/console-mode.js:170-199; js/ota/upload-esp32.js:213-247; js/ota/progress.js:177; js/ota/upload-gd32.js:85-104
现象
上传体为完整文件再复制一份;失败清理写死按钮文案;存在 FAILED→DONE 转移路径。
风险
可维护性差,状态机可出现非法转移。
修改建议
收敛状态机转移表;模块化状态;流式上传。

结论

共 8 条:已修复 1、部分修复 1、仍存在/存疑 1、已过时 2、无法在本仓库核实 3。