fix(boot): 1.1.0.18 短路跳转前 LAN9252 硬复位,根治 warm jump 起不来
现象:刷完 warm jump 进不去 APP,按 reset 走 cold jump 同一镜像正常起 => 差异只剩 s_escBusUp 为真时 bootEcatDeinit 真干的活。只短路 escResetForJump() 一发(boot_ecat_hw.cpp:507,其余与 1.1.0.14 逐指令 相同),真机实测 warm/cold 均可跳。 注:1.1.0.15~17(关中断跳转/BKP 面包屑/EXTI15 清理)未提交、已整体 回退到 46adcb7,补丁存 G:/Robot_v2/DCU/_revert_backup_20260916/; 版本号取 18 不复用 15/16/17(三版都真上过板,[J6] 读数须唯一可辨)。
This commit is contained in:
@@ -504,7 +504,15 @@ extern "C" void bootEcatDeinit(void)
|
|||||||
exti_flag_clear(ESC_IRQ_EXTI);
|
exti_flag_clear(ESC_IRQ_EXTI);
|
||||||
writeReg32(LAN9252_REG_INT_EN, 0U); /* 免得 APP 起来后 PB1 还挂着 ESC 驱动的电平 */
|
writeReg32(LAN9252_REG_INT_EN, 0U); /* 免得 APP 起来后 PB1 还挂着 ESC 驱动的电平 */
|
||||||
writeReg32(LAN9252_REG_IRQ_CFG, 0U);
|
writeReg32(LAN9252_REG_IRQ_CFG, 0U);
|
||||||
escResetForJump(); /* 1.1.0.13: 交还总线前把芯片复位到上电默认态 */
|
/** [WJ-TEST 1.1.0.18] 单变量裁决:暂时短路跳转前这发 RST#。
|
||||||
|
* 板上实测(2026-09-16):刷完 warm jump 进不去 APP,但按一下 reset 走
|
||||||
|
* cold jump 就正常起 —— 两条路唯一差异是 s_escBusUp 为真时下面这些真跑了,
|
||||||
|
* 而 escResetForJump 释放 RST# 后只忙等 2ms 就交 CPU(对照 BOOT 自己起板
|
||||||
|
* exmcInit 轮询 HBI_IDX_0==0x1234 上限 300ms)。
|
||||||
|
* 预期代价=1.1.0.13 的原病回来(APP 自检「EXMC 未就绪/降级 ethercat」、
|
||||||
|
* IDX_0 读到 0x0054);那是"能起但降级",与"起不来"形态不同,可分开判读。
|
||||||
|
* 起来 ⇒ 元凶=这发复位的时序;仍起不来 ⇒ 转查 PD/PE 留在 AF 的 MCU 侧残留。 */
|
||||||
|
/* escResetForJump(); */ /* 1.1.0.13: 交还总线前把芯片复位到上电默认态 */
|
||||||
exmc_norsram_disable(EXMC_BANK0_NORSRAM_REGION0);
|
exmc_norsram_disable(EXMC_BANK0_NORSRAM_REGION0);
|
||||||
rcu_periph_clock_disable(RCU_EXMC); /* PD/PE 回浮空,交还 APP 自己初始化 */
|
rcu_periph_clock_disable(RCU_EXMC); /* PD/PE 回浮空,交还 APP 自己初始化 */
|
||||||
DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk;
|
DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk;
|
||||||
|
|||||||
@@ -180,11 +180,24 @@ typedef uint32_t u32;
|
|||||||
* 则 [BOOT][ESC] jump reset 出现、APP 起板 IDX_0 探到 0x1234。若直跳仍卡,说明与
|
* 则 [BOOT][ESC] jump reset 出现、APP 起板 IDX_0 探到 0x1234。若直跳仍卡,说明与
|
||||||
* RST# 无关,转查 v1.1.0.12 首次上板的两条(10s 窗口并 ecatSessionActive、
|
* RST# 无关,转查 v1.1.0.12 首次上板的两条(10s 窗口并 ecatSessionActive、
|
||||||
* main.cpp:69 新增 snprintf —— BOOT 栈只有 1KB,拿 .map + fromelf 数栈余量)。
|
* main.cpp:69 新增 snprintf —— BOOT 栈只有 1KB,拿 .map + fromelf 数栈余量)。
|
||||||
|
* v1.1.0.18 [WJ-TEST]: 单变量裁决 warm jump 失败(板上实测 2026-09-16)。
|
||||||
|
* 现象:刷完 warm jump 进不去 APP;按一下 reset 走 cold jump 同一镜像正常起
|
||||||
|
* ⇒ APP 启动链无罪,差异全在 s_escBusUp 为真时 bootEcatDeinit 真干了活。
|
||||||
|
* 本版只做一件事:把 bootEcatDeinit 里的 escResetForJump() 调用注释掉
|
||||||
|
* (boot_ecat_hw.cpp:507),其余逐指令与 14 相同。
|
||||||
|
* 版本号取 18 不复用 15/16/17 —— 那三版都真上过板,[J6] 读数必须唯一可辨。
|
||||||
|
* 判读:warm jump 能起(哪怕自检报 EXMC 未就绪/降级、IDX_0=0x0054)
|
||||||
|
* ⇒ 元凶=那发复位的 2ms 交 CPU 时序,改成轮询就绪后再跳或交给 APP;
|
||||||
|
* warm jump 仍起不来 ⇒ 与复位无关,转查 PD/PE 停在 AF、EXMC 时钟被关
|
||||||
|
* 的 MCU 侧残留(509 行那句"PD/PE 回浮空"是错的,关外设时钟不切 GPIO)。
|
||||||
|
* 注:本版与 1.1.0.15~17(关中断跳转实验、BKP 面包屑、EXTI15 清理)无关,
|
||||||
|
* 那批改动未提交且已整体回退到 46adcb7,补丁存于
|
||||||
|
* G:/Robot_v2/DCU/_revert_backup_20260916/。
|
||||||
*/
|
*/
|
||||||
#define BOOT_FW_VERSION_MAJOR 1U
|
#define BOOT_FW_VERSION_MAJOR 1U
|
||||||
#define BOOT_FW_VERSION_MINOR 1U
|
#define BOOT_FW_VERSION_MINOR 1U
|
||||||
#define BOOT_FW_VERSION_PATCH 0U
|
#define BOOT_FW_VERSION_PATCH 0U
|
||||||
#define BOOT_FW_VERSION_BUILD 14U /* 变更来由见上方注释块 */
|
#define BOOT_FW_VERSION_BUILD 18U /* 变更来由见上方注释块 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flash 布局说明(GD32E508VE,512KB)
|
* Flash 布局说明(GD32E508VE,512KB)
|
||||||
|
|||||||
Reference in New Issue
Block a user