IAP_2_IAP执行流程、实现思路

1、IAP的程序执行流程

被更新的单片机要有两个程序,一个是“Bootloader”,一个是“APP”。

首先执行“Bootloader”,用来决定是否更新APP,接收串口数据,然后跳转到真正想运行的“APP”,具体运行流程图如下。

  1. 从栈顶地址开始,从“中断向量表1”找到复位中断,处理复位中断函数;
  2. 执行IAP的main函数;
  3. 跳转到“中断向量表2”,找到复位中断,处理复位中断函数;
  4. 执行APP的main函数;

IAP_2_IAP执行流程、实现思路

2、关于bin文件

2.1、为什么要用bin文件

一般情况下,我们生成的是hex文件,hex文件是以ASCII文本形式保存编译后的二进制文件信息,使用各种烧录软件实际上就是把这些工具把hex文件转换成二进制的bin文件,烧录到单片机当中。

在IAP更新程序的时候,我们就相当于这些烧录软件,直接使用bin文件,跳过了hex转成bin文件的这一步。

hex文件包含了地址和校验的信息,利用hex文件加上烧录工具,会更加安全。

2.2、bin文件的存储和发送方式

可以用电脑的串口发送软件(有某些协议的上位机),也可以用单片机的串口发送。

如果用电脑来存储bin文件,无疑是非常简单的,不过发送bin文件的话,更新程序的时候就要带电脑,还要在电脑上进行操作,不太方便。

如果使用单片机的话,需要事先把bin文件存在Flash当中,或者SD卡当中,发送就通过串口。

3、IAP方案简介

用一个STM32F103做为存储和发送bin文件的地方,用的是正点原子的Mini板,有屏幕,方便显示信息,也有例程可以修改来用,就叫做“STM32_TX”。

另一个STM32F103就是需要被升级的了,不妨称为“STM32_RX”。

3.1、把bin文件存到STM32当中

把STM32外加的Flash或SD卡模拟成U盘,利用文件系统,当插入USB的时候,就相当于插入U盘,这时候把bin文件直接复制粘贴到U盘中就可以了。

需要用到的知识:读写外部Flash、读写SD卡、文件系统、USB等。

3.2、把bin文件发送出去

利用STM32串口,要考虑到分包、校验、重发机制。

分包的原因:一个简单的程序也往往是几十K字节的,一次性发送,接收端的SRAM没有那么大的缓存,所以需要将bin文件分成一个个数据包,比如1K大小。

校验:打算就先用CRC8校验。

重发:超时重发,出错重发,重发次数最大为10.

3.3、接收端的处理

每次发送1K字节,接收方接收1K字节,校验有误申请重发,校验无误之后写入自己的内部Flash。

当整个bin文件全部接收并写入完成之后,跳转到APP执行。