学习依据的源文链接:STM32 OTA应用开发——自制BootLoader
前言
什么是OTA?
OTA是“Over-the-Air”(空中升级)的缩写,指的是通过无线通信网络(如Wi-Fi、蓝牙、LoRa等)对嵌入式系统进行远程升级或更新。
在嵌入式系统中,OTA技术可以用于更新固件、软件或配置文件等。通过OTA技术,用户可以在不需要物理接触设备的情况下,对其进行升级和更新,从而提高系统的可靠性、安全性和灵活性。
----------我的理解:
所谓的OTA其实就是通过一些无线通信协议的方式,向嵌入式系统发送应用程序(以下简称APP)和升级指令,再由单片机设备上的BootLoader完成:接收新APP---擦除旧APP---写入新APP---跳转到新APP执行 的过程;
这个demo的实际上是通过USB的连接实现上述的APP升级过程,虽然有线连接不能严格称做OTA,但是二者的差异实际上只是不同(有线与无线)的通信传输过程,主要是学习程序升级的流程,故下文也将USB升级过程视为OTA升级;
什么是BootLoader?
BootLoader是一段程序,通常位于嵌入式系统的非易失性存储器(如Flash)中,用于在系统启动时加载和运行操作系统或其他应用程序。
在嵌入式系统中,BootLoader通常是一个小型的程序,主要负责以下几个方面的工作:
- 初始化硬件环境:BootLoader需要初始化硬件环境,包括CPU、存储器、外设、时钟等,以便系统能够正常运行。
- 加载操作系统或应用程序:BootLoader需要从存储器中加载操作系统或应用程序,并将控制权转交给操作系统或应用程序。
- 检查和修复系统错误:BootLoader需要检查系统的状态和完整性,以确保系统能够正常运行。如果发现系统错误,BootLoader需要尝试修复或恢复系统。
- 提供调试和测试功能:BootLoader可以提供调试和测试功能,例如单步执行、断点调试、查看寄存器状态等,以方便开发人员进行调试和测试。
而这个demo是通过自制bootloader,实现加载应用程序和OTA的功能;
BootLoader的OTA功能工作原理
MCU要实现OTA离不开Bootloader,它是一段引导程序,在OTA过程中,MCU启动时会先运行BootLoader,Bootloader会去判断是否需要升级,如果不需要升级就跳转到APP分区运行用户代码,如果需要升级则先通过一些硬件接口接收和搬运要升级的新固件,然后再跳转到APP分区运行新固件,从而实现OTA升级。

BootLoader的OTA功能常见分区介绍
在没有加入Bootloader之前,MCU内部的flash可以看作一整块分区,我们运行的整个裸机程序都在其中:

第一种分区方式——加入BootLoader,那么原本的Flash分区就可以划分为两个区域,Bootloader和Application,这种分区方式的好处在于既可以OTA升级,App又可以分到较大的空间,缺点是没有存放新固件的区域,需要从外部导入进来,而且一旦传输的过程被异常打断,那么原有的App代码也无法正常运行了:

文章介绍了OTA(空中升级)的概念及其在嵌入式系统中的作用,特别是通过BootLoader实现MCU的固件更新。文中详细讨论了BootLoader的功能,包括初始化硬件、加载应用程序以及OTA升级流程。同时,文章提到了四种不同的内存分区方式,分析了各自的优缺点,并以STM32F103为例,展示了如何为128K内存的设备编写BootLoader,包括内存分区和固件搬运过程。最后,文章提供了BootLoader源码的解析,解释了启动、升级和状态管理的流程。

6830

被折叠的 条评论
为什么被折叠?



