OTA升级已经不是什么新鲜事,现在大多数物联网终端设备,基本具备这个功能。
今天以 AT32 为例给大家分享一下 OTA 升级的详细流程。
空中下载技术 OTA(Over-the-Air Technology)是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口,对产品中的固件程序进行更新升级。
通常实现 OTA 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序为 Bootloader 区域,第二个项目程序 App 代码为真正的功能代码,执行应用和升级。这两部分项目代码同时烧录在 User Flash 中。
图1. OTA代码执行流程
2) 必须将 App 程序的中断向量表进行相应的移动,移动的偏移量为 x。
AT32 USART OTA 快速使用方法
1) tool_release
IAP_Programmer.exe,PC 机 tool,用于演示 OTA 升级流程
注:工程基于keil v5建立,若用户需要在其他编译环境上使用,请参考对应 BSP 目录AT32F403A_407_Firmware_Library_V2.x.x\project\at_start_f403a\templates中各种编译环境(例如IAR6/7/8,keil 4/5,eclipse_gcc)进行对应修改即可。
OTA Demo 使用
本文档描述了两种常用的 OTA 应用 demo,template app 和 dual app,后面章节会分别介绍。
3) 选择正确的串口、APP下载地址和 bin 文档,点击 Download 下载,如下图
图2. IAP demo上位机
地址分布
图3. Flash地址分配
执行流程
OTA 分为 Bootloader、App 和 Template 三部分,应用在 App 中执行,Template 仅作为新 App 固件数据的临时存放空间。程序执行整体流程框图如下:
图4. 程序执行流程
Bootloader project 设置
1)Keil 设置
图5. Bootloader project中address 1在Keil设置
2) Bootloader 源程序修改 ota.h 文件中
图6. Bootloader project中address 2在程序中设置
App project 设置
OTA demo 提供了 2 个 App 程序供测试用,皆以 address 2(0x800 4000)为起始地址。App1 LED3 闪烁,App2 LED4 闪烁。以 App1 为例,设计步骤如下:
1) Keil工程设置
图7. App project中address 2在Keil设置
2) App1 源程序设置
图8. App project向量表偏移在程序中设置
3) 编译生成bin文件
通过 User 选项卡,设置编译后调用 fromelf.exe,根据 .axf 文件生成 .bin 文件,用于 OTA 更新。通过以上3个步骤,我们就可以得到一个 .bin 的 APP 程序,通过 Bootloader 程序即可实现更新。
再调试 App 工程
地址分布
图9. Flash地址分配
注:Bootloader 区域最后2个扇区,用于存放 App 是否正常的 flag,用户编译修改Bootloader 时,要保证不覆盖 flag 的地址。
执行流程
图10. 程序执行流程
Bootloader project 设置
1)Keil 设置
图11. Bootloader project中address 1在Keil设置
2)Bootloader 源程序修改 ota.h 文件中
图12. Bootloader project中address 2在程序中设置
App project 设置
图13. App project中address 2在Keil设置
2) App1源程序设置
图14. App project向量表偏移在程序中设置
3) 编译生成bin文件
通过User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于OTA更新。通过以上3个步骤,我们就可以得到一个.bin的APP程序,通过Bootloader程序即可实现更新。
4) 开启debug App code功能
如果在设计App code过程中需要对App project进行单独调试,请按照以下操作。
图15. 上位机通信协议
2) 嵌入式端下位机通信协议
图16. 下位机通信协议
Checksum:1byte,4bytes的Addr+2KBytes数据的校验和的低八位
本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
由于微信公众号近期改变了推送规则,为了防止找不到,可以星标置顶,这样每次推送的文章才会出现在您的订阅列表里。
猜你喜欢:
易懂 | 手把手教你编写你的第一个上位机
适用于嵌入式的差分升级通用库!
分享一种灵活性很高的协议格式(附代码例子)
分享几个实用的代码片段(第二弹)
分享一种你可能不知道的bug定位方法
分享一种修改配置文件的方法
《嵌入式大杂烩周记第 13 期:lz4》
《嵌入式并行多线程处理器,了解一下!》
在公众号聊天界面回复1024,可获取嵌入式资源;回复 m ,可查看文章汇总