在嵌入式系统中,BootLoader(引导加载程序) 是系统上电后首先执行的程序,主要用于系统启动和固件升级。它的作用至关重要,既是系统的“启动引导者”,也是固件更新的重要保障。
BootLoader 定义
BootLoader 是一个运行在嵌入式设备上的小程序,位于系统的最底层,通常存储在 Flash 的特定区域。它的主要任务包括:
- 硬件初始化:配置时钟、存储器、引脚、外设等。
- 加载主程序:将用户应用程序加载到 RAM 并跳转执行。
- 固件升级:支持本地或无线方式的固件更新,如 UART、CAN、SPI、I2C 或 OTA(Over-The-Air)等。
- 系统恢复:在系统主程序损坏时,可以引导恢复程序执行。
工作原理
嵌入式设备在上电复位后,CPU 会从一个固定的地址开始执行程序(通常是 Flash 的 0x00000000 地址)。
- 此时,BootLoader 程序首先运行,它会进行一系列初始化操作,并判断是否需要执行特殊任务(如固件升级)。
- 如果不需要升级,则跳转到主程序的入口地址,运行用户应用程序。
启动流程图
1 | +---------------------------+ |
固件升级
BootLoader 支持对系统固件进行升级,这在嵌入式开发中非常重要。例如:
- 本地升级:通过串口(UART)、USB、SD 卡等传输新固件。
- 无线升级(OTA):通过蓝牙、Wi-Fi 等通信方式远程传输固件。
实现步骤
- 接收新固件:通过通信接口接收新固件数据(分包接收)。
- 数据校验:对接收到的数据进行校验(如 CRC16 校验)以确保完整性。
- 擦除 Flash 区域:擦除旧的程序存储区。
- 写入新固件:将接收到的数据写入 Flash。
- 重启执行新固件:升级完成后重启 MCU,BootLoader 跳转执行新程序。