jiaxiaokui 发表于 2018-11-2 15:56:29

为了理解OTA固件升级,可将存储器分为引导加载区和应用程序区。与UART 引导加载程序相比,此处最大的不同是用于从主机接收新固件的接口。OTA固件升级使用一个无线通信接口接收更新后的固件映像。取决于具体应用,逐个接口可能是WiFi、ZigBee、蓝牙或任何其它无线接口。无论何种接口,其过程和基本原理都是相同的。

az158 发表于 2018-11-2 18:32:48

基本就是分成引导和应用程序区,要注意的恐怕也只有中断入口偏移了吧。一般程序会留出一个很大的空间作为升级备份(防止断电和数据中断,我们一般时使用以太网作为传输的)。

dsjsjf 发表于 2018-11-3 13:36:47

IAP,一般需要把MCU内的Flash分为两个区,一个为Bootloader,一个为APP。
我常用的有两种思路,两种各有优缺点。
第一种:在APP运行程序中接收到固件升级指令,跳转到Bootloader中,在Bootloader中接收待更新的固件数据,并且校验其正确性,把数据写到APP区,全部接收完成后,跳转到APP运行。这个方法的好处是,不需要额外的Flash区域,缺点是升级的端口协议相对固定、不自由。
第二种:在APP中接收待更新的固件数据,并且检验其正确性,再把数据写到备份区,完成后,跳转到Bootloader,在Bootloader中对备份区检查,如果有新数据,则把它搬到APP区,最后跳转到APP运行。这个方法的好处是,在APP中接收数据,APP里可以自由更换升级端口,比如串口,CAN,以太网等,应用中使用的什么端口,升级就可使用什么端口,Bootloader中只负责从备份区往APP区搬运数据。缺点就是需要使用和APP空间同样大小的备份区。

页: 1 [2]
查看完整版本: 第二期:进来聊聊在应用编程(IAP)升级固件程序设计流程吧