OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6290|回复: 9

IAP固件升级之我见解,欢迎讨论。

[复制链接]

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-9-19 17:15:01 | 显示全部楼层 |阅读模式
真正做产品要固件升级必须涵盖IAP  FLASH1  FLASH2甚至FLASH3:FLASH1可以存储你刚出厂的程序,如果没有固件更新就一直运行这个片区的程序。FLASH2可以存储你升级过来的程序,然后程序可以选择在这个片区运行,也可以把FLASH2复制到FLASH1,还是运行FLASH1,当然最好还是保持FLASH1不动,这样一旦设备刷机成砖头,还可以接个按键啥的运行回这个出厂程序。。我是这么做的;当然,思路是思路,做是另外一回事,,固件更新程序必须做CRC校验,甚至GUID判断,及错误重发机制。发送端的数据必须做分割处理。一个固件包(我们目前的固件bin是30多K,level o3)多包次发送(加上头尾CRC GUID等),接收端(STM32)再把数据还原,写FLASH.--------我觉得适合所有MCU。
shop60994719.taobao.com
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-9-19 17:51:51 | 显示全部楼层
升级前备份,然后升级,跑不起来由bootload将备份重新写回。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复 支持 反对

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2016-9-19 19:07:07 | 显示全部楼层
这样的方式前提要FLASH够大,不够大你还得另想办法,传输你直接找个现成的文件传输协议就行了,例如xmodem、ymodem
我的博客:http://blog.csdn.net/itdo_just
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-9-19 19:24:23 | 显示全部楼层
协议我自己定义的,后面只加了CRC校验,没弄很复杂,flash就分了两个区域,一个存放bootloader,一个存储APP,每次升级先擦除app区域,然后接收到数据直接写入,失败了重新升级,不备份
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-8-7
在线时间
1 小时
发表于 2016-9-21 12:11:13 来自手机 | 显示全部楼层
保留bootloader,升级失败了,重新上电再来一发
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2016-12-24
在线时间
22 小时
发表于 2017-2-16 12:00:32 | 显示全部楼层
我现在在做LPC 1778的在线升级,有个问题想请教下各位大神,我的项目由于特殊情况,APP程序不能在flash上连续存储,被分割成了两部分存储,这样在编译生成时就生成了两个bin文件,这种情况下我应该如何将bin文件写入呢?  我的app程序存放地址0x4000-0xA000和0x48000-0x80000。我的做法是将第一个bin文件存放在第一段APP存储空间,将第二个bin文件存放在第二段APP存储空间。不知道这样的做法是不不对?请大神解惑
回复 支持 反对

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-7-21
在线时间
18 小时
发表于 2020-10-21 15:40:00 | 显示全部楼层
八度空间 发表于 2016-9-19 19:24
协议我自己定义的,后面只加了CRC校验,没弄很复杂,flash就分了两个区域,一个存放bootloader,一个存储AP ...

能否共享一下工程文件呢?谢谢
回复 支持 反对

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
发表于 2020-10-22 08:56:48 | 显示全部楼层
最近刚做完这个,st官方有源码,移植起来也比较快,官方使用的是ymodem协议,使用串口传输,后面我觉得用串口在产品用不方便,改成了使用ymodem协议网口传输,为保证bin文件的安全性加入了AES加密,我的也是一个bootloader+app1+app2。
回复 支持 反对

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
发表于 2020-10-22 08:59:30 | 显示全部楼层
本帖最后由 asshole 于 2020-10-22 14:28 编辑
outmanlol 发表于 2017-2-16 12:00
我现在在做LPC 1778的在线升级,有个问题想请教下各位大神,我的项目由于特殊情况,APP程序不能在flash上连 ...

做法是可以实现的,我的也有两个app程序,开始于不同的flash地址,如果你要从那个flash地址运行的话,keil中可以直接修改程序的运行地址,以及程序的flash大小。这样下载的时候也下载到那个地址就好了,重点就在于你的bootloader程序怎么写了(不小心回复了这么久之前的帖子)
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2021-1-28 22:29:31 | 显示全部楼层
agoodog 发表于 2020-10-21 15:40
能否共享一下工程文件呢?谢谢

项目中,加密了,拷贝不了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 05:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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