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

【深度讨论】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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版