搜索
bottom↓
回复: 39

【脑洞大开】STM32用ISP来实现IAP在线升级

  [复制链接]

出0入10汤圆

发表于 2015-9-2 15:45:36 | 显示全部楼层 |阅读模式
STM32串口下载用的是ISP,从ST公司烧写在system memory中的一段bootloader开始启动,然后进行下载。
如果是IAP实现应用程序下载的话,也是需要自己先写一段bootloader,这段bootloader也会将程序写入到Flash。
那我就在想,既然ISP方式中已经有bootloader,那么为什么还要自己写呢?直接使用这段bootloader不就好了吗?
你可能会说,那要调整boot引脚,但是就在刚才,我看到了通过修改PC跳转到system memory的做法,实在让我脑洞大开,这意味这不用调整boot引脚就可以实施串口下载了!!!
见这个帖子http://www.amobbs.com/forum.php? ... ghlight=IAP%2BSTM32

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入10汤圆

 楼主| 发表于 2015-9-2 15:47:45 | 显示全部楼层
我想问的是这种方式,大家想到什么弊端或者不行的地方吗?如果可以实现,这种方式应该好过IAP,其一是不用自己写bootloader占用flash内存,其二是ISP已经把协议校验什么的都做好了,并且开放处协议,直接用即可!

出0入10汤圆

 楼主| 发表于 2015-9-2 15:51:25 | 显示全部楼层
不过要留出复位引脚,串口下载之后要重新启动,从flash地址开始运行程序!

出0入0汤圆

发表于 2015-9-2 15:52:00 | 显示全部楼层
IAP的目的是要定制升级的通信机制,如果还用ISP的通信机制干嘛不直接用ISP

出0入10汤圆

 楼主| 发表于 2015-9-2 15:53:09 | 显示全部楼层
tohell 发表于 2015-9-2 15:52
IAP的目的是要定制升级的通信机制,如果还用ISP的通信机制干嘛不直接用ISP

因为要调整boot引脚,为什么要自己定制升级的通信机制呢?

出0入0汤圆

发表于 2015-9-2 16:09:10 | 显示全部楼层
我觉得ISP和IAP最大的区别就是灵活性,IAP可以进行远程升级。
而ISP的通讯限定死了只能用串口,而且要边擦边写,上位机给下位机传一段,下位机擦除并写入一段。而IAP可以做到先不擦除FLASH,仅仅接收程序数据,将其存到其它区域,等接收完毕后再一口气将程序区擦除并写入。
这样ISP几乎没法用远程的方式进行写入,例如我通过GPRS升级,IAP可以自己定协议帧来接收程序,等全部接收完了再写更新APP。而ISP呢?先不说ISP中无法支持GPRS的方式通讯,就算能支持了,边擦边写的方式也有很大危险,万一中途掉线什么的,到时候ISP进不去,APP又不完整,远程只能干瞪眼了。

出0入0汤圆

发表于 2015-9-2 16:11:25 | 显示全部楼层
假如,万一以后ST把这个地址改了捏,这是个问题。。。。

出0入10汤圆

 楼主| 发表于 2015-9-2 16:27:44 | 显示全部楼层
spark51 发表于 2015-9-2 16:11
假如,万一以后ST把这个地址改了捏,这是个问题。。。。

改协议神马的还有可能,就算修改也会兼容的吧。
问题可能存在于下载途中断电什么的。
还有我刚才测试了,不知道怎么不行的。

出0入0汤圆

发表于 2015-9-2 16:31:20 | 显示全部楼层
这个想法我之前也想过,但是用自带的,就只能跟着它走了,很被动

出0入10汤圆

 楼主| 发表于 2015-9-2 16:34:06 | 显示全部楼层
测试了不行啊,不知道为什么。按键按下之后,跳转,但是我在串口端发送一个0x7F,没有收到0x79。用串口下载也不行!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-9-2 16:34:57 | 显示全部楼层
10xjzheng 发表于 2015-9-2 16:27
改协议神马的还有可能,就算修改也会兼容的吧。
问题可能存在于下载途中断电什么的。
还有我刚才测试了, ...

我的意思是,ST以后有可能把改变BOOTLOADER的起始地址。做实验可以,做产品不太合适用

出0入10汤圆

 楼主| 发表于 2015-9-2 16:35:05 | 显示全部楼层
tianxiaoMCU 发表于 2015-9-2 16:31
这个想法我之前也想过,但是用自带的,就只能跟着它走了,很被动

我倒是觉得OK,因为FLASH占用啊,另外这个你可以说被动,也可以说是利用现成的。

出0入10汤圆

 楼主| 发表于 2015-9-2 16:36:02 | 显示全部楼层
spark51 发表于 2015-9-2 16:34
我的意思是,ST以后有可能把改变BOOTLOADER的起始地址。做实验可以,做产品不太合适用 ...

我觉得这种可能性比较小

出0入0汤圆

发表于 2015-9-2 16:43:20 | 显示全部楼层
10xjzheng 发表于 2015-9-2 16:35
我倒是觉得OK,因为FLASH占用啊,另外这个你可以说被动,也可以说是利用现成的。 ...

去年搞了个这样的,flash只有应用程序和引导加载程序,要更新时从应用程序跳到引导加载程序,然后接收一段类似bootloader的程序,该程序完成应用程序的更新。但是后来不了了之

出0入10汤圆

 楼主| 发表于 2015-9-2 16:45:02 | 显示全部楼层
tianxiaoMCU 发表于 2015-9-2 16:43
去年搞了个这样的,flash只有应用程序和引导加载程序,要更新时从应用程序跳到引导加载程序,然后接收一 ...

这不是IAP吗?

出0入0汤圆

发表于 2015-9-2 16:49:51 | 显示全部楼层
首次烧录,用固化的挺好的。

出0入0汤圆

发表于 2015-9-2 23:28:47 来自手机 | 显示全部楼层
一直这样用的,F4好像不行,不能跳转过去

出20入0汤圆

发表于 2015-9-2 23:33:15 | 显示全部楼层
  这样好像不是很灵活。

出0入0汤圆

发表于 2015-9-9 13:06:37 | 显示全部楼层
10xjzheng 发表于 2015-9-2 15:53
因为要调整boot引脚,为什么要自己定制升级的通信机制呢?

我有一个产品放在黑龙江,人在海南省,

假设这个产品通过一些方式接入到互联网并且与本人通信成功。那么,我如果需要远程更新这个产品的代码,没有任何现场操作的情况下,STM32自带的bootloader能实现这个功能吗?

出0入0汤圆

发表于 2015-9-9 22:32:03 | 显示全部楼层
dalarang 发表于 2015-9-2 16:09
我觉得ISP和IAP最大的区别就是灵活性,IAP可以进行远程升级。
而ISP的通讯限定死了只能用串口,而且要边擦 ...

你这个是不是必须要FLASH空间比你的程序FLASH至少大2倍?

出0入0汤圆

发表于 2015-9-10 08:27:34 | 显示全部楼层
bad_fpga 发表于 2015-9-9 22:32
你这个是不是必须要FLASH空间比你的程序FLASH至少大2倍?

是的,牺牲部分FLASH空间来换取可靠性是很合算的。
而且现在存储器这么便宜,完全可以放在外部存储器中。

出0入10汤圆

 楼主| 发表于 2015-9-10 08:42:34 | 显示全部楼层
qq302011 发表于 2015-9-2 23:28
一直这样用的,F4好像不行,不能跳转过去

你实验过F1的平台嘛?

出0入0汤圆

发表于 2015-9-10 08:59:08 | 显示全部楼层
IAR大部分不是用串口。

出0入10汤圆

 楼主| 发表于 2015-9-10 09:05:14 | 显示全部楼层
zhaojun_xf 发表于 2015-9-10 08:59
IAR大部分不是用串口。

那是CAN、以太网这些?

出0入0汤圆

发表于 2015-9-10 09:20:23 | 显示全部楼层
即使不考虑远程更新,用在实际产品也不方便。一旦下载APP过程有问题导致APP不能正常运行,你就没办法再进入ISP,只能拆机维修了。而自己写IAP就可以有很多办法解决这个问题,代价仅仅是十来K的Flash空间。况且写好一个IAP,只要作很少改动可以适应用其他用同系列MCU的项目,这点功夫绝对划得来。

出0入0汤圆

发表于 2015-9-10 09:36:23 | 显示全部楼层
10xjzheng 发表于 2015-9-10 09:05
那是CAN、以太网这些?

U盘。SD卡也可以啊

出0入0汤圆

发表于 2015-9-10 09:37:15 | 显示全部楼层
类似当年BIOS的dual boot技术,ROM空间够大,IAP做的时候把程序写入第二个空间里,写入完成校验成功修改boot后跳转地址,就ok了,不成功不修改跳转地址,原来系统还是可以用的

出0入10汤圆

 楼主| 发表于 2015-9-10 10:03:37 | 显示全部楼层
内存要足够才行!

出0入0汤圆

发表于 2015-9-10 10:04:06 | 显示全部楼层
既然是升级就涉及保密性问题,不知道ISP如何保证保密性? 它又不能解密,只能按明文写到flash中。
IAP还可以方便的换进入升级的方式。

出0入0汤圆

发表于 2015-9-10 20:07:52 | 显示全部楼层
10xjzheng 发表于 2015-9-10 08:42
你实验过F1的平台嘛?

f1可用,验证过

出0入0汤圆

发表于 2015-9-11 09:56:28 | 显示全部楼层
稳定性不行 这种的应用 实验玩玩可以  用上产品 不太可靠 还是IAP  用的好多年了  一直很稳定

出0入0汤圆

发表于 2015-9-11 13:41:34 | 显示全部楼层
10xjzheng 发表于 2015-9-10 08:42
你实验过F1的平台嘛?

F4试过是可以跳转过去的。

出0入0汤圆

发表于 2016-5-2 22:27:56 | 显示全部楼层
10xjzheng 发表于 2015-9-10 08:42
你实验过F1的平台嘛?

F1没问题,这样的好处是,无论怎么烧写,系统不会变砖

出0入0汤圆

发表于 2016-5-3 14:19:05 | 显示全部楼层
qq302011 发表于 2016-5-2 22:27
F1没问题,这样的好处是,无论怎么烧写,系统不会变砖

兄弟,能否把你的工程贡献一个

出0入0汤圆

发表于 2016-5-3 15:35:15 | 显示全部楼层
xyz2008 发表于 2016-5-3 14:19
兄弟,能否把你的工程贡献一个

不需要工程啊,就是参照楼主位,在需要进入BOOT模式的时候执行那一段就可以了,经过测试,F4也是支持的,但是需要在超级用户模式下运行那段代码才行

出0入0汤圆

发表于 2016-10-28 10:31:32 | 显示全部楼层
IAP可以GPRS远程升级

出0入0汤圆

发表于 2016-10-28 16:46:24 | 显示全部楼层
IAP在远程升级方面好用太多了,还是IAP吧

出0入0汤圆

发表于 2016-12-20 10:00:28 | 显示全部楼层
过来挖一下

出0入0汤圆

发表于 2018-5-3 16:30:01 | 显示全部楼层
最近再研究gprs在线升级呢,现在物联网费用很低的

出0入0汤圆

发表于 2019-11-16 15:18:24 | 显示全部楼层
正在学习bootloader,感谢楼主分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-4 05:19

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

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