初识BootLoader(二)

BootLoader的功能

BootLoader,通常是驻留在ECU非易失性存储器(NVM,None Valitale Momory)中的一段程序加载代码,每次ECU复位后,都会运行bootloader。它会检查是否有来自通信总线的远程程序加载请求,如果有,则进入bootloader模式,建立与程序下载端(通常为PC上位机)的总线通信并接收通信总线下载的应用程序、解析其地址和数据代码,运行NVM驱动程序,将其编程到NVM中,并校验其完整性,从而完成应用程序更新。如果没有来自通信总线的远程程序加载请求,则直接跳转到应用程序复位入口函数,运行应用程序。

BootLoader的作用

BootLoader软件实际包含了Boot和Loader两部分,Boot功能就是从BootLoader软件的起始地址开始运行,初始化嵌入式系统运行的最小配置,如时钟、中断、看门狗等功能。Loader功能就是在Boot软件运行起来后,将需要更新的应用程序加载刷写到指定的应用程序地址区间。嵌入式系统的软件都是运行在MCU中的,在软件开发和调试之初都是可以通过调试工具进行刷写更新软件。在嵌入式系统软件集成的产品中后,考虑到产品使用的场景,需要兼顾防水、防尘等相关要求,嵌入式系统的硬件都会密封的外壳之中。如果后续产品需要升级,优化嵌入式软件,这个时候就不能把产品外壳拆除使用调试工具进行刷写。此时就可以通过BootLoader,让嵌入式系统跳转运行在BootLoader中,然后通过BootLoader刷写新的软件。

BootLoader对MCU内存分配要求

BootLoader和应用软件是分配在MCU的不同区域的内存中,同时MCU在出厂的时候还可能自带BootLoader,在产品级软件开发时还有标定数据以及其他一些配置信息需要保存,也需要划分占用一定的内存空间。以STM32F103平台的MCU为例,根据使用需求,划分了一个用户定制开发BootLoader在MCU的内存分配如下:

在0x1FFFF7D6地址开始为MCU的自带BootLoader占用内存空间,所占用的内存为MCU的系统存储器,可以通过Boot配置选择是否激活该功能。如果不使用系统自带的BootLoader,程序默认会从0x8000000的地址开始运行,该地址为MCU的内部Flash起始地址,如果使用了用户定制BootLoader,此时会运行BootLoader的程序。0x8004000为用户程序起始地址,如果使用了标定数据,可以在内部Flash中划分一部分空间用于存储标定数据,该示例中0x800E000为标定数据的起始空间地址。0x20000000为MCU的SRAM空间起始地址。

来源:综合自网络

相关推荐
泥壳AI5 分钟前
[特殊字符] OpenClaw + 飞书集成超详细教程
人工智能·python·深度学习·阿里云·飞书
xifangge202516 分钟前
2026最新教程:Windows 10 部署 OpenClaw 智能体 附带一键修复环境脚本+ 豆包 API
人工智能
尘觉25 分钟前
OpenClaw 入门:本地 AI 助手架构、功能与使用场景说明(2026-3月最新版)
人工智能·架构·openclaw
weixin_4462608530 分钟前
win11本地部署openclaw实操第9集-配置 OpenClaw 连接本地模型参数
人工智能
人工智能AI技术38 分钟前
一人公司(OPC)神器:用C#+OpenClaw搭建7×24自动接单系统,单机实现百万营收闭环
人工智能
yiyu071644 分钟前
3分钟搞懂深度学习AI:实操篇:ResNet
人工智能·深度学习
啊巴矲1 小时前
小白从零开始勇闯人工智能:bert自然语言框架(2)
人工智能·深度学习·bert
冬奇Lab1 小时前
一天一个开源项目(第49篇):Anything to NotebookLM - 多源内容智能处理器,一句话变播客、PPT、思维导图、Quiz
人工智能·开源·资讯
南极星10051 小时前
视觉项目(k230+opencv+yolo)--云台实时追踪项目
人工智能·opencv·yolo