您现在的位置是:首页 >技术交流 >单片机的UART升级固件流程网站首页技术交流

单片机的UART升级固件流程

@@老胡 2024-06-26 14:23:27
简介单片机的UART升级固件流程

随着技术的发展,单片机的功能和性能得到了越来越多的提升,同时固件的规模和复杂度也在不算的增加,为了保证单片机的正常运行,需要对其固件进行升级。

单片机的烧录方式

单片机的烧录程序方式有三种:ISP、ICP、IAP

ISP In-Systen Programming 系统编程

ISP是使用引导程序BootLoader加上外围的UART/USB等接口进行烧录。串口下载程序后,由系统存储器启动方式运行内置的BootLoader,将程序写入到主存储区内,重启后从主存储器区启动程序。简单说ISP模式时通过串口将固件下载到芯片内部进行升级

ICP In-Circuit Programming 电路编程

ICP使用SWD/JTAG接口,使用SWD模式下载程序,主闪存存储器的启动方式,将程序在主存储区写入。重启后也直接从这启动程序。

IAP In-Application Programming 应用编程

应用编程,MCU可以在系统中获取新代码并对自己重新编程,也即是用程序来改变程序。IAP是利用自己的程序代码实现升级程序(新的APP),从外部接口(可以是串口、I2C、SPI、网口等等)写入到flash中通过flash读写操作,将新的APP覆盖到原来的APP程序在重新从新的APP入口位置启动我们的程序,同时也负责IAP代码的修改和迭代。
IAP将主存储区分为两个区域,一个区域存放这开发则自己设计的BootLoader程序,另一个区域存储真正需要运行的APP程序,即内部flash=Bootloader+APP程序。简单说IAP是将固件下载到芯片外部的存储器,然后通过程序控制将固件写入到芯片内部进行升级

一般来说,固件升级会使用IAP的方式

BootLoader 引导程序

BootLoader是引导程序,它的作用是启动正式的APP应用程序。BootLoader包含两个部分,APP下载程序(固件升级)和跳转至APP程序。BootLoader=APP下载程序(固件升级)+跳转APP程序。所以内部flash=APP下载程序+跳转APP程序+APP程序

将flash划分为4个区域:BootLoader区、APP区、备份区、参数区。其中APP区为正在运行的程序,
备份区为下载的新固件存放区,更新固件也就是把备份区的赋值到APP区即可

串口下载的重难点

  1. 需要一个能匹配发送固件到板子的串口上位机
  2. 需要将更新的固件放在客户可以下载的公共区域
  3. 校验接收到的固件包是否是完整的

启动流程

在这里插入图片描述

基于IAP设计的STM32程序启动流程

  1. 芯片复位后,从0x08000004地址中取出复位中断向量的地址,并且跳转到复位中断服务程序。
  2. 运行完复位中断程序,跳转到IAP的main函数
  3. 如图的①,在执行完IAP后(将新的APP代码写入预先定义的flash,新程序的复位中断向量的其实地址为0x08000004+N+M),跳转到写入新的程序的复位向量表。获取新程序的复位中断向量的地址
  4. 跳转执行新程序的复位中断服务程序,随后跳转到新程序的main程序(如图的②和③),所以这里可以主义到。一个flash有两个中断向量表
  5. 新程序的main是一个死循环函数,main在执行过程中,如果cpu得到一个中断请求,pc指针强制跳转到地址0x08000004中断向量表中
  6. 如图④,程序根据设置的中断向量表偏移量,跳转到对应的中断源新的中断服务程序中
  7. 如图⑤,在执行完中断服务程序之后,程序返回main函数继续执行(如图⑥)
  8. 程序的设计和跳转动作完成。

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。