Files
stair56e_uart/component/boot2/doc/boot 说明.md
T
2026-08-05 19:07:52 +08:00

83 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Boot2
## 1.二级 boot
由于 XIPexecuted in place)本地执行。芯片采用这种系统,可以不用将执行代码拷贝 到 SRAM,而直接在代码的存储空间直接运行。但是芯片不能直接跑 XIP,因此需要借助二级 Boot 进行 XIP 配置再跳转启动。
在 OTA 中,二级 Boot 引导启动的程序可以是 RAM 启动的程序,二级 boot 要对主要对启动参数进行解析,并判断程序状态进行操作。
目前二级 boot 主要有 XIP_Dual_boot2、XIP_Quad_boot2、BLE_OTA_boot2 和 2.4g_OTA_boot2。
## 1.1 XIP_Dual_boot2& XIP_QUAD_boot2
### 1.1.1 XIP_Dual_boot2& XIP_QUAD_boot2 使用方法
选择 xip_dual&xip_quad 工程,点击编译![Alt text](20230807141931.png)
编译后生成 boot2 文件,修改名称为 xip_dual\xip_quad,放入相应的 XIP 工程,重新编译工程。
### 1.1.2 XIP_Dual_boot2& XIP_QUAD_boot2 Flash 分区
<img src="20230804164330.png" width="400" />
说明:
- 芯片上电,一级 Boot 需要在 Flash 中找到 0 地址的 data 段,然后将 Flash 中的 data 数据拷贝到 RAM 中,在二级 Boot 里完成 XIP 的配置并跳转。
- 在 XIP_Dual_boot2/XIP_QUAD_boot2 中,M0 用的是 XIP_Dual_boot2M4 用的是 XIP_QUAD_boot2,两个的不同点在于 XIP 模式的配置(详细可参考 fmc_xip.pdf),M0 使用的两线模式,M4 使用的是四线模式。
- 第一个 Sector 存放二级 Boot,程序在 Flash 的存放地址为 0x00001000,启动地址为 0x11001000。
- XIP_Dual_boot2 和 XIP_Quad_boot2,默认是无法修改 APP 的启动地址。
## 1.2 BLE_OTA_boot2
在 BLE_OTA 升级中使用的二级 BOOT,主要作用是读取启动参数,判断程序状态并对相应的程序进行启动、擦写、覆盖等操作,BLE_OTA_boot2 不止可以跳转启动 XIP 程序也能跳转启动 RAM 程序。
### 1.2.1 BLE_OTA_boot2 使用方法
选择 xip_dual&xip_quad 工程,点击编译![Alt text](20230807142436.png)
编译后生成 boot2 文件,放入相应的 XIP 工程,重新编译工程。
### 1.2.1 Flash 分区
![Alt text](20230804171957.png)
- MO 默认 B 区地址为 0x10800
- M4 默认 B 区地址为 0x1b000
- B 区地址可以通过 ota bin bat 文件修改
### 1.2.2 Ble_Ota_boot2 启动流程
![Alt text](20230804164517.png)
说明:
- BLE_OTA_boot2 默认 APP1 是从 0x00003000 地址开始读取程序数据并运行,也可以通过更改启动参数和存放地址改变 APP 启动地址,APP2 同理。
- 假设 APP1 使用的 XIP 方式,则默认启动地址为 0x11003000,若是读取到 Sram 启动的方式,则默认启动地址为 0x100003000。
- 默认上电先跑二级 Boot,二级 Boot 跳转到 APP1 或者 APP2。
- 在 BLE_OTA 升级中,主程序会把 0x00002000 地址的启动参数覆盖,用看门狗重新启动 Boot2,Boot2 将倒数第三个扇区的启动参数备份进行 CRC32 校验值比对,来判断是否进行程序的升级覆盖。
升级完毕后,会将 0x00002000 地址的启动参数覆盖到倒数第三个扇区。
### 1.2.3 启动参数详解
```c
#define PARAM_CNT 5
typedef struct
{
uint32_t status; /*程序状态位*/
uint32_t softver; /*软件版本*/
uint32_t acheck; /*A区CRC*/
uint32_t aaddr; /*A区地址,程序存放的地址*/
uint32_t alen; /*程序大小*/
uint32_t bcheck; /*Backup区CRC*/
uint32_t baddr; /*Backup区地址*/
uint32_t blen; /*Backup区程序大小*/
uint32_t aloadaddr;/*A区启动地址*/
uint32_t bloadaddr;/*Backup区启动地址*/
uint32_t RESERVED0[2];
} param_unit;
typedef struct
{
param_unit paramunit[PARAM_CNT];/* 程序条目,最大可存放5个程序*/
uint32_t ParamCrc32;/*启动参数CRC*/
uint32_t RESERVED1[3];
} sboot_message;
```