打印
[APM32F1]

APM32F103_IAP的简单实现_4 固件传输

[复制链接]
821|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WuKaiLi|  楼主 | 2022-10-10 23:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前言
最近拿到了一块APM32F103VC的MINI开发板,在学习了一段时间后发现其有非常丰富的外设资源,主频能达到96Mhz。最近在项目中使用到了IAP(In Application Programming)功能,特来评估一下APM32F103的IAP实现方式。
在应用编程IAP(In-Application Programming)是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写操作,甚至可以控制对某段、某页甚至某个字节的读/写操作,这为数据存储和固件的现场升级带来了更大的灵活性。
话接上回,我们学习了如何进行对目标Flash进行编程后,基本已经完成了IAP的知识储备,随时可以完成IAP功能。打个比方,会Flash编程,就是会向一个池塘里面倒水了,但是现在有一个问题,我们往池塘倒的水从哪里来?即我们的程序数据从那里给到我们。
那我们本章节就我们程序的来源以及处理的一些方式进行一起探讨。
1 “水”的来源
我们的固件可以保存在云端,也可以保存在我们的PC上。这个主要取决于我们的应用场景。若我们的产品主要在客户的手上,为了考虑客户的使用便捷性,将固件保存在云端,然后在一个合适的时间推送至我们的产品进行升级,这是一种方式。若考虑到产品的稳定性,那我们可以要求客户一定要在特定的场景下进行固件升级,如需要接入升级的主机设备(如PC),才能进行固件升级。

2 承载“水”的“路径”
既然我们决定了我们程序的下发的源头,我们一般也会选择使用那种方式了传输我们的固件数据。就像运水到我们的池塘,是用空运还陆运还是海运等方式。如远程升级的方式可以选择以太网、WIFI、蓝牙等方式。若使用有线传输的方式我们可以选择USART、I2C、SPI、USB等。
升级方式的选择也受限于我们的主控MCU,如APM32F103VCT6就没有WIFI、蓝牙等功能,所以我们可以选择USART、I2C、SPI、USB等,若我们选择APM32F407/107我们也可以选择使用以太网。
3 运输“水”的方式
就像运水到我们池塘,我们选择使用陆运的方式后,依旧可以继续选择使用的是小汽车运,还是货车运。不同的运输方式会有不一样的要求,这就是我们选择传输固件的“协议”。
就比如我们选择使用USART的方式进行固件升级,那我们也可以选择使用Xmodem协议,还是Ymodem,或者是我们自创的协议。
而这个协议是保证我们固件传输数据的准确的。怎么说呢?比如带校验码、环回重复发送等功能。
4 小结
说了那么多,总结下来就是我们在IAP升级过程中,升级使用的通信接口、通信协议也是我们需要关注的。一般而言,通信的接口限制我们的应用场景,通信协议是保证我们在IAP升级过程中固件数据准确的有力保证。

使用特权

评论回复
沙发
saservice| | 2022-11-2 18:39 | 只看该作者
        iap升级一定要用ymodem协议吗

使用特权

评论回复
评论
WuKaiLi 2022-11-2 19:13 回复TA
不一定的,看应用场景。也可以自定义。 
板凳
modesty3jonah| | 2022-11-2 18:59 | 只看该作者
        IAP与ISP的区别 是什么?  

使用特权

评论回复
评论
WuKaiLi 2022-11-2 19:08 回复TA
IAP:在应用中编程,一般为客户在Flash里实现的BootLoader+App模式,主要编程的区域是用户Flash中。 ISP:在系统中编程,一般为使用厂商提供的、保存在系统存储器里面的程序对用户的Flash、ram等区域进行编程。 两者的主要区别在于,使用的方式以及主要程序(BootLoader)的保存位置不同。 
地板
sanfuzi| | 2022-11-2 19:29 | 只看该作者
这个代码应该是兼容stm32的吧。   

使用特权

评论回复
5
kkzz| | 2022-11-2 20:02 | 只看该作者
iap升级可以通过spi通信实现吗

使用特权

评论回复
评论
kkzz 2022-11-15 20:59 回复TA
@WuKaiLi :谢谢。 
WuKaiLi 2022-11-4 09:38 回复TA
可以的,USART、I2C、USB、CAN这些都可以的,本质上是固件的传输即可。 
6
olivem55arlowe| | 2022-11-2 20:49 | 只看该作者
怎么使用APM32F103_IAP写IAP的bootloader和APP

使用特权

评论回复
7
AloneKaven| | 2022-11-4 21:20 | 只看该作者
IAP与ISP类似,但不一样

使用特权

评论回复
8
ulystronglll| | 2022-12-2 23:06 | 只看该作者
这个有案例可以参考吗?              

使用特权

评论回复
9
adolphcocker| | 2022-12-3 12:26 | 只看该作者
IAP可以网络传输的吗?              

使用特权

评论回复
10
rosemoore| | 2022-12-3 12:55 | 只看该作者
如何校验发送固件的正确性呢?              

使用特权

评论回复
11
uptown| | 2022-12-3 13:46 | 只看该作者
是需要修改BootLoader的吧。

使用特权

评论回复
12
febgxu| | 2022-12-3 14:39 | 只看该作者
这个没有完整的设计的吗?              

使用特权

评论回复
评论
WuKaiLi 2022-12-5 23:42 回复TA
有的,请关注后续帖子 
13
Undshing| | 2023-1-3 15:46 | 只看该作者
兼容stm32的芯片吗?

使用特权

评论回复
评论
WuKaiLi 2023-11-20 21:30 回复TA
兼容的 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

37

帖子

1

粉丝