历史上的今天
今天是:2025年04月20日(星期日)
2021年04月20日 | MSP430两种串口升级方式对比
2021-04-20 来源:eefocus
言归正传。我做过两种方式的串口升级固件程序。我把他们分别成为loader方式和IAP方式。
所谓的loader方式就是最初只需烧写loader程序即可,loader程序负责通过串口接收应用程序代码,完整接收并校验无误之后,跳转到应用程序区执行应用程序。再复杂一点的可以在应用程序中设置特定触发方式使其跳回loader程序区(系统复位),此时便可以接收另一套应用程序代码实现多次升级,当然了更复杂的甚至可以将除去loader程序区之外的flash区域划分多个区分别保存当前应用程序和新版应用程序,即使在新版应用程序升级失败的情况下还可以还原旧版应用程序,实现系统备份还原;
所谓的IAP其含义就是在应用升级,具体来讲就是在应用程序中接收程序代码(暂存在非当前执行区,此时需要程序员合理规划flash的分区),接收并校验无误之后跳转到引导程序(暂时也叫做引导程序),该引导程序根据flash的写入情况决定是将新版程序拷贝到应用程序执行区(这个执行区最好固定地址空间)还是还原原来的旧版应用程序(此时整个flash分以下几个区:引导程序区、旧版应用程序区(做系统还原之用)、新版应用程序区(新接收的程序代码暂存区(不同于应用程序执行区))、应用程序执行区(也即IAP中的A(Application))在这四个分区中,除引导程序区之外的其他三个分区其大小最好一致)。
IAP设计时引导程序只负责条件判断flash代码的区域拷贝、中断向量重映射等一些基本工作,相比于loader方式引导程序无需编写串口通信程序(loader方式时串口通信接收程序最好设计成轮询方式)而且引导程序相对更加固定,但是采用此种方式时首次烧写程序需要先烧写引导程序,再烧写应用程序(仿真器烧写应用程序时不能把引导程序区擦除掉),而且每次升级的应用程序起码应该保证串口通信部分程序无bug,否则可能影响下次升级!
最后,有一个设想还未实现,如果引导程序要进行扩展(并非完全因为bug)我们可以在应用程序中接收引导程序代码覆盖旧版引导程序(或者像备份应用程序一样将其做个备份),就像两个木板过河,我们踩在其中一块木板上拿着另一块木板前移,之后跳转到前面的木板再把后面的木板前移如此一来便可以实现过河。
在此也是这样的,当程序在引导程序区执行时我们可以修改应用程序区,同样的当程序运行到应用程序区时我们也可以修改引导程序区!
如此一来程序可以设计的相当灵活,方便不合适拆卸的设备的固件维护,但是过于灵活的程序设计也可能带来更隐蔽的bug。具体设计到什么程度我想应该视应用场景而定吧!
史海拾趣
|
My Mini2440 board just arrived. I did copy the file rockbox.mini2440 (the Rockbox firmware which I did build before) to .rockbox folder on SD Card. After inserted the SD Card and turned power on, and waited a few seconds, I had ...… 查看全部问答> |
|
请教大家一个小问题,我有一个红外线遥控MP3 音箱,红外线遥控遇到什么障碍就不听使唤、遥控距离有限,就想把遥控改成无线的,可对无线不怎么董,想请大家帮帮忙。 我在网上找到带PT2272-M4编码器的遥控收发套件,这个能改吗? … 查看全部问答> |
|
哪位大虾能发给我个串口通信的实例呀??最好用EVC写的。。感激涕零。\\ 我的邮箱6094189ye@163.com 我看到书上有CSerial 这个类,但STANDARDSDK下面没有这个类呀。。。???… 查看全部问答> |
|
小弟正在学习楚狂人写的window文件系统过滤开发教程,在学习第三章分发例程,fast io 时碰到以下问题: _inline wd_void wd_fio_disp_set_query_standard( wd_drv *driver, wd_fio_query_standard_func func) { driver->Fa ...… 查看全部问答> |
|
目前,LED实现白光的方法主要有三种: 1、通过LED红绿蓝的三基色多芯片组和发光合成白光。 优点:效率高、色温可控、显色性较好。 缺点:三基色光衰不同导致色温不稳定、控制电路较复杂、成本较高。 2、蓝光LED芯片激发**荧光粉,由LED ...… 查看全部问答> |




