feat(pack): FACTORY 工厂镜像 + 内置 profile 改名 CeramixNano_MB_Dual_FW
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
|
||||
## v2 双固件打包
|
||||
|
||||
### 布局(默认 profile `ceramixnano_mb_v51`,GD32E230F8/64K)
|
||||
### 布局(默认 profile `CeramixNano_MB_Dual_FW`,GD32E230F8/64K)
|
||||
|
||||
```text
|
||||
0x08000000 ┌──────────────────┐
|
||||
@@ -42,40 +42,43 @@
|
||||
### 快速开始
|
||||
|
||||
```bash
|
||||
# 全产物: A 包 → *_UPDATE.bin, B 包 → *_B.bin, 整片 → *_FULL.bin + *.md5.txt
|
||||
# 全产物: A 包 → *_UPDATE.bin, 整片 → *_FULL.bin, 工厂镜像 → *_FACTORY.bin (+*.md5.txt)
|
||||
python gd32e230_firmware_tool.py app_a.bin app_b.bin -b bootloader.bin
|
||||
|
||||
# 只打 A 包(OTA 升级包)
|
||||
python gd32e230_firmware_tool.py app_a.bin
|
||||
python gd32e230_firmware_tool.py app_a.bin --no-full --no-factory
|
||||
|
||||
# 仅 B 底包(产线备用,不拼 FULL)
|
||||
python gd32e230_firmware_tool.py app_b.bin
|
||||
# 只打工厂烧录镜像(BL + B 满槽 + flag, 上电跳 B, 后续 OTA 写 A)
|
||||
python gd32e230_firmware_tool.py app_b.bin -b bootloader.bin
|
||||
```
|
||||
|
||||
输入 bin 从**向量表自动识别** A/B 包(初始 SP 须在 SRAM `[0x20000000,0x20002000]`、
|
||||
复位向量 Thumb 且落在对应槽区间);也可 `--a`/`--b` 显式指定,与向量表判定冲突时报错。
|
||||
写盘后回读复核(重算 trailer/记录/锚点一致才报成功),并输出布局摘要 + 19 项字节校验。
|
||||
写盘后回读复核(重算 trailer/记录/锚点一致才报成功),并输出布局摘要与逐项字节校验
|
||||
(FULL 19 项 / FACTORY 12 项)。
|
||||
|
||||
### 产物
|
||||
|
||||
| 产物 | 用途 |
|
||||
|---|---|
|
||||
| `*_UPDATE.bin` | A 包(补页+trailer),Ymodem/OTA 推送 |
|
||||
| `*_B.bin` | B 底包(满槽+记录),产线单独烧 B 槽备用 |
|
||||
| `*_FULL.bin` | 整片镜像,`@0x08000000` 整片烧录(底包) |
|
||||
| `*.md5.txt` | 全部产物 MD5 清单 + 布局摘要 |
|
||||
| `*_FULL.bin` | 整片镜像(BL + A + B + flag),`@0x08000000` 烧录后直接运行 A(开发/验收底包) |
|
||||
| `*_FACTORY.bin` | **工厂烧录镜像**(BL + B 满槽 + flag,**无 A 内容、锚点擦除态**),上电判定链落 B 跳出厂固件,之后 OTA 写 A |
|
||||
| `*.md5.txt` | 全部产物 MD5 清单 + 布局摘要(挂在 FULL,无 FULL 挂 FACTORY) |
|
||||
|
||||
FULL 镜像自动命名 `<项目>_FULL_A-V<版本>_B-V<版本>[_日期].bin`(从输入文件名推导)。
|
||||
命名从输入文件名推导:FULL 为 `<项目>_FULL_A-V<版本>_B-V<版本>[_日期].bin`,
|
||||
FACTORY 为 `<项目>_FACTORY_B-V<版本>[_日期].bin`。不再单独输出 B 包文件
|
||||
(B 内容已包含在 FULL/FACTORY 中)。
|
||||
|
||||
### 布局 profile(可复用到任意工程)
|
||||
|
||||
内置 `ceramixnano_mb_v51`(默认)与 `f8_single_slot`(无保底槽)。其他工程写一份
|
||||
内置 `CeramixNano_MB_Dual_FW`(默认)与 `f8_single_slot`(无保底槽)。其他工程写一份
|
||||
JSON 即可(保底槽 8K/28K、无保底槽、BL 更大等都支持),工具做完整性校验
|
||||
(分区不重叠、页对齐、总和=flash_size):
|
||||
|
||||
```json
|
||||
{
|
||||
"profile": "ceramixnano_mb_v51",
|
||||
"profile": "CeramixNano_MB_Dual_FW",
|
||||
"chip": "GD32E230F8",
|
||||
"flash_base": "0x08000000",
|
||||
"flash_size": "64K",
|
||||
@@ -103,14 +106,15 @@ python gd32e230_firmware_tool.py app.bin --profile f8_single_slot # 无保底
|
||||
| `bins...` | (可选) | 输入 bin,A/B 包按向量表自动识别 |
|
||||
| `--a BIN` / `--b BIN` | — | 显式指定 A/B 包(与自动识别冲突时报错) |
|
||||
| `-b, --bootloader` | — | BL bin(参与 FULL 拼接;缺省仅警告) |
|
||||
| `--profile` | `ceramixnano_mb_v51` | 内置名或 profile JSON 路径 |
|
||||
| `--profile` | `CeramixNano_MB_Dual_FW` | 内置名或 profile JSON 路径 |
|
||||
| `-o, --output` | 输入所在目录 | **输出目录**(产物自动命名) |
|
||||
| `--no-full` | — | 只出 UPDATE/B 包,不拼 FULL |
|
||||
| `--no-full` | — | 不拼 FULL 整片镜像 |
|
||||
| `--no-factory` | — | 不出 FACTORY 工厂镜像 |
|
||||
|
||||
### 回归测试
|
||||
|
||||
```bash
|
||||
python test_fw_pack.py # 49 项: 规格基准 + 边界 + 篡改检测 + CLI 冒烟
|
||||
python test_fw_pack.py # 55 项: 规格基准 + 边界 + 篡改检测 + CLI 冒烟
|
||||
```
|
||||
|
||||
覆盖 UPGRADE_PLAN_v2.md 第五节全部基准(CeramixNano 1.0.17/1.0.18/V1.0.12
|
||||
|
||||
Reference in New Issue
Block a user