一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升级失败导致“变砖”。