因为自己对这方面了解甚少,所以感觉很吃力。有几个浅显的疑惑望大神解答一下。
1、升级烧入板子的固件应该是HEX文件还是Bin文件。
OTA升级的话一般是使用BIN文件(干净),HEX文件带些地址信息,最好不要用
2、对于固件存放位置,我们应该怎么控制和设计。
一般OTA升级包括三部分,boot引导区,代码运行区,代码升级区
3、了解到新旧固件需要放置在不同的位置,那么就需要二次引导Bootloader,这个二次引导Bootloader怎么设计。自己没有搞过系统,只是稍微了解过Bootloader。
目前升级的话,主要有两种方法:
1:第一种,每次硬件接受到升级时,进入BOOT区,接受bin文件,将代码烧录到升级区,校验OK,再将代码复制到代码运行区,复位,BOOT跳转在代码运行区,升级OK,代码正常运行
2:第二种,BOOT区中做判断,轮询A和B区,比如第一次代码运行在A区,接受到升级指令,再BOOT区中再升级代码切换到B区,升级代码校验烧录OK,复位跳转到B区运行,反之则再烧录到A区,复位跳转到A区运行
目前这两种方法都是用的很多,还没看到其他的方法,对于你看到的只有BOOT区+一个APP区,那基本是自己玩的,实际项目基本不使用。
4、空中传输是否需要自己在传输报文前后加CRC校验码。
加入CRC校验可以避免升级过程中传输的BIN文件错误,最好是加入减少升级的代码出问题,无线这东西本来就是受干扰比较严重。
其实你贴上来的图就很明显,BOOT区+APP1区+APP2区,主要区别还是BOOT是不是要在APP1和APP2之间跳来跳去。希望对你有帮助,这个东西做过很简单的。我做的产品都是BOOT区+APP1区+APP2区,我同事他们升级代码都是去现场,我都不去现场的,我比较懒,能不出差就不出差。