STM32 IAP GPRS远程升级方案讨论 flash分区: 建议分三个区,BOOTLOADER,运行区,备份程序区. 传输机制: 考虑到空中升级的丢包几乎不可避免,升级进度由终端控制:终端发送需要的包序号,服务器返回. 保护机制: 1.第一包为导引包,包括总包数,每包大小,总程序CRC. 2.每一包都带有CRC校验. 3传输的每一包终端都放在备份区. 4.全部传输完毕后终端进行总程序CRC校验,再与导引包中的CRC对比.对比成功则软复位,在BOOTLOADER中进行升级.失败则重传或者停止传输. 不知道还有更好的完善的地方???求帮助??大家做过的来讨论讨论?// |
RE: STM32 IAP GPRS远程升级方案讨论
对于一个简单的应用主机来说,成本是很敏感的,增加一个GSM和一张SIM卡,一个电路板,N多元件,外置FLASH存储等等,估计已经超过主机本身得硬件成本了,当然高端应用比如远程抄表等等还是可以忽略不计的。
现在应用于STM32芯片的远程升级\远程ISP客户端已经很成熟了,直接通过网络来传输你的HEX文件内容,还可以绑定硬件序列号。
当然ISP方式需要人工操作,比GPRS差一点智能性了。
RE: STM32 IAP GPRS远程升级方案讨论
1、bootloader在编程时要保证程序的完整性,比如中途停电等造成从备份区copy至运行区失败的重试等。
2、远程下载备份完成后要记录备份可用标志,在bootloader复制并校验通过后将备份可用标志更改为已经升级成功(防止重复拷贝)。
3、增加断点续传功能,避免同样数据的多次下载,减少流量。
4、考虑使用FTP下载。
5、应该将引导区以及每一包的报文都保存下,在bootloader升级前检查每一个包CRC通过,原始文件的CRC也通过(防止分段升级时部分包被篡改),才能启动编程。
RE: 【深度讨论】STM32 IAP GPRS远程升级方案讨论
RE: 【深度讨论】STM32 IAP GPRS远程升级方案讨论
回复: 【深度讨论】STM32 IAP GPRS远程升级方案讨论
回复: 【深度讨论】STM32 IAP GPRS远程升级方案讨论
现在在协议判断上有些问题,不知道大家怎么处理的。我们的数据包自己定义了个协议,开头:0XAA,0X55,中间有长度,表示后面的字节数,结尾有OXFF,OXFE。现在的办法是通过查找开头OXAA,OX55,找到后寻找长度,再找结尾。现在的问题是:
1.数据包中有OXAA,OX55,OXFF,OXFE等。有可能会造成误判断,怎么解决?用转义符是否可以,比如增加个1B。不知道有没有做过的,详细讲一下。
2.GPRS本身指令是是以OXOD,OXOA来结束的,例如:信号强度,网络报错等。没有开头,都是以这个结束。程序中只能通过0XOD,OXOA来查找。这个数据在升级包中有也这情况,怎么处理呢?
不知道你们用的GPRS模块的是那种的?支持透传吗?如果支持透传,实现起来可能会方便一些,进入透传模式,这样就不会有0D、0A等问题了,每一包数据采用应答机制,发一包,等回应,然后再发一下包,中间加上超时重发即可;
如果没有透传模式的话,个人建议转码发送,比如你要发送的数据是(HEX格式)01 02 03 04...,那么实际发送的时候,转码发送,转码为ASCII方式"01020304...."而协议字符0D 0A什么的都是不可见字符,不用处理
我也是准备这么搞