想做网口的IAP远程升级,不知可不可行

发布于 2014-04-21 23:10:05
目前在用RTT做项目,STM32F103平台。客户要求能用网络远程更新固件程序,甚至是GPRS。无奈看了下IAP的东西,不知道可不可行。

说说我的想法,FLASH分两个区,一个BOOT区,一个APP区。BOOT区跑简单的RTT,只有lwip组件,网口超时等待数据,超时后跳转到APP。APP是设备正常情况下一直在跑全功能的RTT系统,正常运行,且网络一直和某服务器有交互。当服务器按照协议发出更新提示包时,设备硬件复位进入BOOT,然后网口等待数据接收,然后一个包一个包的接收并校验。然后IAP之。。。更新完后跳转APP。

不知道这个流程可不可行?还有一点是FLASH分了两部分,一部分是bootloader,一部分是APP。但APP是基于RTT操作系统的,把操作系统没烧在FLASH的起始,对其的运行会不会有问题?

希望大家指点一下。
谢谢!

查看更多

关注者
0
被浏览
4.5k
9 个回答
aozima
aozima 2014-04-22
拒绝白嫖,拒绝键盘侠!
STM32的FLASH本身就不在起始0地址,是通过内部的bootloader跳转过来的。
geniusgogo
geniusgogo 认证专家 2014-04-22
我就用了,我而且是三段代码两级跳转! [s:154] [s:154] [s:154] [s:154]
jeffwei
jeffwei 2014-04-22
我做过TF卡升级的情况,提醒一下从bootloader跳转到APP要先关闭清所有中断
ruixiang
ruixiang 2014-04-24
谢谢楼上诸位。
我换了一种想法,不想在bootloader中做网口和协议栈,然后接收更新包,感觉代码太多。因为我上了文件系统uffs,我在正常的APP执行中接收远程发来的更新包,然后把它存成文件放大文件系统里。然后设备复位后,bootloader中只需判断文件系统中有没有指定的文件,有则表明上次APP执行中收到了更新包,此时再读取此文件,然后IAP。
这样可不可行?或者说与之前的方法比,哪种更方便可靠?
希望大家指点。
谢谢!
aozima
aozima 2014-04-24
拒绝白嫖,拒绝键盘侠!
新方法好,
不过考虑到bootloader的大小限制,固件可以不必在uffs里面,直接放在FLASH中,不经过文件系统也是可行的。
ruixiang
ruixiang 2014-04-24
谢谢aozima。

我的APP+bootloader估计已经将512K的FLASH占满了。 uffs文件系统是挂载在NAND上的。
APP挂载uffs文件系统的时候可以指定NAND的空间范围吗?就是说整个NAND我只取一部分挂载文件系统,另一部分可以自由读写,如果这样的话,你的方法确实好。不知可不可以。
jeffwei
jeffwei 2014-04-24
板子定好了?没有的话单独用个SPI或者IIC存储器行不?

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览