你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【深度讨论】STM32 IAP GPRS远程升级方案讨论

[复制链接]
cjq_enjoy-15073 提问时间:2013-9-4 08:58 /
 STM32 IAP GPRS远程升级方案讨论
flash分区:
建议分三个区,BOOTLOADER,运行区,备份程序区.

传输机制:
考虑到空中升级的丢包几乎不可避免,升级进度由终端控制:终端发送需要的包序号,服务器返回.

保护机制:
1.第一包为导引包,包括总包数,每包大小,总程序CRC.
2.每一包都带有CRC校验.
3传输的每一包终端都放在备份区.
4.全部传输完毕后终端进行总程序CRC校验,再与导引包中的CRC对比.对比成功则软复位,在BOOTLOADER中进行升级.失败则重传或者停止传输.
不知道还有更好的完善的地方???求帮助??大家做过的来讨论讨论?//
收藏 2 评论12 发布时间:2013-9-4 08:58

举报

12个回答
wenshijian 回答时间:2013-9-4 14:16:57

RE: STM32 IAP GPRS远程升级方案讨论

为啥不用ISP方式实现远程升级呢?GPRS方式是很好用,但是每个终端地硬件成本要增加多少啊?GSM+SIM+FLASH+N多元件。。。还面临信号不稳定传输中断等等问题。
对于一个简单的应用主机来说,成本是很敏感的,增加一个GSM和一张SIM卡,一个电路板,N多元件,外置FLASH存储等等,估计已经超过主机本身得硬件成本了,当然高端应用比如远程抄表等等还是可以忽略不计的。
现在应用于STM32芯片的远程升级\远程ISP客户端已经很成熟了,直接通过网络来传输你的HEX文件内容,还可以绑定硬件序列号。
当然ISP方式需要人工操作,比GPRS差一点智能性了。
dennywang 回答时间:2013-9-4 20:21:34

RE: STM32 IAP GPRS远程升级方案讨论

楼主的方法从原理上应该算是很好了,但是需要注意的是
1、bootloader在编程时要保证程序的完整性,比如中途停电等造成从备份区copy至运行区失败的重试等。
2、远程下载备份完成后要记录备份可用标志,在bootloader复制并校验通过后将备份可用标志更改为已经升级成功(防止重复拷贝)。
3、增加断点续传功能,避免同样数据的多次下载,减少流量。
4、考虑使用FTP下载。
5、应该将引导区以及每一包的报文都保存下,在bootloader升级前检查每一个包CRC通过,原始文件的CRC也通过(防止分段升级时部分包被篡改),才能启动编程。
ltbytyn 回答时间:2013-9-23 20:35:41

RE: 【深度讨论】STM32 IAP GPRS远程升级方案讨论

看看                  
hankaifeng145 回答时间:2013-9-24 14:08:19

RE: 【深度讨论】STM32 IAP GPRS远程升级方案讨论

很好的文章,看看
sanmaoyang 回答时间:2014-2-8 10:35:15

回复: 【深度讨论】STM32 IAP GPRS远程升级方案讨论

 正在尝试此方案的相关操作,有经验的大侠可以提供点建议!
jtyantai 回答时间:2014-2-20 15:44:33

回复: 【深度讨论】STM32 IAP GPRS远程升级方案讨论

 这个问题我们现在也在做,实现方式和楼主类似,GPRS传输,里面有包号+CRC,较验通过后,放在备份区。有丢失 的,重新请求传输包。
现在在协议判断上有些问题,不知道大家怎么处理的。我们的数据包自己定义了个协议,开头:0XAA,0X55,中间有长度,表示后面的字节数,结尾有OXFF,OXFE。现在的办法是通过查找开头OXAA,OX55,找到后寻找长度,再找结尾。现在的问题是:
1.数据包中有OXAA,OX55,OXFF,OXFE等。有可能会造成误判断,怎么解决?用转义符是否可以,比如增加个1B。不知道有没有做过的,详细讲一下。
2.GPRS本身指令是是以OXOD,OXOA来结束的,例如:信号强度,网络报错等。没有开头,都是以这个结束。程序中只能通过0XOD,OXOA来查找。这个数据在升级包中有也这情况,怎么处理呢?
天星木 回答时间:2014-11-26 17:15:43
MARK一个,GPRS可以用透传,自己做协议来判断。
allenwu 回答时间:2017-5-6 22:26:23
谢谢分享;谢谢
wofei1314 回答时间:2017-5-7 16:15:13
我的是通过有线网络升级的,思路和你的完全一致,目前项目再用,虽然不是十分完美,但是应用完全没问题
wofei1314 回答时间:2017-5-7 16:22:49
jtyantai 发表于 2014-2-20 15:44
 这个问题我们现在也在做,实现方式和楼主类似,GPRS传输,里面有包号+CRC,较验通过后,放在备份区。有丢 ...

不知道你们用的GPRS模块的是那种的?支持透传吗?如果支持透传,实现起来可能会方便一些,进入透传模式,这样就不会有0D、0A等问题了,每一包数据采用应答机制,发一包,等回应,然后再发一下包,中间加上超时重发即可;

如果没有透传模式的话,个人建议转码发送,比如你要发送的数据是(HEX格式)01 02 03 04...,那么实际发送的时候,转码发送,转码为ASCII方式"01020304...."而协议字符0D 0A什么的都是不可见字符,不用处理
NapoleonWang 回答时间:2017-11-14 16:43:50
在flash空间允许的情况下,能否再加个运行区,即运行1区,运行2区,升级时轮流运行,是不是可以避免掉电copy错误
Ghost1111 回答时间:2018-10-5 20:32:27
NapoleonWang 发表于 2017-11-14 16:43
在flash空间允许的情况下,能否再加个运行区,即运行1区,运行2区,升级时轮流运行,是不是可以避免掉电cop ...

我也是准备这么搞

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版