RL78如何使用加载Bootloader做OTA

cathy的头像
cathy 发布于:周三, 06/01/2022 - 17:11 ,关键词:

一、概述

RL78系列是16bit MCU的王者,以低功耗和高性价比服务全球客户。随着社会进步时代发展,OTA在电子行业越来越越重要,RL78系列MCU有两个boot cluster,支持多种编译环境和多种方式的bootloader,本文以客户常用的CS+环境配合CC-RL编译器,给大家介绍一种OTA的MCU端的实现方式。

二、基本原理

RL78系列MCU的内存映射,以64K flash的R5F100LE为例,如图

“RL78如何使用加载Bootloader做OTA"

可以看到分为2个boot Cluster:Boot cluster 0和Boot cluster 1。

程序启动时,从Boot cluster 0开始执行。

这两个Boot cluster在程序运行过程中可以通过调用瑞萨自编程库(Flash Self-Programming Library)里面的boot swap函数来翻转,即Boot cluster 0可以变成1而Boot cluster 1变成Boot cluster 0,基于此,我们可以将bootloader程序存放于boot cluster 1里面,应用程序则从Boot cluster 0执行,当程序判断相关条件,需要OTA时候,可以调用boot swap函数翻转boot cluster,这样翻转后reset,则原来的bootloader段变成了Boot cluster 0,可以执行OTA相关操作,将新程序的Boot cluster 0内容写入Boot cluster 1,应用程序段写入地址0x2000开始的flash;

OTA完成后,再调用boot swap,这时bootloader段自动翻转到原来的Boot cluster 1区域,新程序的boot区域回到Boot cluster 0,其中断向量表不受影响。

整个OTA过程:

“RL78如何使用加载Bootloader做OTA"

三、实现方式

1、Bootloader程序编写:代码大小限制在1个boot cluster内(4k)

作用:用来接收新程序的代码并擦除老程序、更新老程序。

Bootloader工程segment划分:

“RL78如何使用加载Bootloader做OTA"

需要注意检查生成代码应该在0-0xfff内,不能越界

2、Bootloader生成的hex文件转换成.c文件(J-Link工具可用来转换),输出一个大数组,备用。

如下图,保存为.c文件:

“RL78如何使用加载Bootloader做OTA"

即可生成大数组:

“RL78如何使用加载Bootloader做OTA"

3、Application应用程序段代码编写与集成bootloader:应用程序段的代码编写无需考虑中断向量表偏移等问题,因为程序正常跑,与即将放在Boot cluster 1区的bootloader无关。但是需要将与boot swap相关的代码放置在Boot cluster 0区域内。

App工程Segment划分:

“RL78如何使用加载Bootloader做OTA"

I. 0x1000-0x1fff不能存放其他数据,该区域为boot cluster 1,定义段为.constBOOTAREA_f,如上图。程序代码中,使用如下预编译指令将bootloader放入Boot cluster 1中

#pragma section BOOTAREA

__far const unsigned char bootloader[]={xx,xx};//bootloader itself

#pragma section

II. 划分一个App区域的boot区,把这个区域放在0x0000 to 0xFFF. 如上图,.BOOT_f段。程序中可以使用预编译指令#pragma section来将相关代码放入这个区域,例如在编写代码时候加入如下代码:

#pragma section text .BOOT

/* write your code here */

#pragma section 

III. 那么这段代码会放入.BOOT_f区域。请注意,需要从生成的map文件去判断这个区域不超过0xfff,即不与0x1000-0x1fff Boot cluster 1段重合。

4、Application代码烧入MCU,则MCU内便集成了bootloader。

5、新的应用程序编写:与第3步骤大致相同,但是不需要加入III的Boot cluster 1区域大数组。

6、有新的应用程序需要OTA更新,则先与Application程序握手成功,然后执行第二章的OTA流程;也可在Boot cluster 0里完成握手,执行OTA。

Note:使用fsl自编程库和fdl data flash库时候需要注意代码段划分。

来源:瑞萨MCU小百科
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 1449