一、 什么是BootLoader?
对于嵌入式MCU来说,当产品稳定投产,程序烧录后,MCU我们一般是看不到的,因为外面被外壳等材料覆盖,那后期产品需要升级,无法使用烧录口的情况下,我们怎么解决问题了? BootLoader就是为了解决这样的问题来设计的,它相当于一个引导程序。这段程序比较特殊,他可以通过一定方式,比如用按键触发、或者UDS协议指令(汽车行业)触发进入运行,BootLoader运行后,他可以通过串口接收新的代码并写入Flash,从而在不能使用烧录器的情况下,升级程序,如下流程图所示:
二、BootLoader是上电就运行的吗?
之前一直以为BootLoader是MCU里面上电就运行的程序,后面才发现其实并不是。 其实MCU里面有一段代码叫“Starup Code”即启动代码。它在MCU上电或复位后最先执行。主要完成堆栈指针的设置,复位向量的获取和加载,然后初始化变量,最后跳转到用户代码。
当芯片复位,或从Standby低功耗模式唤醒时:
- 如果引脚BOOT0是被拉低的,将映射到Flash memory。这里是常用的代码运行模式;
- 如果引脚BOOT0是拉高的,且nBOOT为1,将映射到System memory,进入BootLoader模式
- 如果引脚BOOT0是被拉高的,且nBOOT1为0,将映射到SRAM。
注:nBOOT1为Flash寄存器中的一位。 以上可以直接阅读参考1,博主写的很好很全面。
三、BootLoader的种类
BootLoader严重依赖硬件实现,而嵌入式环境硬件环境变化太多了,不可能存在一个统一的BootLoader,所以市场上有很多不同类型的BootLoader存在
- Redboot
Redboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。 - ARMboot
ARMboot是一个ARM平台的开源 固件项目,它特别基于PPCBoot,一个为PowerPC平台上的系统提供类似功能的姊妹项目。鉴于对PPCBoot的严重依赖性,已经与PPCBoot项目合并,新的项目为 U-Boot。 - U-Boot
U-Boot是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot,和其他一些arch的Loader合称U-Boot。2002年12月17日第一个版本U-Boot-0.2.0发布,同时PPCBoot和ARMboot停止维护。 - Blob
Blob(Boot Loader Object)是由Jan-Derk Bakker and Erik Mouw发布的,是专门为StrongARM 构架下的LART设计的Boot Loader。 详细内容可以查看参考3 参考:
- STM32F0单片机快速入门三 MCU启动过程
- 汽车ECU的Bootloader升级过程分析
- 什么是Bootloader?
|