STM32 远程升级(ISP / IAP)

(一)ST官方flash loader 软件串口方式
使用官方flash loader demo软件通过串口方式(ISP)下载工程HEX文件,下载前需要将硬件BOOT引脚配置成系统存储器启动模式,即BOOT0为1,BOOT1为0,下载完毕后,需将引脚配置成主闪存存储器启动模式,即BOOT0为0,BOOT1为任意,然后上电运行。
关于系统存储器启动模式简介(ISP方式):需要将BOOT管脚配置成上电从System Memory启动,System Memory中有一段BOOTLOADER来接收串口(对于STM32F103C8T6来说,为USART1)来的数据,把它们烧写到FLASH中。(内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程)。

(二)IAP方式
1.基本概念
(1) IAP
IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。
(2) Bootloader
在上述IAP的概念中,bootloader就是其第一个项目程序。bootloader主要实现的功能:从串口、USB等媒介接收数据;存储和搬运数据; 程序跳转等功能。
(3) App程序
对IAP概念中,对第二个项目代码的一种称呼。
(4) Ymodem
YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议。
Ymodem一帧数据的结构见下图:

第一字节
第二字节
第三字节
Data[0..128]/
Data[0..1027]
倒数第二字节
最后一个字节
SOH/STX
编号
编号反码
有效数据区
CRC校验高位
CRC校验低位
图1. Ymodem一帧数据的结构
解释:
第一字节:1.为SOH,有效数据包大小为128字节;
2.为STX,有效数据包大小为1024字节。
第二字节:数据包的编号,第一帧数据,编号为00。
第三字节:数据包编号的反码,第一帧数据,为FF。
有效数据区:根据第一个字节的内容,有效数据区大小为128字节或1024字节。
倒数第二个字节:CRC校验高位。
最后一个字节:CRC校验低位。
注:参加CRC校验的只有有效数据区。

第一帧数据结构:
SOH 00 FF Foo.cNUL[123] CRC(high) CRC(low)
其中:Foo.c为传输文件的文件名;有效数据区的剩余字节用0补足。(就是’\0’).
在超级终端中,在文件名后,还有文件大小的信息。结构为:
SOH00FFFoo.c’\0’+文件字节数+’ ’+’\0’…CRC(high) CRC(low),字节数后为空格。
第二帧,有效数据区内存放的是正式的数据。

Ymodem通信协议:略。
2.实现思路
见https://blog.csdn.net/xinghuanmeiying/article/details/79573065。
参考资料:
ST官方flash loader 软件串口方式下载HEX
http://home.eeworld.com.cn/my/space-uid-348360-blogid-270113.html
Stm32 Bootloader整理
http://www.eeworld.com.cn/mcu/article_2017020533637.html

STM32 IAP 在线升级详解
https://blog.csdn.net/eagle11235/article/details/53983488
STM32串口IAP(YModem)
【STM32 远程升级(ISP / IAP)】https://blog.csdn.net/bobbat/article/details/45061413

    推荐阅读