嵌入式系统固件升级的设计

时间:2022-07-25 03:37:05

嵌入式系统固件升级的设计

引言

通常在嵌入式系统中,通过JTAG接口将固件烧写到目标板的FLASH中,若需对固件进行升级,则需重新烧写新的映像文件,直接覆盖原来的映像文件。这种更新固件的方法在产品开发阶段很常见,使用也很方便。但是当厂家生产出产品后,用户购买回去使用,如果设备出现了系统漏洞或者用户不满足现有功能而提出更多需求时,也需要对系统升级或者维护系统功能。此时如果仍然使用JTAG接口更新固件,就需要开发人员到用户现场去完成升级,因为用户一般是不具有JTAG烧写设备的。因此,我们需要设计一种简单易行的方法,可以通过已有的接口让用户自行更新固件,就像Windows操作系统打补丁一样,安装个软件就能实现升级。本文提出了一种嵌入式系统固件升级的设计,不仅可以节省人力物力,而且可以提升系统的可靠性。

FLASH布局

以Winbond公司的W25Q80BVFLASH为例,如图1所示,当状态寄存器第14位CMP为0的情况下,通过设置状态寄存器的第2~6位,可以把FLASH的低64K,低128K,低256K,低512K或者全部1M设置成保护状态。

系统上电,首先从FLASH地址0x00000000处开始运行,因此这个区域存放的Bootloader程序。我们把Bootloader放在0~64K地址空间,把原始程序放在64~128K地址空间,然后通过设置状态寄存器把0~128K地址空间永久保护起来;把128~192K地址空间作为更新程序存放的地址,把192~256K地址空间作为引导数据存放的地址,128~256K地址空间可以通过设置状态寄存器来选择保护或者不保护,当需要通过上位机软件更新程序的时候,设置成不保护状态,程序更新完了再设置成保护状态。

固件更新流程

产品以后,如果发现有缺陷需要通过软件来修正或者需要更新软件以实现新的功能,就需要更新固件。本文设计通过上位机软件与下位机微处理器(MPU)通信来实现固件更新。通过上位机软件,把厂商的新版固件传送给微处理器(MPU),传送方式可以是串口、以太网口,USB接口等,这取决于设备的硬件外设。

系统上电,首先从FLASH首地址0x00000000开始运行,这个区域存放的是Bootloader代码。Bootloader的作用主要是用来更新固件以及验证固件的完整性(即是否有代码被破坏)。当固件更新过程中,只有固件2区域会被重写,而Bootloader始终不变,这样可以保证固件更新功能不会损坏。首先,Bootloader会对硬件做初始化;接着计算固件2的校验码,然后和保存在FLASH引导数据区里的校验码相比较来验证固件2(通常固件2都会比固件1新)的完整性,如果验证通过,Bootloader就会跳转到固件2继续执行,但如果验证失败,那么Bootloader会验证固件1,如果通过就继续执行固件1,如果仍然失败,那么说明固件1和2都损坏,程序无法执行下去,Bootloader将会等待上位机发送固件更新的命令,并且通过显示错误代码告诉用户固件损坏,请立即更新固件。如果设备有液晶屏或者数码管则可以显示文字或者数字;如果没有这类外设则可以通过LED灯的闪烁频率变化来实现。Bootloader流程图如图4所示。

上位机更新软件是用来更新固件的工具。它与Bootloader里的更新程序配合工作来实现固件更新的功能。用户通过该软件的图形化界面选择一个需要更新的固件文件,然后通过通信接口向下位机微处理器(MPU)发送固件更新指令,当下位机微处理器收到该指令以后,就跳转到Bootloader的固件更新程序继续进行固件更新任务,把从上位机传送过来的固件写入FLASH的132K~192K区域,直到更新完成。最后,上位机更新软件对更新完的固件进行验证,将写入的固件读回来与原始文件进行比对,如果验证通过,则计算更新文件的数据校验码,并写入FLASH引导数据区(192~256K)的指定地址。

数据校验

数据校验,通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验码。接收方用同样的算法计算一次校验码,如果和随数据提供的校验码一样,就说明数据是完整的。校验和是冗余校验的一种形式。它是通过错误检测方法,对经过空间(如通信)或者时间(如计算机存储)传送的数据的完整性进行检查的一种简单方法。

常见的数据校验方法有:

(1)累加和校验法

累加和校验法是简单的将所有数据相加,计算出一个校验和。

(2)异或校验法

(3)循环冗余校验法(CyclicRedundancyCheck)

CRC校验是一种循环冗余算法,主要用来检测或校验数据传输或者保存后可能出现的错误。该算法利用除法及余数的原理来进行错误检测的,将接收到的码组进行除法运算,如果除尽,则说明数据无误;如果未除尽,则表明数据出现差错。CRC校验具还有自动纠错能力。CRC校验主要有计算法和查表法两种方法。但由于该算法复杂,校验速度会比较慢,对开机速度有要求的情况就不建议采用了。然而,现在有些单片机已经具备了硬件CRC校验电路,为实现快速CRC校验提供了可能。

各种校验算法各有其优缺点,比较结果如表1所示。我们可以根据实际

情况选择一种最合适的算法。

结语

该设计方案以MPU为核心,通过Bootloader与固件之间的程序跳转来实现系统固件升级,并已应用于产品开发中。该设计增强了系统维护,缩短了产品的开发周期,节约了大量的人力、财力,增加了与用户的交流互动力度。与传统设计相比,在开发时间、成本和灵活性等方面都占有优势。该设计已经调试成功,并作为一个功能模块用于某电子产品中,在产品需要增加新功能和维护系统稳定方面起到了巨大的作用。该方案不仅能用于系统功能升级,也能用于为程序打补丁和写入数据等,可用于各种架构MPU,因此该设计方案具有广泛的应用前景。该设计采用了两个固件映像的方案,可以根据实际情况采用多映像方案,以达到增强系统稳定性的目的。

上一篇:2013 TOP 10电源获奖产品 下一篇:用于智能电网的新一代智能电子设备