搜索
bottom↓
回复: 30

一种单片机IAP升级程序的构想。

  [复制链接]

出0入4汤圆

发表于 2021-2-15 21:35:01 | 显示全部楼层 |阅读模式
构想了一种单片机IAP升级程序,不知是否实用。或者有更好的方式,请指教。

1.分别编制IAP及APP两个程序。

2.MCU复位后,总是先执行IAP程序。并且在IAP程序中,
  通过判断设定条件,来决定是直接跳转到APP程序并执行,
  还是进入对APP程序进行升级的操作。
  APP升级OK,可进入新的APP程序并执行。

3.在IAP程序中,有两种方式可以让其进入APP升级状态:
  a.开机前按下规定的按键不放,则进入升级状态。
  b.读取标志位的值,若为0xA55A,则进入升级状态(升级OK后,
    将其改为0xffff,则下次上电后,若不按升级键,则直接进入APP程序)。

4.在APP执行过程中,当接收到特殊的APP升级命令后,
  则会将标志位的值改为0xA55A,并执行软件复位操作,以让MCU复位并
  进入IAP程序。此时IAP会直接进入APP升级状态。

5.IAP升级按键的意义:
  a.标志位只能在APP中修改,但最开始MCU中只烧录进了IAP程序。所以
    此时可以按下升级键强制让IAP程序进入APP升级状态,将最初版的APP
    程序下载到MCU中。当然也可以将IAP程序和最初版的APP程序的
    HEX文件合二为一,并一次烧录进MCU.下次需要升级APP时,则直接在
    APP中发升级命令即可。
  b.若在运行或升级等过程中,APP程序遭到破坏,且不能再正确接收升级命令时,
    若要升级或恢复APP程序,则只能按升级键并重开机实现了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2021-2-15 21:38:30 | 显示全部楼层
和boot有啥特别区别?

出0入4汤圆

 楼主| 发表于 2021-2-15 21:46:36 | 显示全部楼层
ddddd120 发表于 2021-2-15 21:38
和boot有啥特别区别?

可以APP跳转IAP,更容易实现远程升级。

出0入0汤圆

发表于 2021-2-15 21:55:13 | 显示全部楼层
一直都是这样搞的

出0入162汤圆

发表于 2021-2-15 22:23:05 来自手机 | 显示全部楼层
BS_good200xy 发表于 2021-2-15 21:46
可以APP跳转IAP,更容易实现远程升级。

??看不出有啥特别的
一般的升级程序都可以从APP跳转到IAP 啊,包括特定按键操作或通讯命令,不需要重新上电的

出0入0汤圆

发表于 2021-2-15 22:44:43 | 显示全部楼层
你所想的和我一模一样,已经应用在产品上了

出0入0汤圆

发表于 2021-2-16 10:10:41 | 显示全部楼层
https://www.feaser.com/openblt/doku.php?id=download
这里有一个开源的,比你想的都要全面~

出0入0汤圆

发表于 2021-2-16 10:22:58 | 显示全部楼层
一直不都是类似这么干的?

出0入31汤圆

发表于 2021-2-16 17:40:35 | 显示全部楼层
,不稀奇啊

出0入31汤圆

发表于 2021-2-16 17:41:51 | 显示全部楼层
有没有能把驱动和应用分开编译的方法,也就是说驱动更新只要接口不变就不影响应用程序?

出130入20汤圆

发表于 2021-2-16 23:32:43 | 显示全部楼层
一直都是这么干的啊

出105入79汤圆

发表于 2021-2-16 23:47:12 | 显示全部楼层
注意处理这些特殊情况:
1. 升级了一个会hardfault 的app,或者会while(1)卡住的app, 这种情况下终端用户如何恢复.
2. IAP 进行升级, 成功执行了擦除, 但是升级过程中数据中断, 接下来如何处理.
3. BIN文件加密解密验证,如何验证是否是被篡改的木马(恶意)程序. Jlink就是这样被偷Boot区.  
4. APP被非法篡改,损坏.

出0入8汤圆

发表于 2021-2-17 21:35:59 | 显示全部楼层
一直这么干的,楼主总结的很好

出130入129汤圆

发表于 2021-2-17 22:31:54 来自手机 | 显示全部楼层
caizhiwei 发表于 2021-2-16 10:10
https://www.feaser.com/openblt/doku.php?id=download
这里有一个开源的,比你想的都要全面~ ...

谢谢推荐,这个不错,我试了下挺好

出1310入193汤圆

发表于 2021-2-17 23:42:55 来自手机 | 显示全部楼层
qwe2231695 发表于 2021-2-16 23:47
注意处理这些特殊情况:
1. 升级了一个会hardfault 的app,或者会while(1)卡住的app, 这种情况下终端用户如何 ...

严谨的人

出200入2554汤圆

发表于 2021-2-18 04:09:15 来自手机 | 显示全部楼层
1. 看我15年的帖子,https://www.amobbs.com/thread-5620899-1-1.html

2. 建议LZ研究下 arduino 的 bootloader 源码,以及使用流程,基本与一楼描述一致

出0入34汤圆

发表于 2021-2-18 10:40:17 | 显示全部楼层
早年我捣鼓那 5.b. 是全自动的。

出0入0汤圆

发表于 2021-2-18 10:49:50 | 显示全部楼层
可不就是这样搞的吗,IAP都多成熟了

出0入55汤圆

发表于 2021-2-18 11:17:46 来自手机 | 显示全部楼层
nrf52系列的dfu就是这么干的

出0入1209汤圆

发表于 2021-2-18 11:42:39 | 显示全部楼层
还有一点就是开机后,等待一段时间的串口命令,如果收到指定命令则进入IAP升级,适用于无按键的设备强制进入升级模式

出215入20汤圆

发表于 2021-2-18 14:40:08 | 显示全部楼层
上面的有人试过通过蓝牙BLE进行mcu升级?

出0入0汤圆

发表于 2021-2-19 09:08:17 | 显示全部楼层
都是类似原理呀。

出0入4汤圆

 楼主| 发表于 2021-2-19 09:37:19 | 显示全部楼层
AWEN2000 发表于 2021-2-15 22:23
??看不出有啥特别的
一般的升级程序都可以从APP跳转到IAP 啊,包括特定按键操作或通讯命令,不需要重新 ...

我觉得特定按键操作和通讯命令两个都不能少。并且特定按键操作必须放在IAP程序中才会安全。因为APP出错的可能性比较大。一旦出错就不能接收命令了。

出0入4汤圆

 楼主| 发表于 2021-2-19 09:50:54 | 显示全部楼层
qwe2231695 发表于 2021-2-16 23:47
注意处理这些特殊情况:
1. 升级了一个会hardfault 的app,或者会while(1)卡住的app, 这种情况下终端用户如何 ...

1,2,4点:因上电前按特殊按键可让IAP进入APP升级状态,所以没问题。大不了重新升级一下APP程序。
3点:用AES加密算法加密用于升级的bin文件应该不太容易破解。

出0入4汤圆

 楼主| 发表于 2021-2-19 10:02:16 | 显示全部楼层
kitten 发表于 2021-2-18 11:42
还有一点就是开机后,等待一段时间的串口命令,如果收到指定命令则进入IAP升级,适用于无按键的设备强制进 ...

这种方式确实可行。但有些情况下也会觉得不太方便。比如,等长了会影响开机时间,等短了会错过进入升级状态的时机。

出0入1209汤圆

发表于 2021-2-19 10:05:16 | 显示全部楼层
BS_good200xy 发表于 2021-2-19 10:02
这种方式确实可行。但有些情况下也会觉得不太方便。比如,等长了会影响开机时间,等短了会错过进入升级状 ...

这个需要自己平衡了。一般情况下有个一两秒就足够了,可以把指令做短一点。需要升级的时候客户端就不断发命令,而不是发一次,这样成功率很高的。

出0入0汤圆

发表于 2021-2-20 21:48:53 | 显示全部楼层
用过,和楼主的方法类似

出0入0汤圆

发表于 2021-2-21 09:32:25 | 显示全部楼层
我的做法也是这样的,没毛病。还有一种就是非常小巧的boot只做跳转,两份app互相可升级,这样就不会成砖,当然flash占用会大

出0入0汤圆

发表于 2021-2-21 09:50:02 | 显示全部楼层
zchong 发表于 2021-2-16 17:41
有没有能把驱动和应用分开编译的方法,也就是说驱动更新只要接口不变就不影响应用程序? ...

可以的,只需要接口地址和类型透明就好了。

出0入0汤圆

发表于 2021-2-23 20:26:18 | 显示全部楼层
物联网产品很多没有按键,全密封的。
另外最好做差分升级,对于速率慢的远程通讯,差分升级速度快,并且差分代码相当于加密代码,安全

出0入0汤圆

发表于 2021-2-25 12:50:37 | 显示全部楼层
貌似有一种单片机动态链接技术,可以把某些库分开编译成BIN文件,由主程序加载,这样如果只更新库的话,主程序不用动
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 22:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表