feat(profile): 新增内置 CeramixNano_EDDY_Dual_FW——EDDY 板双固件布局(与 MB 逐字节相同,BL 复用同一 bin)

This commit is contained in:
2026-10-24 21:15:16 +08:00
parent 5c46441b29
commit b8de2dce3c
+21 -3
View File
@@ -10,7 +10,7 @@ fw_pack — GD32E230 双固件打包公共库 (CLI 与 FlashTool GUI 共用)
锚点擦除态 → A 向量非法 → 落 B 记录校验 → 跳出厂固件) 锚点擦除态 → A 向量非法 → 落 B 记录校验 → 跳出厂固件)
*.md5.txt 产物 MD5 清单 + 布局摘要 *.md5.txt 产物 MD5 清单 + 布局摘要
规则与 BL dev_fact 侧 (v5.1) 逐字一致: 规则与双固件 bootloader 侧逐字一致:
- CRC-16/XMODEM (poly 0x1021, init 0x0000, 不反转, 无 xorout), - CRC-16/XMODEM (poly 0x1021, init 0x0000, 不反转, 无 xorout),
自检向量 b"123456789" -> 0x31C3; 自检向量 b"123456789" -> 0x31C3;
- A 包: 补 0xFF 至整 N 页; body 恰整页或 余量 < 记录长 R -> 向后扩 1 页; - A 包: 补 0xFF 至整 N 页; body 恰整页或 余量 < 记录长 R -> 向后扩 1 页;
@@ -197,7 +197,7 @@ class SlotSpec:
# ═══════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════
BUILTIN_PROFILES = { BUILTIN_PROFILES = {
# CeramixNano-MB v5.1 双固件 BL 的布局 (BL dev_fact@512bf7a) # CeramixNano-MB 双固件 bootloader 的布局
'CeramixNano_MB_Dual_FW': { 'CeramixNano_MB_Dual_FW': {
'profile': 'CeramixNano_MB_Dual_FW', 'profile': 'CeramixNano_MB_Dual_FW',
'chip': 'GD32E230F8', 'chip': 'GD32E230F8',
@@ -214,6 +214,24 @@ BUILTIN_PROFILES = {
'flag': {'page': 'last', 'addr': '0x0800FFFC', 'value': '0xEEEE'}, 'flag': {'page': 'last', 'addr': '0x0800FFFC', 'value': '0xEEEE'},
'crc': 'xmodem', 'crc': 'xmodem',
}, },
# CeramixNano EDDY (LDC1612) 双固件布局——Flash 分配与 MB 完全相同;
# BL 直接复用 bootloader_CeramixNano_MB 同一 bin(RS485 引脚/波特率一致,仅 LED 引脚差异)
'CeramixNano_EDDY_Dual_FW': {
'profile': 'CeramixNano_EDDY_Dual_FW',
'chip': 'GD32E230F8',
'flash_base': '0x08000000',
'flash_size': '64K',
'page_size': 1024,
'bl': {'addr': '0x08000000', 'size': '8K'},
'slot_a': {'addr': '0x08002000', 'size': '36K',
'anchor': 'slot_end-4',
'record': '{pages16@+0, crc16@+2}'},
'slot_b': {'addr': '0x0800B000', 'size': '19K', 'fixed_slot': True,
'record': '{magic16@+0=0xC0DE, pages16@+2, crc16@+4}',
'record_addr': 'slot_end-8'},
'flag': {'page': 'last', 'addr': '0x0800FFFC', 'value': '0xEEEE'},
'crc': 'xmodem',
},
# 无保底槽的单槽布局 (旧 BL 升级过渡 / 无 B 槽工程) # 无保底槽的单槽布局 (旧 BL 升级过渡 / 无 B 槽工程)
'f8_single_slot': { 'f8_single_slot': {
'profile': 'f8_single_slot', 'profile': 'f8_single_slot',
@@ -555,7 +573,7 @@ def build_full(profile, bl_data, a_pack, b_pack=None):
def build_factory(profile, bl_data, b_pack): def build_factory(profile, bl_data, b_pack):
"""工厂烧录镜像: BL + B 满槽(含记录) + flag, **无 A 包、无锚点**。 """工厂烧录镜像: BL + B 满槽(含记录) + flag, **无 A 包、无锚点**。
上电判定链(v5.1 BL): A 锚点为擦除态(0xFFFF...) → legacy flag + A 向量校验 上电判定链(双固件 BL): A 锚点为擦除态(0xFFFF...) → legacy flag + A 向量校验
(A 槽全 0xFF → 向量非法) → 落 B 记录 {magic|pages|crc} 校验 → 跳出厂固件; (A 槽全 0xFF → 向量非法) → 落 B 记录 {magic|pages|crc} 校验 → 跳出厂固件;
后续 OTA 写入 A 槽后即切运行固件。 后续 OTA 写入 A 槽后即切运行固件。
""" """