generated from hulk/gd32e23x_template_cmake_vscode
Compare commits
2
Commits
dev
..
8dcbfa9f99
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8dcbfa9f99 | ||
|
|
4af24a4dfb |
@@ -47,7 +47,7 @@ LDC1612(电涡流/电感数字转换器)+ TMP112(板载温度),RS485
|
|||||||
|
|
||||||
```
|
```
|
||||||
0x08000000 ┌─────────────────┐
|
0x08000000 ┌─────────────────┐
|
||||||
│ Bootloader │ 8K 页 0~7 专属分支 bootloader_CeramixNano_EDDY(V0.1.0,4,040B)
|
│ Bootloader │ 8K 页 0~7 复用 MB 板 BL bin(V0.1.0,4,044B,MD5 f7b447cf…)
|
||||||
0x08002000 ├─────────────────┤
|
0x08002000 ├─────────────────┤
|
||||||
│ FW_A 运行槽 │ 36K 页 8~43 OTA/Ymodem 接收区;锚点 A 记录@0x0800AFFC
|
│ FW_A 运行槽 │ 36K 页 8~43 OTA/Ymodem 接收区;锚点 A 记录@0x0800AFFC
|
||||||
0x0800B000 ├─────────────────┤
|
0x0800B000 ├─────────────────┤
|
||||||
@@ -57,19 +57,15 @@ LDC1612(电涡流/电感数字转换器)+ TMP112(板载温度),RS485
|
|||||||
0x08010000 └─────────────────┘
|
0x08010000 └─────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
- **BL = 并列板卡分支 `bootloader_CeramixNano_EDDY`**(BL 仓库,2026-10-24 自 MB 分支
|
- **BL 复用**:直接使用 `gd32e230_bootloader` 仓库 `bootloader_CeramixNano_MB` 分支
|
||||||
创建;板卡宏 CERAMIXNANO_EDDY,**LED=PB1**,Ymodem 每成功烧录一包翻转一次,逻辑
|
V0.1.0 bin(RS485 引脚/波特率/DE 方案与 EDDY 完全一致;唯一差异 LED 引脚
|
||||||
同 MB 分支;版本独立编号 V0.1.0 = 4,040B,MD5 1dcc17bf…)。RS485 配置与 MB 逐宏
|
MB=PA14 / EDDY=PB1——BL 的 LED 仅 Ymodem 收包闪烁,纯装饰,EDDY 板不亮无碍)。
|
||||||
相同;**PA14 不被 BL 占用 ⇒ 升级会话期间 SWD 保持可用**(MB 分支 BL 的 LED=PA14
|
|
||||||
会占 SWCLK,勿混烧)。
|
|
||||||
- **A 线 = dev/main**:链接 0x08002000 / **LENGTH 36K**(LD 上限防溢出 B 槽),
|
- **A 线 = dev/main**:链接 0x08002000 / **LENGTH 36K**(LD 上限防溢出 B 槽),
|
||||||
VTOR 0x2000;版本从 V1.0.3 起(首个双固件 A 版本,码 26)。
|
VTOR 0x2000;版本从 V1.0.3 起(首个双固件 A 版本,码 26)。
|
||||||
- **B 线 = release/golden**:链接 0x0800B000 / LENGTH 0x4BF8(19K−8B,B 记录由打包
|
- **B 线 = release/golden**:链接 0x0800B000 / LENGTH 0x4BF8(19K−8B,B 记录由打包
|
||||||
工具写入,链接区不含尾 8B——与 MB 的 .fw_tail 方案等价),VTOR 0xB000;
|
工具写入,链接区不含尾 8B——与 MB 的 .fw_tail 方案等价),VTOR 0xB000;
|
||||||
**2026-10-25 起整体替换为生产实装版原样复制,版本冻结 V1.0.3**(保底判定值 =
|
**版本冻结 V1.0.2**(保底判定值 = M999 返回 `v26.1.0.2` ⇔ 在跑 FW_B,该版本号
|
||||||
M999 返回 `v26.1.0.3` ⇔ 在跑 FW_B;`v26.1.0.2` 与 `v26.1.0.3` 均永不再用于
|
永不再用于 OTA 升级包)。此分支改动不得合回 dev/main。
|
||||||
OTA 升级包版本,A 线版本必须 > V1.0.3)。此分支改动不得合回 dev/main;
|
|
||||||
详见 golden 分支提交 c7433a8 与 Gitea Release `golden-v26.1.0.3`。
|
|
||||||
- 打包:`hulk-mcu-firmware` skill / merge tool profile **`CeramixNano_EDDY_Dual_FW`**
|
- 打包:`hulk-mcu-firmware` skill / merge tool profile **`CeramixNano_EDDY_Dual_FW`**
|
||||||
(布局与 `CeramixNano_MB_Dual_FW` 逐字节相同),产出 `_UPDATE/_FULL/_FACTORY + MD5`。
|
(布局与 `CeramixNano_MB_Dual_FW` 逐字节相同),产出 `_UPDATE/_FULL/_FACTORY + MD5`。
|
||||||
- 升级链路:上位机(原 SOC 职责)—RS485—> BL(Ymodem);APP 用 `M9999` 软复位进
|
- 升级链路:上位机(原 SOC 职责)—RS485—> BL(Ymodem);APP 用 `M9999` 软复位进
|
||||||
@@ -90,61 +86,40 @@ LDC1612(电涡流/电感数字转换器)+ TMP112(板载温度),RS485
|
|||||||
- 2026-10-02:IIC 驱动改进导入(总线恢复重试/超时辅助/read_raw/scan AERR 处理);
|
- 2026-10-02:IIC 驱动改进导入(总线恢复重试/超时辅助/read_raw/scan AERR 处理);
|
||||||
硬件全命令实测通过;DAPLink 烧录问题解决;发布 V1.0.2(Gitea Release + tag)
|
硬件全命令实测通过;DAPLink 烧录问题解决;发布 V1.0.2(Gitea Release + tag)
|
||||||
- **2026-10-24:双固件(出厂救援)方案移植完成并全链路实测通过**(详见下节)
|
- **2026-10-24:双固件(出厂救援)方案移植完成并全链路实测通过**(详见下节)
|
||||||
- BL 仓库新建并列板卡分支 `bootloader_CeramixNano_EDDY`(LED=PB1,V0.1.0 = 4,040B,
|
- BL 复用 MB V0.1.0 bin(未改动 BL 代码,仅文档说明)
|
||||||
每收包翻转一次;此前短暂采用"复用 MB bin"方案,因 LED 引脚不同已废弃并重打包)
|
|
||||||
- dev:LD 54K→36K、命名 CeramixNano-EDDY、板卡码 26、V1.0.3;
|
- dev:LD 54K→36K、命名 CeramixNano-EDDY、板卡码 26、V1.0.3;
|
||||||
golden:V1.0.2 冻结命名 + variant=golden
|
golden:V1.0.2 冻结命名 + variant=golden
|
||||||
- 两线 CMake 补齐 `--gap-fill=0xFF` 与 `LD LINK_DEPENDS`
|
- 两线 CMake 补齐 `--gap-fill=0xFF` 与 `LD LINK_DEPENDS`
|
||||||
- fw_pack 新增 `CeramixNano_EDDY_Dual_FW` profile(55 项回归过,skill 缓存已同步)
|
- fw_pack 新增 `CeramixNano_EDDY_Dual_FW` profile(55 项回归过,skill 缓存已同步)
|
||||||
- 产物(`Build/test/dualfw_2026-10-24/`):UPDATE(12 页,trailer 0x5C09000C)、
|
- 产物(`Build/test/dualfw_2026-10-24/`):UPDATE(12 页,trailer 0x5C09000C)、
|
||||||
FULL(EDDY BL + A=V1.0.3/B=V1.0.2,19 项校验过)、FACTORY(12 项校验过)+ MD5 清单;
|
FULL(A=V1.0.3/B=V1.0.2,19 项校验过)、FACTORY(12 项校验过)+ MD5 清单;
|
||||||
独立 python XMODEM 复算全部命中
|
独立 python XMODEM 复算全部命中
|
||||||
- **硬件实测矩阵(SWD 探针 PC 采样 + 485 命令双重手段,全部 PASS;先用 MB bin 实测,
|
- **硬件实测矩阵(SWD 探针 PC 采样 + 485 命令双重手段,全部 PASS)**:
|
||||||
换 EDDY 专属 BL 后 FULL/FACTORY/OTA 全周期复测通过)**:
|
|
||||||
FACTORY→跳B(v26.1.0.2) / FULL→记录路径跳A(v26.1.0.3) / PC 模拟 SOC 完整 OTA
|
FACTORY→跳B(v26.1.0.2) / FULL→记录路径跳A(v26.1.0.3) / PC 模拟 SOC 完整 OTA
|
||||||
44s 成功+读回整片逐字节与包一致(B 区在真实 OTA 中毫发无损)/
|
44s 成功+读回整片逐字节与包一致(B 区在真实 OTA 中毫发无损)/
|
||||||
擦锚点页→legacy 跳A / 锚点在位毁A体→CRC 拦截直落B(防降级)/
|
擦锚点页→legacy 跳A / 锚点在位毁A体→CRC 拦截直落B(防降级)/
|
||||||
再毁B体→拒跳坏固件停留 BL(PC=0x080001B6) / OTA 第4包 CA 中止→落B /
|
再毁B体→拒跳坏固件停留 BL(PC=0x080001B6) / OTA 第4包 CA 中止→落B /
|
||||||
非整页裸 bin 包→头部预检 CA×2 拒收→落B / M3/M4/M6 功能全通
|
非整页裸 bin 包→头部预检 CA×2 拒收→落B / M3/M4/M6 功能全通
|
||||||
- **2026-10-25:dev 版本升至 V1.0.4(开发版,未发布 Release)**——与保底判定值
|
|
||||||
拉开距离(golden 已整体替换为生产实装版原样复制 v26.1.0.3,见 golden 分支
|
|
||||||
c7433a8 与 Release `golden-v26.1.0.3`;A 线版本必须 > V1.0.3,否则 M999 无法
|
|
||||||
区分保底)。相对生产实装版 v26.1.0.3 的主要改动:**IIC 驱动升级**(模板改进版:
|
|
||||||
总线恢复重试/超时辅助/read_raw 无子地址读/16 位寄存器地址/scan AERR 处理——
|
|
||||||
最大一块)、新增 **M5 温度补偿**(系数待标定,暂等价 M3)与 **M6 标定数据**
|
|
||||||
命令、**M4 负温度修复**(有符号 int16 算法);双固件 A 槽布局随 V1.0.3 继承。
|
|
||||||
待定:LDC1612 驱动电流当前仍为 GEN(18),生产实装调参为 GEN(8)(2026-03-23),
|
|
||||||
正式发布前需确认是否回合。
|
|
||||||
|
|
||||||
### 计划 / TODO
|
### 计划 / TODO
|
||||||
|
|
||||||
- dev → main 合并待发布节奏(V1.0.3 为首个双固件 A 版本,main 仍是 54K 单槽布局)
|
- dev → main 合并待发布节奏(V1.0.3 为首个双固件 A 版本,main 仍是 54K 单槽布局)
|
||||||
- M5 温度补偿系数目前为 0(TEMP_COMP_COEFF_*),待标定后填入实际温漂系数
|
- M5 温度补偿系数目前为 0(TEMP_COMP_COEFF_*),待标定后填入实际温漂系数
|
||||||
- 上位机/SOC 侧需预存保底判定值 `v26.1.0.3`(跑 B ⇒ 升级未生效重推;2026-10-25 起 golden 为生产实装版原样复制,判定值从 v26.1.0.2 改为 v26.1.0.3)
|
- 上位机/SOC 侧需预存保底判定值 `v26.1.0.2`(跑 B ⇒ 升级未生效重推)
|
||||||
- LDC1612 驱动电流:dev 线 GEN(18) vs 生产实装 GEN(8),A 线正式发布前需确认回合
|
|
||||||
- (可选)模板侧 SEGGER RTT / CFG_ENABLE 宏体系同步
|
- (可选)模板侧 SEGGER RTT / CFG_ENABLE 宏体系同步
|
||||||
|
|
||||||
### 已删除的历史分支(2026-10-24 清理,均为开发过程产物)
|
|
||||||
|
|
||||||
- `dev_more_information`(远端):零独有提交,内容早已全部并入 main/dev。
|
|
||||||
- `dev_feature_iic_more_byte`(远端):仅 2 个 2025-08-25 的孤立实验提交,从未接入构建——
|
|
||||||
`75ea93c`(iic_new.c 975 行并行驱动实验,实际采用的是后来模板导入 i2c.c 的改进)、
|
|
||||||
`dbb6569`("dlpc3421 driver from kimi",DLPC3421 为 MB 光机芯片,与本板无关)。
|
|
||||||
如需找回:本地对象库在 gc 前仍可 `git show <hash>`。
|
|
||||||
|
|
||||||
### 教训(避免复发)
|
### 教训(避免复发)
|
||||||
|
|
||||||
- **SWRSTF 残留**:M9999/调试器软复位置位的 SWRSTF **不随 NRST/SRST 清除**(仅 POR
|
- **SWRSTF 残留**:M9999/调试器软复位置位的 SWRSTF **不随 NRST/SRST 清除**(仅 POR
|
||||||
或 RSTFC 清),此后任何复位 BL 都直进升级模式、不跳 APP——表现为"设备沉默,
|
或 RSTFC 清),此后任何复位 BL 都直进升级模式、不跳 APP——表现为"设备沉默,
|
||||||
M999 无响应,但 0x30 能回 ok"。排障/测试时须 SWD `mww 0x40021024 0x01000000`
|
M999 无响应,但 0x30 能回 ok"。排障/测试时须 SWD `mww 0x40021024 0x01000000`
|
||||||
清标志后再放跑(`swd.py boot` 已内置)。
|
清标志后再放跑(`swd.py boot` 已内置)。
|
||||||
- **(历史)误烧 MB 分支 BL 会让 SWD 在 0x30 后失联**:MB 分支 BL 的 LED=PA14
|
- **BL 收到 0x30 后 SWD 必死**:复用的 MB BL 在 0x30 应答后调用 gpio_init 把
|
||||||
(SWCLK),0x30 应答后切输出 ⇒ SWD 死。**本板专用 `bootloader_CeramixNano_EDDY`
|
PA14(EDDY 板=SWCLK)切为 LED 输出。因此:探针类 SWD 操作前**不要**发 0x30;
|
||||||
分支 LED=PB1,PA14 不占用,升级会话期间 SWD 全程可用**(2026-10-24 起所有镜像
|
OTA/升级会话结束后 SWD 失联属预期,恢复 = `M9999` 复位(PA14 回默认)后再连。
|
||||||
均为 EDDY BL,此坑仅存档)。若真误烧:`M9999` 复位(有 APP 时)或用
|
若 APP 也没在跑(BL 卡收包),用 connect_assert_srst 变体 cfg
|
||||||
connect_assert_srst 变体 cfg(`Toolchain/eddy_test/daplink_srst.cfg`)脉冲 SRST
|
(`Toolchain/eddy_test/daplink_srst.cfg`)脉冲 SRST 复位恢复——SRST 线已验证接通,
|
||||||
复位恢复——SRST 线已验证接通,但该 DAPLink 下 examination 必失败属正常,
|
但该 DAPLink 下 examination 必失败属正常,复位本身生效。
|
||||||
复位本身生效。
|
|
||||||
- **Ymodem 文件头 ACK 后是 ACK+'C' 连发**:发送器若分两次等会永远等不到第二个 'C'
|
- **Ymodem 文件头 ACK 后是 ACK+'C' 连发**:发送器若分两次等会永远等不到第二个 'C'
|
||||||
(首次 OTA 调试即栽在此,BL 无超时会卡死;随后发 5×CA 可解)。
|
(首次 OTA 调试即栽在此,BL 无超时会卡死;随后发 5×CA 可解)。
|
||||||
- OpenOCD `program`/`dump_image` 的文件路径必须转正斜杠,否则 Tcl 吃掉 `\l` `\t`。
|
- OpenOCD `program`/`dump_image` 的文件路径必须转正斜杠,否则 Tcl 吃掉 `\l` `\t`。
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ _Min_Heap_Size = 0x200; /* required amount of heap */
|
|||||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
_Min_Stack_Size = 0x400; /* required amount of stack */
|
||||||
|
|
||||||
/* Memories definition */
|
/* Memories definition */
|
||||||
/* 双固件布局:FW_A 运行槽 0x08002000~0x0800AFFF(36K,OTA/Ymodem 接收区),
|
/* FW_B 保底槽布局:0x0800B000~0x0800FC00 共 19K,末 8B(0x0800FBF8 起)为 B 记录
|
||||||
* 0x0800B000 起为 FW_B 出厂保底槽(OTA 不可擦写),LENGTH 上限防止溢出 B 槽 */
|
* {magic16,pages16,crc16,2B 保留},由打包工具写入,链接区上限 = 槽 - 8B = 0x4BF8 */
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
FLASH (rx) : ORIGIN = 0x08002000, LENGTH = 36K
|
FLASH (rx) : ORIGIN = 0x0800B000, LENGTH = 0x4BF8
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ GD32E230F8(64KB Flash)采用与 CeramixNano-MB 相同的双固件(出厂
|
|||||||
|
|
||||||
| 区域 | 地址范围 | 说明 |
|
| 区域 | 地址范围 | 说明 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Bootloader | `0x08000000` - `0x08001FFF`(8KB,页 0~7) | **专属分支 `bootloader_CeramixNano_EDDY`**(V0.1.0,4,040B,LED=PB1,Ymodem 每烧录一包翻转一次;与 MB 分支并列、版本独立编号)——启动判定链 + RS485 Ymodem OTA;PA14 不占用,升级会话期间 SWD 可用 |
|
| Bootloader | `0x08000000` - `0x08001FFF`(8KB,页 0~7) | **复用 CeramixNano-MB 板 BL**(V0.1.0,4,044B)——RS485 引脚/波特率/DE 方案完全一致;启动判定链 + RS485 Ymodem OTA |
|
||||||
| FW_A 运行槽(本仓库 dev/main) | `0x08002000` - `0x0800AFFF`(36KB,页 8~43) | 唯一 OTA/Ymodem 接收区;链接 `ORIGIN=0x08002000, LENGTH=36K`(上限防溢出 B 槽);槽尾锚点 A 记录 @`0x0800AFFC` |
|
| FW_A 运行槽(本仓库 dev/main) | `0x08002000` - `0x0800AFFF`(36KB,页 8~43) | 唯一 OTA/Ymodem 接收区;链接 `ORIGIN=0x08002000, LENGTH=36K`(上限防溢出 B 槽);槽尾锚点 A 记录 @`0x0800AFFC` |
|
||||||
| FW_B 出厂保底槽(release/golden 分支) | `0x0800B000` - `0x0800FBFF`(19KB,页 44~62) | 出厂救援固件(版本冻结 V1.0.2),OTA 永不擦写;B 记录 @`0x0800FBF8` |
|
| FW_B 出厂保底槽(release/golden 分支) | `0x0800B000` - `0x0800FBFF`(19KB,页 44~62) | 出厂救援固件(版本冻结 V1.0.2),OTA 永不擦写;B 记录 @`0x0800FBF8` |
|
||||||
| 末页标志页 | `0x0800FC00` - `0x0800FFFF`(1KB,页 63) | legacy 标志 `0xEEEE` @`0x0800FFFC` |
|
| 末页标志页 | `0x0800FC00` - `0x0800FFFF`(1KB,页 63) | legacy 标志 `0xEEEE` @`0x0800FFFC` |
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
#define __HXTAL (HXTAL_VALUE) /* high speed crystal oscillator frequency */
|
#define __HXTAL (HXTAL_VALUE) /* high speed crystal oscillator frequency */
|
||||||
#define __SYS_OSC_CLK (__IRC8M) /* main oscillator frequency */
|
#define __SYS_OSC_CLK (__IRC8M) /* main oscillator frequency */
|
||||||
|
|
||||||
#define VECT_TAB_OFFSET (uint32_t)0x2000 /* vector table base offset */
|
#define VECT_TAB_OFFSET (uint32_t)0xB000 /* vector table base offset, FW_B slot 0x0800B000 */
|
||||||
|
|
||||||
/* select a system clock by uncommenting the following line */
|
/* select a system clock by uncommenting the following line */
|
||||||
//#define __SYSTEM_CLOCK_8M_HXTAL (__HXTAL)
|
//#define __SYSTEM_CLOCK_8M_HXTAL (__HXTAL)
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
# Project basic info
|
# Project basic info
|
||||||
|
# golden 出厂保底线:版本号冻结 V1.0.2(保底判定值 v26.1.0.2,永不再用于 OTA 升级包)
|
||||||
|
# 此分支改动不得合回 dev/main(链接基址 0x0800B000 为 B 槽专属)
|
||||||
set(PROJECT_NAME "CeramixNano-EDDY")
|
set(PROJECT_NAME "CeramixNano-EDDY")
|
||||||
set(BOARD_TYPE_CODE 26)
|
set(BOARD_TYPE_CODE 26)
|
||||||
set(VERSION_MAJOR 1)
|
set(VERSION_MAJOR 1)
|
||||||
set(VERSION_MINOR 0)
|
set(VERSION_MINOR 0)
|
||||||
set(VERSION_PATCH 4)
|
set(VERSION_PATCH 2)
|
||||||
set(VERSION "V${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
set(VERSION "V${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
||||||
string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
|
string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
|
||||||
|
|
||||||
@@ -11,7 +13,7 @@ string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
|
|||||||
# Example: HW-IIC_APP / HW-IIC_Bootloader
|
# Example: HW-IIC_APP / HW-IIC_Bootloader
|
||||||
# set(BUILD_VARIANT "AutoDetectDriveCurrent")
|
# set(BUILD_VARIANT "AutoDetectDriveCurrent")
|
||||||
# set(BUILD_VARIANT "HW-IIC")
|
# set(BUILD_VARIANT "HW-IIC")
|
||||||
set(BUILD_VARIANT "APP")
|
set(BUILD_VARIANT "golden")
|
||||||
|
|
||||||
# 其它自定义宏
|
# 其它自定义宏
|
||||||
add_definitions(-DBUILD_VARIANT=${BUILD_VARIANT})
|
add_definitions(-DBUILD_VARIANT=${BUILD_VARIANT})
|
||||||
|
|||||||
Reference in New Issue
Block a user