Keil/MDK平台 - OTA升级详解


【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485


1 . 前言

随着MCU的资源增大以及物联的普及,许多产品已经使用上了远程升级OTA技术,可以远程优化掉产品的BUG,大大降低了程序风险,以下详解KeilC51/MDK平台下的OTA步骤

2 . BootLoader

代码OTA中有两部分区域,一是BootLoader负责启动引导和更新程序,二是APP程序代码,
BootLoader启动步骤如下 :

  1. 考虑中断向量地址映射,不同平台有不同的处理规则
  2. 程序初始化(主频初始,串口初始)
  3. OTA初始化(OTA结构体初始)
  4. IOT初始化(物联结构体初始)
  5. 程序flash可写初始(部分芯片需要解锁flash擦写锁)
  6. 设置Boot等待更新指令时间(如果从APP复位Boot此处时间设0)
  7. 进入循环事件检测更新指令(数据接收和发送封装好放入串口中断检索)
  8. 处理IOT通信事件,等待更新指令进入接收数据包阶段(芯片存储记录升级)
  9. 开始处理接收,数据写入备份区,接收完成进行CRC32校验
  10. 记录写入备份区完成记录,检查备份区代码完整性拷贝代码到运行区
  11. 运行区校验数据完整性通过跳转APP运行区,不通过数据复位在boot区循环

3 . APP

代码OTA中有两部分区域,一是BootLoader负责启动引导和更新程序,二是APP程序代码,
APP启动步骤如下 :

  1. 考虑中断向量地址映射,不同平台有不同的处理规则
  2. 程序初始化(主频初始,串口初始)
  3. OTA初始化(OTA结构体初始)
  4. IOT初始化(物联结构体初始)
  5. 检索物联通信遇到更新指令告知BootLoader预留时间等待升级,跳转Boot区

4 . 注意事项

注意以下几点注意事项防止OTA变砖

  1. BOOT与APP区中断向量偏移地址必须正确
  2. BOOT区进行数据下载,数据拷贝,固件完整性校验,固件跳转
  3. BOOT区的STARTUP地址
  4. APP固件日期,版本,SUM,CRC校验等
  5. APP区的STARTUP地址以及信息存放地址(日期,一般固化在APP的CODE区),更新记录存放地址(指示段,一般固化在APP区的16字节末尾)
  6. 预留RAM的部分空间上电不清零,以留BOOT与APP之间通信(共享内存)
  7. 芯片的FLASH擦写稳定性问题
  8. 限定BOOT与APP区的代码范围
  9. 最后进行压力测试,若是不通过分析失败根源

5 . 普遍疑惑点

【Q】一,中断偏移的方式有哪些?
【A】1. 若是KeilC51平台可以借助A51汇编在中断向量根据特定ram来选择跳转boot区的中断还是APP的中断,这种方法boot和app都进行中断向量偏移
2. 若是MDK平台可以借助中断函数指针二次跳转,或者芯片自带中断偏移寄存器,直接设定即可完成中断向量偏移

【Q】二,数据传输有哪些协议可以增强稳定性?
【A】一般有Xmodem和Ymodem以及厂商自定义的通信协议

【Q】三,变砖一般有哪些可能性?
【A】1. Boot区代码被永久性更改,2. APP区数据完整性不通过仍然跳转,3. 备份区代码完整性异常但是校验通过,4. 芯片flash擦写不稳定导致擦写到其他区域,5. Boot区代码存在BUG

【Q】四,为什么要在APP区设置固件日期,版本等信息?
【A】首先可以间接增强的代码的完整性,校验手段越多越安全,日期可以回溯版本一致性根源问题,版本可以反应程序更新记录

【Q】五,为什么要把STARTUP地址,信息存放地址,更新记录地址区分开?
【A】可以保证数据粘连,干预等问题

【Q】六,KeilC51可以在LX51 Location定位地址区分,MDK怎么设定?
【A】MDK定位常量代码段写法 :
uint8_t const codeData[16]attribute((at(ADDR))) = {0x12,0x34,0x56,x078};

6 . 总结

希望大家完善好OTA升级过程,谢谢观看。

技术交流群 : 745662457
群内专注 - 问题答疑,技术研究

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客 - L U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值