金牌会员
- 积分
- 1327
- 金钱
- 1327
- 注册时间
- 2019-7-11
- 在线时间
- 165 小时
|
上一篇提问的帖子:http://www.openedv.com/forum.php?mod=viewthread&tid=315745&extra=page%3D1
首先是实现的思路:
①写一个bootloader函数负责跳转到app
②需要一个flag存在flash中,用于指示是否需要更新
③flash空间足够,所以直接设置两个app区域,分别称为app1和app2
④bootloader负责根据flag跳转到对应的app执行
⑤app1/2通过串口接收程序数据并写入app2/1的区域,并更新flag
代码见IAR工程。
然后是操作要点:
①必须在代码中设置对应的中断向量表偏移量。
②串口数据按8位操作,flash数据按16位操作,需要转化,注意高低位。
③flash操作之前先执行unlock。
④串口发送的app数据一定要严格对应更新区域(建两个独立的工程)。比如当前执行的是app1,那么一定要发送app2到串口进行更新。
⑤第一次下载时设置flag值然后重新下载正常的bootloader。
⑥通过串口发送.bin格式的二进制文件,各IDE有对应的生成方式。
本次练习只是熟悉IAP原理,其中只包含了最基本的操作。后续可按照如下条目逐一优化,最终形成一个完备的IAP远程升级程序。
①对接收到的程序数据做校验。
②bootloader本身增加串口代码,新程序一律通过串口接收并写入flash。
③不使用app1和app2两个程序,只保留app1,app2区域用作暂存更新后的程序。复位后将app2复制到app1再执行。
欢迎各位交流相关经验,指导一二。
APP1.zip
(5.08 MB, 下载次数: 664)
|
|