担心OTA失败变砖?Boot swap能帮你

来源: 瑞萨嵌入式小百科 作者:GJ Huang 2025-02-25 14:33:51

一、Boot swap介绍

本文主要说明如何使用已有的程序更新flash中的固件。使用这种方法代码闪存分为两个区域:执行区域和临时区域。瑞萨flash驱动程序RL78 RFD Type02用于对flash进行重新编程并执行boot swapping。本次说明主要以RL78/F24为例展开boot swapping的说明。

  
二、RL78/F24介绍

RL78/F24新一代超低功耗汽车微控制器,非常适用于实现未来高可靠性的智能执行器和传感器,是低端车身ECU的理想之选。作为对现有RL78/F1x MCU的创新扩展,RL78/F24可满足未来市场的多种需求。RL78/F24具有更高的CPU性能、耐高温能力和更强的外设功能集,非常适合各种应用。

  
RL78/F2x系列产品按ISO 26262标准设计而成,支持高达ASIL B的功能安全(FuSa)。可支持高达EVITA-Light或更高的安全标准。AES加密模块可处理高达256位的密钥长度,并支持安全启动和身份验证功能。为了进一步提高BLDC(FOC)电机控制和DC/DC控制系统的计算性能,RL78/F2x配备了独特的应用加速器IP,以减轻复杂的三角函数和其它计算处理所带来的负荷。

  
三、环境介绍

硬件

如前面所提到的,本文介绍以RL78/F24为主控,对应板子为RL78/F24(R7F124FPJ)Target Board。

软件环境

  CS+ for CC V8.12.00

  Renesas CC-RL Compiler v1.14.00

  Smart configurator for RL78 V1.11.0:

  Board Support Packages.-v1.62(r_bsp)

  Ports v1.5.0

  Flash Driver RL78 Type02(Code flash,Extra Area,Common)v1.00

  
四、闪存空间分布和升级流程

前面介绍过,boot swap的工程有两个区域,分别是执行区域和临时区域。本次实验所选择的RL78/F24的flash大小为256K,其对应的起始和结束地址如下,如果选择其他大小的MCU,可以根据这个进行修改。

  ROM大小   执行区域   临时区域
  96KB   0x8000 – 0xFFFF   0x10000 – 0x17FFF
  128KB   0x8000 – 0x13FFF   0x14000 – 0x1FFFF
  192KB   0x8000 – 0x1BFFF   0x1C000 – 0x2FFFF
  256KB   0x8000 – 0x23FFF   0x24000 – 0x3FFFF
  384KB   0x8000 – 0x33FFF   0x34000 – 0x5FFFF
  512KB   0x8000 – 0x43FFF   0x44000 – 0x7FFFF
  768KB   0x8000 – 0x63FFF   0x64000 – 0xBFFFF

  
256KB闪存详细分布如下:

  
升级流程

  擦除Boot cluster1和临时区域。

  往Boot cluster1和临时区域写入新的固件。

  擦除执行区域。

  把临时区域的内容拷贝到执行区域。

  执行boot swap命令,交换新的boot区域程序到boot cluster0。

  运行新的固件代码。

  
 

五、实现步骤

前面讲了整个升级的流程,接下来对具体的实现步骤进行说明。首先是创建一个包含Boot+APP1的原始工程。通过查看板子原理图可以知道,板子上有LED1和LED2可以用于升级成功的指示灯。Boot+APP1运行时,LED1闪烁,升级成功后LED2闪烁,说明新的Boot+APP2正在运行。需要在Smart configurator中添加引脚的配置,如下P66和P67设为out:

升级需要用到UART,添加UART0,并做如下配置:

同时需要用到RFD type02,添加如下:

所有的外设驱动添加好后,需要对section进行修改,Flash section:

RAM section:

添加完对应的section后,需要手动把对应的Flash section拷贝到RAM。方法如下,重复红框部分代码,一共拷贝5个section,分别为:RFD_CMN_f,RFD_CF_f,RFD_EX_f,SMP_CMN_f,SMP_CF_f。红色方框为拷贝RFD_CMN_f的示例,其他4个section都需要按照次方法进行拷贝。

根据所选MCU改造r_cg_userdefine.h。

改造APP,在userApplicationLoop里,可以选择LED1闪烁表示APP1运行,LED2表示升级后APP2运行。

  
整体代码实现不再赘述,所有代码完成后,编译并烧录到RL78/F24。使用E2-Lite连接板子烧录和调试,串口工具用于传输升级文件

正常运行后,LED1闪烁。

  
接下来,制作一个新的APP2,用于升级。在userApplicationLoop()里面改变代码,让LED2闪烁。

用以下步骤生成APP2的.bin文件。在Hex Format->Hex file format中选择Binary file,空白区域填充为0xFF。

编译后会在相应文件夹下生成一个.bin文件。  
 

断开E2-lite,连接串口工具,具体连接为P61 — TXD, P62 — RXD,EVDD — 3.3V,GND — GND。

  
运行BootSwapGUI.exe,选择256K,选择对应的COM,打开前面生成的bin文件。

点击START,观察进度条,完成后,MCU会自动完成boot swap的动作,最后观察LED2,LED2开始闪烁,说明升级成功。在升级的过程中,LED1一直保持闪烁 ,说明这种方法在升级时不影响上一个版本的运行。

  
总结

Boot swap是Renesas一种特殊的MCU固件升级方式。这种方式的优点是,在接收新的固件过程中,不需要中断当前APP的运行,这一点在很多应用中是至关重要的。另外,在一般的重新编程(升级)过程中,可能出现复位或者断电等外部因素,导致中断向量表、基本函数等数据损坏。任何一项数据损坏都可能会导致MCU无法正常启动。从boot swap的特点分析得知,boot swap可以很好地避免这种情况。因为任何时候都可以保证MCU有一个完整的boot cluster1和app1可以运行。所以另外一个重要的优点是,boot swap可以防止MCU升级失败导致“变砖”。

0
收藏
0