1、系统描述在类似于服务器供电、计量等的应用程序中,系统需要连续运行以减少停机时间。但通常,在固件升级期间,由于错误修复、新功能和/或性能改进,系统将从服务中删除,从而导致相关实体停机。这可以用冗余模块来处理,但会增加系统的总成本。另一种方法,称为实时固件更新(LFU),允许在系统仍在运行时更新固件。切换到新的固件可以通过或不重置设备来完成,后者更复杂。
本参考指南介绍了在TMS320F28003x或TMS320F28004x设备上使用两个闪存库而没有设备重置的LFU的详细信息,详细介绍了所涉及的具体挑战以及如何解决这些挑战的建议。LFU是在C2000M数字功率降压转换器BoosterPack参考设计上实现的。该文档演示了在C28x CPU或CLA上运行主控制回路的LFU功能。1.1关键系统规格
2、框图基于LFU的系统框图如图2-1所示。
3、设计注意事项
3.1、构建模块LFU设计由许多构建块组成:一个发出LFU命令的桌面主机应用程序,目标设备Flash上的自定义引导程序,与主机通信并启用LFU,连接主机和目标的通信外设(例如SCI/UART, CAN, I2C等),下载和执行的LFU兼容的应用程序,支持LFU的编译器,具有LFU相关硬件支持的MCU,以及带有多个物理上独立的闪存库的闪存。双或多个闪存库允许驻留在一个闪存库上的应用程序固件执行,而另一个闪存库被更新。
3.2、Flash分区双板Flash分区示意图如图2-2所示。每个库中的两个扇区被分配给自定义引导加载程序,它由Flash库选择逻辑、SCl内核和Flash api组成。这些在固件升级期间不会改变。库1不包含库选择逻辑。库中其余的Flash扇区分配给应用程序。库选择逻辑允许引导加载程序确定哪个(如果有的话)闪存库被编程,以及哪个库包含最新的应用程序固件版本。通过暗示,该函数是软件系统的入口点。Scl内核是一个函数,它实现从主机传输映像,并通过Flash编程api(在Flash或ROM中)对Flash进行编程。在第2区保留了几个位置来存储以下信息:
start -表示Flash擦除完成,程序/验证即将开始。
固件修订号(REV)——由库选择逻辑用于确定库0和库1之间较新的固件版本。
KEY -如果此位置包含特定模式,则认为库中的固件有效。
3.3、应用LFU流程LFU软件流程如图2-3所示。设备复位后,执行总是在bank选择逻辑中开始,该逻辑根据固件修订字段REV确定从哪个Flash bank执行,并将控制权传递给相应的应用程序。在必要的系统初始化和中断启用后,一个实时控制回路在一个ISR内执行,对应于一个特定的中断向量。在isr之间的空闲时间,执行一个由低优先级函数组成的后台循环。如果主机发出LFU命令,它会触发MCU中的SCI接收中断,并执行相应的ISR(优先级低于控制环路ISR)并识别主机命令请求。在后台循环中,命令被解析,LFU请求被识别,控制权传递给自定义引导加载程序BOOT,即SCI Flash内核,它从主机下载新的应用程序映像并对适当的Flash库进行编程。如果Flash bank 1上的应用程序正在运行,则控制权将传递给bank 1上的SCI Flash Kernel,从而编程bank 0。一旦新的应用程序更新在Flash中,切换的过程切换到新的固件可以开始了。
叙述来源