Commit Graph
2 Commits
Author SHA1 Message Date
cbb 77354fd2a8 feat(boot): 1.1.0.22 CoE 跳回 APP + 连续崩溃门 + warm jump 根治
变更点:
1. CoE 0x2503「GD32 jump to app」
   - 主站写 1 → requestJumpToApp:向量/CRC 校验后置 CHECK/AVAL/EN,process() 在 SDO 响应后跳
   - 与 APP 0x2502 对称;crash_gate 只禁自动跳,人工跳仍允许
2. 连续 FWDGT 崩溃门(配置页 word9)
   - 复位 crash_count+1;达 OTA_LAYOUT_CRASH_STAY_MAX(3) 后关闭全部自动跳 APP
   - APP 喂狗稳定后再清 0(不在 init 立刻清)
3. warm jump 卡死
   - bootEcatDeinit 去掉 LAN9252 writeReg32(INT_EN/IRQ_CFG):HBI 不返回会锁死 AHB
   - 跳转前有界等 USART TC,避免 handoff 半截 + APP 乱码
4. EtherCAT 邮箱空闲限速 5ms;delayMs 改 WFI,BOOT 驻留不空转烧 CPU
5. ota_layout.h vendored 进仓库(GD32E50X_BOOT/shared/),include 改 ../shared/
6. .gitignore:firmware_keep/、评审 HTML、IDE 过程目录
2026-09-20 22:58:14 +08:00
cbb 46adcb790c feat(boot): BOOT 常驻原生 EtherCAT 刷 APP,跳转前按 HBI 使用情况补发 ESC 复位
把 BOOT 侧已上板跑通的 SSC/HBI 移植层一次性入库(comm/ecat + gd32e50x_exmc),
并修掉「刷完首启 APP 报 EXMC 总线未就绪、断电重上即好」这条实测链:

- v1.1.0.13:jumpToApplication 前补一发 LAN9252 RST#。BOOT 侧 HBI 全是索引两步事务,
  bootEcatDeinit 末尾的 writeReg32 把 HBI_IDX_0 留在 0x0054,而 APP 起板探针判
  IDX_0==0x1234(DS 9.5.4.2 复位默认值),带着残值跳进去就直接报总线未就绪。
- v1.1.0.14:那一发不能无条件下发。path=jump_latest_now(上电 3ms 直跳、这轮 ESC 从没
  起过)也在电源刚稳的窗口里拉了 RST#,释放点距上电仅约 15ms,板上表现为每次上电都停
  在 BOOT 里(串口停在 [J5-HEX];microlib + putChar 逐字符阻塞等 TBE,故日志停在半截
  = CPU 真停在那儿,不是尾巴没刷出来)。现由 s_escBusUp 门控(bootEcatBringup 里
  exmcInit 成功才置位);脉宽从 delay_1us(按 4cycle/迭代标定,实测 30ms 只走出 8ms)
  换成 DWT CYCCNT 真 30ms + 释放后 2ms;跳转前打 [J6] boot v<ver> handoff。
  delay_1ms 在这里不可用:本函数跑在 __disable_irq() 之后,SysTick 中断不递减就是永久
  死等,而 BOOT 没开 IWDG —— 那会变成刷完直接静默变砖。

v1.1.0.12 的两条一并入库:10s OTA 窗口的活性判据并上 ecatSessionActive(防半截灌写被
当合法 APP 跳进去、HardFault→复位→留守 10s 形成活锁);0x100A 上报真版本串
(DEVICE_SW_VERSION_LEN 0x3→0x10,acSoftwareversion 显式给 LEN+1 防越界读)。

板上实测:v1.1.0.14 上电直跳恢复正常,APP v1.6.34 起板,自检 ethercat 不再降级。
2026-09-15 00:19:33 +08:00