1. Boot Loader基础概念与核心功能
在嵌入式系统开发中,Boot Loader是系统上电后最先执行的程序,相当于计算机的BIOS。它负责硬件初始化、程序加载和系统启动等关键任务。根据使用场景不同,Boot Loader可以分为系统内置型和自定义型两种。
系统内置Boot Loader通常由芯片厂商提供,具有以下标准功能流程:
- 初始化硬件接口(时钟、GPIO、串口等)
- 进入串口监听模式,等待接收程序数据
- 解析接收到的HEX格式文件(Intel HEX或Motorola S-record)
- 提取有效数据并转换为纯二进制格式
- 将二进制数据写入Flash指定地址区域
而自定义Boot Loader则是开发者根据特定需求设计的精简版本,通常省略了HEX文件解析环节,直接接收BIN格式文件。这种设计带来两个显著优势:
- 减少代码体积(节省约20-30%的ROM空间)
- 提高数据传输效率(省去格式转换时间)
实际项目中,当Flash空间紧张或对启动速度有严格要求时,建议优先考虑自定义Boot Loader方案。但需注意,直接使用BIN文件意味着上位机工具也需要相应调整。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Flash存储布局设计要点
2.1 默认存储地址分析
不同Boot Loader在Flash中的存储位置有严格规定:
| 类型 | 典型存储地址 | 特点说明 |
|---|---|---|
| 系统内置Boot | 0x1FFF F000 | 厂商固化,不可修改 |
| 自定义Boot | 0x0800 0000 | 用户可编程,需考虑覆盖风险 |
关键问题在于:当自定义Boot Loader存储在Flash起始地址(0x0800 0000)时,如果通过该Boot Loader更新应用程序,新程序写入可能会覆盖Boot Loader本身,导致系统无法再次启动。
2.2 分区解决方案
为解决上述问题,通常采用AB分区方案:
- B区(Boot区):必须放在Flash起始地址(0x0800
