原创 MSP430两种串口升级方式对比

2013-9-5 14:33 2386 24 26 分类: 消费电子

        早上收到网友咨询MSP430单片机串口升级问题的邮件,因为不是第一次收到这样的帮助请求,于是便把自己做过的两种串口升级方式做一对比希望对此问题感兴趣的工程师朋友可以从中受益,也希望有更好见解的工程师朋友不吝赐教。

 

言归正传。我做过两种方式的串口升级固件程序。我把他们分别成为loader方式和IAP方式。

 

所谓的loader方式就是最初只需烧写loader程序即可,loader程序负责通过串口接收应用程序代码,完整接收并校验无误之后,跳转到应用程序区执行应用程序。再复杂一点的可以在应用程序中设置特定触发方式使其跳回loader程序区(系统复位),此时便可以接收另一套应用程序代码实现多次升级,当然了更复杂的甚至可以将除去loader程序区之外的flash区域划分多个区分别保存当前应用程序和新版应用程序,即使在新版应用程序升级失败的情况下还可以还原旧版应用程序,实现系统备份还原;

 

所谓的IAP其含义就是在应用升级,具体来讲就是在应用程序中接收程序代码(暂存在非当前执行区,此时需要程序员合理规划flash的分区),接收并校验无误之后跳转到引导程序(暂时也叫做引导程序),该引导程序根据flash的写入情况决定是将新版程序拷贝到应用程序执行区(这个执行区最好固定地址空间)还是还原原来的旧版应用程序(此时整个flash分以下几个区:引导程序区、旧版应用程序区(做系统还原之用)、新版应用程序区(新接收的程序代码暂存区(不同于应用程序执行区))、应用程序执行区(也即IAP中的A(Application))在这四个分区中,除引导程序区之外的其他三个分区其大小最好一致)。

 

IAP设计时引导程序只负责条件判断flash代码的区域拷贝、中断向量重映射等一些基本工作,相比于loader方式引导程序无需编写串口通信程序(loader方式时串口通信接收程序最好设计成轮询方式)而且引导程序相对更加固定,但是采用此种方式时首次烧写程序需要先烧写引导程序,再烧写应用程序(仿真器烧写应用程序时不能把引导程序区擦除掉),而且每次升级的应用程序起码应该保证串口通信部分程序无bug,否则可能影响下次升级!

 

最后,有一个设想还未实现,如果引导程序要进行扩展(并非完全因为bug)我们可以在应用程序中接收引导程序代码覆盖旧版引导程序(或者像备份应用程序一样将其做个备份),就像两个木板过河,我们踩在其中一块木板上拿着另一块木板前移,之后跳转到前面的木板再把后面的木板前移如此一来便可以实现过河。

 

在此也是这样的,当程序在引导程序区执行时我们可以修改应用程序区,同样的当程序运行到应用程序区时我们也可以修改引导程序区!

 

如此一来程序可以设计的相当灵活,方便不合适拆卸的设备的固件维护,但是过于灵活的程序设计也可能带来更隐蔽的bug。具体设计到什么程度我想应该视应用场景而定吧!

文章评论2条评论)

登录后参与讨论

462629051_256703759 2013-9-6 09:03

谢谢小编的苦心,本篇博客本来是给网友的回信,没想到一下写了这么多,索性就发表出来了!哈哈

用户1602177 2013-9-5 14:32

看得出来,博主分享本文时,绝对是一气呵成啊~~

为了方便网友们阅读,小编为博主分了段落,调整了格式~~如果有任何问题,请联系本人~~

用户1636929 2012-2-15 20:01

你说的对,确实需要去系统学习整体的理论,但是我觉得有的时候提前做出一些东西来会更有帮助,提高兴趣,你说对不?

用户1602351 2012-2-9 10:04

整这些花哨的东西不如去好好学学密码学。

用户1326533 2012-2-8 12:55

这学生有前途

用户1602177 2012-1-30 22:06

学习了~~

相关推荐阅读
462629051_256703759 2014-06-08 21:56
产品研发的一点想法
        产品研发的核心是产品,研发是为了实现产品,所以能够快速设计出稳定的产品才是研发的目的。通过对比自己身边的一些项目产生了一些想法,总体来说就是尽可能采用半导体厂商的最成熟方案尽可能和...
462629051_256703759 2014-03-01 12:34
LED子系统
        Linux驱动中已经将led驱动作为一个子系统来实现了,针对Tiny210采用通用IO口来控制led的情况,linux采用platform驱动来实现led子系统,因此我们可以通过l...
462629051_256703759 2014-02-27 22:47
git入门
15.1、安装git $sudo apt-get install git $sudo apt-get install git-core 更新git $git clone git:/...
462629051_256703759 2014-02-27 15:05
Vim + Ctags + Taglist组合
12.1、Ctags和Taglist插件的安装: 12.1.1、Ctags插件的安装:sudo apt-get install ctags 12.1.2、Taglist插件的安装:首先下载...
462629051_256703759 2013-09-23 15:57
改善电源负载瞬态响应性能的设计方法
        以前对电源芯片的理解停留在输出电压是否满足需求、输出电流是否满足负载等一些静态的参数上,但是后来发现即使这些参数满足要求所选用的电源芯片有可能还是不能满足负载瞬变时的波动,所以就查...
我要评论
2
24
关闭 站长推荐上一条 /2 下一条