什么是MCU的BootLoader?

本文介绍了BootLoader在嵌入式MCU中的作用,它是如何在无需烧录器的情况下通过按键或UDS协议进行程序升级的。讲解了BootLoader与StartupCode的区别,以及市场常见的BootLoader如Redboot、ARMboot和U-Boot。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 什么是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
    参考:
  1. STM32F0单片机快速入门三 MCU启动过程
  2. 汽车ECU的Bootloader升级过程分析
  3. 什么是Bootloader?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值