导言
跟着物联网概念的鼓起,嵌入式体系在社会各个领域的运用越来越广泛。因为产品运用的场合越来越杂乱,关于嵌入式产品开发就提出了新的要求,其间最显着的体现便是嵌入式体系软件的保护变得日益重要。嵌入式体系投入实践环境中运转后,一部分在软件开发进程中无法充沛测验的过错便会露出出来;在嵌入式体系的运转期内,用户也往往会对嵌入式软件提出新的功用要求和功用要求。因而,嵌入式软件的更新逐步成为嵌入式体系实践运用的一个重要问题。在嵌入式体系装置数量较多,或装置方位不便利的情况下,选用人工更新办法会花费较大的人力和物力。这时候就需求完结软件的长途主动更新,经过在体系中规划一个有线或无线的通讯接口,在异地选用长途通讯的办法完结嵌入式软件的主动更新。
完结主动更新能有效地下降嵌入式软件的更新和保护本钱,因而得到了广泛的运用。可是,在实践的运用进程中也发现了一些问题。因为更新进程中产生的一些反常操作(比方忽然断电、更新数据传输过错等),会导致产品软件损坏,用户无法修理,有必要发回产品生产厂家进行修理,这给产品运用造成了很大的不便利。
剖析这种问题产生的原因,当选用嵌入式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供给复位和时钟信号。
要完结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所示。
本体系选用了Altera公司的MAXII CPLD完结,编译经往后仅占用124个逻辑单元,很便利就可以把相关的代码添加到产品现有的CPLD中,完结bootrom主动备份和切换功用。
结语
本文提出了一种依据CPLD完结嵌入式软件bootrom主动备份及切换功用的办法。该办法在PowerPC处理器MPC5200、MIPS处理器RM7000A和ARM处理器ATM9200的平台上都得到了验证,均能确保体系的正常发动,并能完结bootrom的主动康复,为产品软件更新晋级供给了强有力的确保。本规划因为选用了两片Flash,因而增加了必定的规划难度和本钱。但相关于牢靠的bootrom更新机制、主动化和牢靠性所带来的保护本钱的下降,这个价值是值得的。