STM32 OTA升级流程设计分析


    上次谈到OTA,有小伙伴私信我表示对升级的原理感兴趣。回想当初入职看到MCU在线升级的代码流程时,同样感到很神奇,毕竟学生时代我们在MCU上开发基本不需要升级,只需要进行烧录即可。
    事实上,很多公司现在也采用现场烧录来进行升级。这需要技术支持工程到现场,当产品数量一多时,未免过于麻烦。所以,对于已经接入网络的设备,可以采用在线升级的方法,有效提高升级的工作效率。
    
    那么如何实现呢?下面提供几点思路。
    1.大家知道,烧录的时候,是将生成的bin文件烧写到flash指定区域。同样,在线升级也需要将新版本代码生成的固件,写入到flash中。
    
    2.由于是网络传输,所以我们不可能一下子得到整个固件,需要进行分包传输,分片写入flash中。当然这个过程需要保证数据的完整性可靠性。而且,写入的flash区域肯定不能和原来的固件所占的地址有所重合,否则原固件不能正常运行。
    
    3.最后,也是最重要的,将新固件写入flash后,怎样将新固件运行起来呢?我们可以考虑在MCU上编写bootloader,根据标志位,选择跳转到哪个固件在flash中位置运行。大家知道,MCU都是从0x08000000地址开始运行程序,我们可以在该位置放置bootloader,由其完成之后的跳转。
    
    4.使用bootloader进行跳转,需要固件代码生成时选择好链接地址,同时,需要重新映射向量地址。这时跳转之后代码能够正常运行的基础前提。
    
    5.bootloader也不一定要跳到两种位置,它可以把新固件搬运到flash指定位置,然后跳到该位置运行。

    好了,以上就是MCU在线升级的基本原理步骤,希望对在读的你有用,有疑问可以私信我。最后,下面是我新开的个人公众号,上面会不定期更新我在单片机和嵌入式相关领域的工作经验和整理,欢迎关注和交流,比心!

                                                           

猜你喜欢

转载自blog.csdn.net/qq_34244393/article/details/107501401
今日推荐