历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2018年02月12日 | 嵌入式系统bootrom自动备份及切换技术的应用

2018-02-12 来源:21ic

    随着物联网概念的兴起,嵌入式系统在社会各个领域的应用越来越广泛。由于产品应用的场合越来越复杂,对于嵌入式产品开发就提出了新的要求,其中最明显的表现就是嵌入式系统软件的维护变得日益重要。嵌入式系统投入实际环境中运行后,一部分在软件开发过程中无法充分测试的错误便会暴露出来;在嵌入式系统的运行期内,用户也往往会对嵌入式软件提出新的功能要求和性能要求。因此,嵌入式软件的更新逐渐成为嵌入式系统实际应用的一个重要问题。在嵌入式系统安装数量较多,或安装位置不方便的情况下,采用人工更新方式会花费较大的人力和物力。这时候就需要实现软件的远程自动更新,通过在系统中设计一个有线或无线的通信接口,在异地采用远程通信的方式实现嵌入式软件的自动更新。


    实现自动更新能有效地降低嵌入式软件的更新和维护成本,因此得到了广泛的应用。但是,在实际的应用过程中也发现了一些问题。由于更新过程中发生的一些异常操作(比如突然断电、更新数据传输错误等),会导致产品软件损坏,用户无法维修,必须发回产品生产厂家进行维修,这给产品使用造成了很大的不便。

    分析这种问题发生的原因,当采用嵌入式Linux、Windows CE等较为复杂的操作系统时,一般设计一个独立的bootrom程序,对系统进行初始化并引导嵌入式操作系统。而系统的更新仅仅考虑备份了应用层程序或是嵌入式操作系统,没有对bootrom进行备份,所以当升级boot rom出现异常后,系统将无法再次启动。同时,由于bootrom的加载必须通过烧片机或专用JTAG仿真器进行,而这些工具一般无法在现场使用,用户也不具备这种条件,因此必须返回厂家进行维修。本文针对这种问题,提出一种bootrom自动备份及切换技术,当系统更新出错后,产品能自动切换从备份bootrom启动,启动后再恢复已写坏的主bootrom。

    1 系统设计

    1.1 设计思想

    对于嵌入式系统,基于ARM、Power PC或MIPS架构,以及基于Linux、VxWorks等操作系统,其启动原理都是一样的。首先,系统上电后复位电路复位整个系统;在复位过程中,CPU读取外部配置(这个配置一般由CPU引脚通过上下拉电阻确定);复位结束后,CPU根据配置从相应的外部程序存储器的特定地址读取bootrom代码,大多数嵌入式系统一般采用的是NOR Flash,也有部分采用NAND Flash或CF卡等存储器;然后执行bootrom代码,初始化CPU各个部分,最后引导操作系统及应用软件启动。

    对于一个确定的嵌入式系统,其CPU读取第一条指令的地址和片选是一定的。下面就以MPC5200B系统为例,说明实现bootrom自备份及自切换系统的实现方法。

    MPC5200B支持的bootrom地址为0x00000000或是0xfff00000,由复位配置确定从哪一个地址读取,支持的bootrom空间为512 KB。要实现bootrom自动备份及自动切换有两种方案:

    ①采用2片NOR Flash,同时挂在MPC5200B的本地总线上,通过一个CPLD提供2个Flash的片选信号,由软件和CPLD根据boot启动状态确定把boot_cs输出给哪一片Flash。

    ②采用1片NOR Flash,划分两个区域,每个区域为512 KB,通过CPLD去切换地址实现。

    本文采用方案一实现bootrom切换功能。

    1.2 总体设计

    如图1所示,CPU输出两个片选信号(boot_cs和CSD给CPLD,同时CPU LOCal bus的其他信号分别连接到FlashA、FlashB以及CPLD上,CPLD输出一个复位信号给CPU,复位电路和时钟电路给CPLD和CPU提供复位和时钟信号。

a.jpg?imageView2/2/w/550


    要实现bootrom自动切换及备份,需要CPLD和软件共同进行处理。默认主Flash为FlashA,备份Flash为FlashB。具体步骤如下:
    ①启动时,CPU发出boot_cs信号,从Local bus的0x00000000地址开始读取软件,CPLD默认把boot_cs信号送给FlashA。如果CPU正常启动,等CPU启动完成后,软件向CPLD的bootrom启动寄存器中写入值A。
    ②CPLD延时5 s后读取bootrom启动寄存器,当发现这个寄存器值为A时,代表bootrom已经成功启动,CPLD锁定输出boot_cs给第一片Flash。同时,输出CS1给FlashB,软件检测FlashB中代码的完整性。如果完整,则不处理;如果发现FlashB中代码不完整,重新往FlashB中写入代码。

    ③如果FlashA中的代码已经损坏,CPU将无法启动。此时,CPLD等待5 s后检测到的bootrom启动寄存器值仍为初始值,CPLD认为FlashA已损坏,切换boot_cs信号输出到FlashB,然后发送一个复位信号给CPU,CPU重新开始启动过程。CPU从FlashB中启动代码,启动完成后,软件向CPLD的bootrom启动寄存器中写入值B。此时输出CS1给FlashA,软件检测FlashA中代码的完整性。如果完整,则不处理。如果发现FlashA中代码不完整,则更新FlashA中的代码,更新完毕后通知CPLD复位CPU,并输出boot_cs给FlashA,从FlashA重新启动。
    ④系统更新bootrom时,首先改写FlashA中的代码,并重新启动;然后验证FlashA中代码的完整性,如果FlashA中代码完整,则更新到FlashB中。

2 系统实现
    本系统由软件和CPLD配合实现,其中CPLD根据软件反馈的状态来确定片选的分配以及系统的复位。软件则在启动后对cpld Bootrom_run寄存器进行置位,并对两片Flash的代码进行CRC校验。如果有错误,则修复相应的Flash代码,并记录相关错误信息。
    CPLD工作流程如图2所示。


b.jpg?imageView2/2/w/550


    本系统采用了ALTEra公司的MAXII CPLD实现,编译通过后仅占用124个逻辑单元,很方便就可以把相关的代码添加到产品现有的CPLD中,实现bootrom自动备份和切换功能。

结语
    本文提出了一种基于CPLD实现嵌入式软件bootrom自动备份及切换功能的方法。该方法在PowerPC处理器MPC5200、MIPS处理器RM7000A和ARM处理器ATM9200的平台上都得到了验证,均能保证系统的正常启动,并能完成bootrom的自动恢复,为产品软件更新升级提供了强有力的保证。本设计由于采用了两片Flash,因此增加了一定的设计难度和成本。但相对于可靠的bootrom更新机制、自动化和可靠性所带来的维护成本的降低,这个代价是值得的。


推荐阅读

史海拾趣

CML Microcircuits公司的发展小趣事

为了进一步扩大市场份额,CML Microcircuits公司开始积极拓展全球市场。通过与当地代理商和分销商建立合作关系,CML的产品逐渐进入了全球各地的电子市场。同时,公司还设立了多个海外研发中心和销售中心,以便更好地服务全球客户。这些举措不仅提升了CML的品牌知名度,也为其带来了更多的商业机会。

Connor-Winfield公司的发展小趣事

在电子行业中,技术的创新和产品的品质是企业生存和发展的关键。Connor-Winfield深知这一点,因此在发展过程中始终注重技术创新和品质提升。公司投入大量资源进行研发,不断推出具有创新性和高性能的产品。同时,公司还建立了严格的质量管理体系,确保每一件产品都符合最高的品质标准。这些努力使得Connor-Winfield的产品在市场上赢得了良好的口碑。

Bel Power Solutions公司的发展小趣事

随着技术的不断进步,Bel Power Solutions始终保持着对创新的热情。公司不断加大研发投入,积极引进先进技术和人才,推动产品的升级换代。其中,一项重要的技术突破是公司成功研发出具有高效能、高可靠性特点的电源转换技术。这一技术的推出,不仅提升了公司产品的竞争力,还为客户提供了更加优质、可靠的电源解决方案。同时,公司还根据市场需求,推出了多款定制化、个性化的电源产品,满足了不同客户的特殊需求。

BILIN公司的发展小趣事

随着技术的不断进步,Bel Power Solutions始终保持着对创新的热情。公司不断加大研发投入,积极引进先进技术和人才,推动产品的升级换代。其中,一项重要的技术突破是公司成功研发出具有高效能、高可靠性特点的电源转换技术。这一技术的推出,不仅提升了公司产品的竞争力,还为客户提供了更加优质、可靠的电源解决方案。同时,公司还根据市场需求,推出了多款定制化、个性化的电源产品,满足了不同客户的特殊需求。

Honeywell公司的发展小趣事

背景:霍尼韦尔公司的历史可以追溯到1885年,由发明家艾伯特·布兹在美国明尼阿波利斯创立布兹电子温度调节器公司。

发展:布兹成功研发出了一种名为“风门挡板”的装置,该装置能够自动调节室内温度,这是当时的一大技术突破。随着业务的不断发展,布兹电子温度调节器公司被统一温度控制公司收购,并在1893年更名为电子供热调节器公司。

关键事件:1898年,电子供热调节器公司被W.R. Sweatt收购,并于1916年更名为明尼阿波利斯热调节器公司。这一系列的更名和收购奠定了霍尼韦尔在恒温器领域的基础。

General Cable公司的发展小趣事
在红外遥控应用中,通信距离可能受到发射功率、接收灵敏度、环境光干扰等因素的影响。解决方法包括增加发射功率(在允许范围内)、使用更高灵敏度的接收头、优化发射和接收角度等。

问答坊 | AI 解惑

不用单片机开发而实现单片机功能

不用单片机开发而实现单片机功能的USB芯片 市面上带USB接口的单片机比比皆是,但是这些芯片对于产品开发者来说,都要面临三个关卡。 一是需要在单片机上编写相应的程序,同时要具备这样的前提:不仅要熟悉该单片机的脾气(如果是汇编指令则更费 ...…

查看全部问答>

求助

哪位仁兄有8*8点阵显示的吗?最好proteus原理图和程序都有,万分感谢。帮忙发下,邮箱oyh123457980@163.com…

查看全部问答>

屏幕截图问题 disk full!(急)

下面是我的代码: 我运行调试出现“Disk fulla ccessing\\NandFlash\\Y.bmp\"的对话框时怎么回事啊?但是我的硬盘实际上有很大的空间,调试了很久了,还是找不出原因,大家 帮忙看看代码啊。 void Drawninformation::SaveDCToBMP(HDC hDC,int ...…

查看全部问答>

关于HT3226湿度传感器的问题.

大家好:   传感器输出9440赫兹代表10%的湿度,以后每下降80赫兹就增加5%的湿度.请问用51单片机怎么编写程序呢...                             此致                     ...…

查看全部问答>

在C中如何实现互斥访问

                                 “Cortex-M3权威指南”中CH5说到了“互斥访问”,也用“LDREX/STREX”举例说明了,请问如何在C语言中实现这种互斥 ...…

查看全部问答>

STC-isp的烧录软件问题,求助啊,求助吖!!!

stc-isp烧录软件突然偶尔才可以烧尽程序,很苦恼! 情况大概是这样: 1、条件:因为板子是用串口烧录,我用了一条USB转串口的线;烧录软件是STC_ISP_V479;冷启动烧录(点击烧录--冷启动--自动烧录) 2、上上星期还是好好的,只出现过两次在烧录 ...…

查看全部问答>

做到这五点,你就是公司的宝~

1)不要觉得不顺就想跳槽,哪个公司都有问题; 2)愿意叫你放手让你做的领导,要珍惜; 3)公司的问题就是你脱颖而出的机会,抱怨和埋怨公司就是打自己耳光; 4)为公司创造利润才是你存在的价值,公司不是慈善机构; 5)反映问题谁都会,思考并 ...…

查看全部问答>

谈谈用过阿迪老师的DMAVR-128开发板及评价……

本帖最后由 gh131413 于 2014-3-13 11:10 编辑 用了两个星期的阿迪老师的这块AVR开发板,忍不住评价一下: 说实话,DMAVR-128适用于学过AVR的人并且有一定的基础,一点都不适合刚入门的初学者,拿他的例程程序来说吧,本来一个很简单的1602和128 ...…

查看全部问答>

tm4c123g的一些源代码

大家好,给大家发一些m4的学习资料,这里是ti的一些源代码。 内容包含了gpio,定时器,pwm,adc等程序。 后续,我会把自己的学习过程整理出来,和大家分享来一起学习。 …

查看全部问答>