通过Boot swap实现瑞萨RL78/F24 MCU固件升级

描述

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分