我用一张图了解了虚拟串口IAP

  在项目的开发与应用中,尤其是一个设计好的硬件都具备了在线升级功能。所以学习在线升级功能相关知识应该是一个必备的知识

1.通信方式

所谓在线升级通俗的话来将就是只烧写一次程序,通过某种通信方式进行对程序升级或者版本更换或者是换个程序进去。某种通信方式可以是任何单片机所具备的通信方式,可以是串口,usb,iic,网口,wifi等等。
接下来说的是通过USB虚拟串口进行固件升级。串口升级可以在网上找到demo,但是通过串口升级会增加一个外设在你的板子上,占用空间大了不说,传输速度还有限制。所以推荐用其他通方式,当然这个是一通百通的,掌握一种方法,其他的自然也就熟练了。

2.基本概念

首先提出一个概念,在线升级实际上是两个程序。一个程序是bootloader程序,另一个程序是app程序。在板子上最开始烧进去的是bootloader程序,这个程序是我们拿来进行升级操作用的程序。而APP程序则是实际的应用程序,实现具体的功能什么的都靠他来执行。

3.升级流程

在线升级流程
1) 程序的运行是从我们设置的地址开始执行的,如上图来说这个程序是从0x08000000开始执行,上电以后从FLASH的栈顶地址+4的位置也就是中断向量表开始,先复位中断向量表。
2) 执行完复位操作后程序转跳到main函数执行,到main函数中的升级程序执行,main函数首先判断是否执行升级操作,若执行,上位机(一般来说是PC机)通过一种通信方式(虚拟串口)将程序生成的bin文件发送给单片机,若不执行则直接进入原有的app程序。
3)单片机将bin文件接收到缓冲区,再从缓冲区搬到flash指定地址,执行跳转到APP程序的命令之后,再转跳到我们设定好的app程序起始地址。然后再进行app程序的复位中断向量表,复位完之后跳到app程序的main函数。升级完成

4.总结

最后再总结一下就是:
1.复位bootloader的中断向量表
2.执行bootloader的main函数
3.bin文件发送与接收
4.将bin文件写到FLASH指定区域
5.执行程序的转跳
6.转跳后复位APP的中断向量表
7.执行APP的main函数
这就是一个完整的在线升级流程。接下来的一些关于升级程序的一些细节会在之后的文章提到。

发布了3 篇原创文章 · 获赞 2 · 访问量 117

猜你喜欢

转载自blog.csdn.net/cs111211/article/details/105142049