RL78

背景知识

什么是Chat-GPT?

Chat-GPT是由OpenAI开发的AI工具,它可以基于预先训练的文本信息理解用户输入的文本或问题,并产生答案。但是,它并不总是生成准确的内容,所以用户在使用时需要注意这一点。

什么是Arduino?

Arduino是一个用于轻松进行电子项目的开源平台。它由一个配备有微控制器的板(Arduino板)和一个软件开发环境(Arduino IDE)组成。截止到2023年9月,使用Arduino IDE,可以为以下板开发RL78产品的软件。

● RL78/G24快速原型开发板

● RL78/G23-64p快速原型开发板

● RL78/G22快速原型开发板

● RL78/G16快速原型开发板

● RL78/G15快速原型开发板

支持的板卡信息请点击下方链接到浏览器中打开访问:

https://github.com/renesas/Arduino/wiki 

实际尝试AI编程

为了这次展示,我使用了RL78/G23-64p快速原型开发板来生成一个使用Chat-GPT使LED闪烁的程序。我会从第一步到第五步解释实际的操作过程。

1、环境设置

准备RL78/G23-64p快速原型开发板(RL78/G23-64p FPB)。使用Micro USB Type-B电缆将板连接到您的PC。

1.jpg

RL78/G23-64p Fast Prototyping Board (RL78/G23-64p FPB)

您可点击文末阅读原文访问查看RL78/G23-64p快速原型开发板的更多相关信息。

在您的PC上安装Arduino IDE。安装完成后,从板管理器中安装RL78/G23-64p FPB的包。

安装指南请点击下方链接打开访问:

https://github.com/renesas/Arduino/wiki/Quick-Start-Guide 

2、向Chat-GPT输入电路信息

对于我们要创建的程序,我们将使用板载LED(用户LED)。

2.png

参考下面的链接中的信息,将LED引脚信息和控制信号信息输入到Chat-GPT。

引脚信息参考点击下方链接打开方访问:

https://github.com/renesas/Arduino/wiki/RL78G23-64pin-Fast-Prototyping-Board 

输入提示的例子

Arduino板规格:

该板特有两个LEDs(LED1,LED2)

LEDs通过电阻上拉,并且阴极侧连接到引脚

名称 引脚 备注

LED1 16   -

LED2 15   -

3、向Chat-GPT输入编码规范

我请求Chat-GPT编写一个程序,使LED1和LED2每秒闪烁一次。

输入提示的例子

软件规格:

LED1和LED2应该每秒切换开和关

LED1的初始状态是开灯,而LED2的初始状态是关灯

4、执行Chat-GPT输出的程序

在Arduino IDE中创建一个新的草图,复制并粘贴Chat-GPT输出的程序,然后运行验证和上传。

关于Arduino IDE的详细操作和执行程序,请点击下方链接打开查看:

https://github.com/renesas/Arduino/wiki/Quick-Start-Guide 

https://github.com/renesas/Arduino/wiki#tutorial-video 

5、 验证和修订

这次,程序在gpt-3.5和gpt-4中都按预期输出了。如果程序没有按预期运行,请请求Chat-GPT修订。这时,请努力输入简洁明了的信息。此外,gpt-4比gpt-3.5更有可能产生预期的结果。

3.png

结论

尽管这次的主题很简单,但我成功地使用Chat-GPT生成了目标代码。我希望在未来挑战更高级的主题。对于那些感兴趣的人,为什么不尝试自己进行AI编程呢?

向Chat-GPT输入的完整提示文本

Arduino程序创建请求

Arduino板规格:

该板特有两个LEDs(LED1,LED2)

LEDs通过电阻上拉,并且阴极侧连接到引脚

名称 引脚 备注

LED1 16   -

LED2 15   -

软件规格:

LED1和LED2应该每秒切换开和关

LED1的初始状态是开灯,而LED2的初始状态是关灯

关于ChatGPT生成的代码的一般提醒

在使用生成的代码之前,建议进行某些筛选过程,因为这些代码可能侵犯第三方的知识产权或包含恶意软件片段,以及导致其他不希望的结果。

来源:瑞萨电子

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

围观 20

问题概述

客户使用IDE CS+ CACX编译瑞萨RL78系列MCU R5F1027A,出现报错信息,code flash无法分配。而实际使用的flash 约10K还远不到16K。为什么R5F1027A(flash空间16K)使用的code flash不到16K就出现添加新代码后编译,提示无法分配的错误?

1.png

分析

1、经过排查没有对IDE编译环境CS+ CACX做特殊的设置,在项目代码比较少的情况下,编译也正常。

2、针对提示的错误信息,尝试屏蔽不同的软件函数,发现需要减少较多的软件代码,编译才恢复正常。

3、多次尝试后发现flash空间在超过8K左右后,会出现编译错误。

4、查看项目的HEX文件。发现flash地址从0x0C57,到0x1FFF的空间都是填充的FF,也就是这段flash空间没有使用到。

2.png

5、查看map文件,发现和HEX文件相吻合,@@CODEL代码flash段是从0x20C6开始分配的,也就是代码段分配在16K空间的后面8K。这样前面的flash空间有13A9字节,将近5K没用上。

3.png

4.png

6、分析确认到原因后,要想办法解决,多次尝试无果,再分析map文件。发现分配的代码段@@CODEL,从0x20C6开始是跟@@CNST 这个常量的段是相邻的。

7、想办法尝试改变@@CNST的地址分配,看看@@CNST的地址改变,是否会影响@@ CODEL代码段的地址分配。

8、把@@CNST这个常量的段,通过添加DR文件,设置到后面地址0x3C00后,发现编译正常了。

5.png

结论

查看生成的HEX文件,发现前面的flash空间0x0C57也用上了,问题得到解决。

通过和同事交流,以及多番查阅IDE的HELP文档,分析了解各个代码段@@XXXX的含义,解决了客户端遇到的问题。

6.png

打开进入瑞萨中文论坛了解更多信息:

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/

来源:瑞萨MCU小百科

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

围观 48

低引脚数封装器件带来更多选择,进一步扩展RL78产品家族

全球半导体解决方案供应商瑞萨电子(TSE:6723)今日宣布,其低功耗RL78产品家族推出一款全新通用多功能微控制器(MCU)——RL78/G15。该器件以较小的封装尺寸面向8位MCU应用。在8至20个引脚的封装尺寸中包含众多外设功能和4-8KB的代码闪存,最小的8引脚器件尺寸仅为3mm x 3mm。这些特点旨在保持更小的系统尺寸,并降低工业、消费、传感器控制、照明和变频器等应用终端的系统成本。此外,其125°C的最大工作环境温度有利于优化热设计,可覆盖更宽广的温度范围,允许MCU在变频电机等发热部件附近使用。

1.jpg

瑞萨电子MCU器件解决方案业务部副总裁关俊彦表示:“RL78产品家族以其出色的电源效率和优化的外设功能而闻名。迄今为止,在其推出以来的11年中,出货已超71亿颗。目前月出货量达1亿颗。瑞萨将继续扩大具有成本效益和易于使用的8位及16位MCU,以满足用户的需求。”

IAR Systems产品管理总监Lotta Frimanson表示:“我们欢迎瑞萨的RL78家族产品扩展至广泛的低端MCU市场。作为支持整个RL78产品家族MCU的独家合作伙伴,IAR致力于打造一流的开发解决方案,助力全球工程师充分利用RL78 MCU的功能,并生成快速、紧凑的代码,实现高效开发。”

RL78/G15的关键特性

  • RL78 16位CPU内核,工作频率为16MHz

  • 覆盖-40°C至125°C的宽工作温度范围

  • 提供8至20引脚封装,其中最小可实现3mm x 3mm WDFN封装

  • 除VDD和VSS电源引脚外,所有引脚均可用于通用I/O

  • 高达8KB的代码闪存、1KB的数据闪存,和1KB的SRAM

  • 支持2.4V至5.5V工作电压

  • 支持多种串行接口:CSI、UART、简单I2C和多主I2C

  • 高精度振荡器(±1.0%)

  • 内置比较器

开发环境

与其它RL78器件类似,采用全新RL78/G15进行设计的工程师可以使用基于GUI的智能配置器,为外设功能轻松生成驱动代码。瑞萨还提供用于评估的快速原型开发板(FPB),带有Arduino Uno和可访问所有引脚的Pmod™ Type6A型接口。仅需一条USB线缆即可进行调试及编程。开发人员能够通过在FPB上运行的Arduino库获得丰富RL78开发资源,更可借助Arduino生态系统提供的大量资源,将想法快速转化为可运行的解决方案。

成功产品组合

瑞萨开发了100W USB多输出电源(PD)适配器,可为各种系统供电。该款高效电源除RL78/G15 MCU外,还包含一个高性能PFC(功率因数校正)控制器、一个AC/DC控制器,和一个高性能DC-DC降压装置。这一解决方案为用户实现了一体化移动充电器,可轻松为笔记本电脑、平板电脑,或移动电话充电,而不必担心兼容性问题,是快速充电器、移动设备,或适配器的理想组合。该解决方案是瑞萨“成功产品组合”的一部分,瑞萨“成功产品组合”将相互兼容的瑞萨器件优化并组合,实现无缝协作,以降低用户设计风险并缩短上市时间。瑞萨现已基于其产品阵容中的各类产品,推出超过300款“成功产品组合”。更多信息,请访问:https://www.renesas.com/win

供货信息

RL78/G15现已量产。了解新产品及其支持工具的更多信息,请访问:https://www.renesas.com/rl78g15

关于瑞萨电子

瑞萨电子(TSE: 6723),科技让生活更轻松,致力于打造更安全、更智能、可持续发展的未来。作为全球微控制器供应商,瑞萨电子融合了在嵌入式处理、模拟、电源及连接方面的专业知识,提供完整的半导体解决方案。成功产品组合加速汽车、工业、基础设施及物联网应用上市,赋能数十亿联网智能设备改善人们的工作和生活方式。更多信息,敬请访问renesas.com。关注瑞萨电子微信公众号,发现更多精彩内容。

围观 25

瑞萨的RL78系列MCU,具有超低系统功耗44uA/MHz,0.37uA RTC mode,210nA STOP mode,卓越性能工作频率达32MHz,工作电压1.6V~5.5V,高扩展性10-128pin封装;1-512KB闪存,高集成度、低系统成本,1%精度片上晶振,温感,运放,ADC,DAC,比较器,LCD,高品质、安全,IEC 60730,CRC校验,AES加密算法,带ECC的闪存,数据闪存,擦写次数>100万次。

通用MCU:

“关于RL78/G13系列R5F100BEANA产品ADC采集误差过大的问题"

带LCD驱动MCU:

“关于RL78/G13系列R5F100BEANA产品ADC采集误差过大的问题"

专用MCU:

“关于RL78/G13系列R5F100BEANA产品ADC采集误差过大的问题"

RL78具有低功耗,丰富的外设,同时具有极高的性价比。在一款低功耗采集设备上使用了RL78/G13系列的R5F100BEANA,32PIN的产品。在实际测试过程中发现,ADC通道0~2,这三个通道采用同一个模拟信号,但是ADC通道0基本上一直比通道1和2结果值小。ADC通道1、2的采样值基本一致。于是,进行了以下的排查工作。

1、检查焊接、BOM、连线等问题。

经排查,焊接正常,BOM没有问题,连接线、跳线等牢固可靠。

2、测试多块板,排除个体间的差异。

经排查,每块板都会有同样的问题,确认是共同性问题。

3、检查原理图,PCB,是否有设计问题。

经排查,暂时没有发现明显的设计上的问题。

4、确认ADC输入源的稳定性。

将输入源改成稳定的直流电压供电,问题依然存在。

5、确认过程中ADCEN、ADS、ADCS等寄存器或者位是否有误操作

经排查,在程序运行过程中,没有对相关寄存器误操作。

提供A/D转换器的输入时钟的控制(PER0寄存器的ADCEN位)

“关于RL78/G13系列R5F100BEANA产品ADC采集误差过大的问题"

模拟输入通道指定寄存器(ADS)

“关于RL78/G13系列R5F100BEANA产品ADC采集误差过大的问题"

A/D转换运行的控制(ADM0寄存器的ADCS位)

“关于RL78/G13系列R5F100BEANA产品ADC采集误差过大的问题"

6、排查ADC使用中需要注意的事项

经排查,已按照手册建议配置

“关于RL78/G13系列R5F100BEANA产品ADC采集误差过大的问题"

7、排查ADC输入源电阻

经排查,输入源串联了1个10K欧姆的电阻,比手册上的建议值大,修改为500欧姆后,此问题排除。

“关于RL78/G13系列R5F100BEANA产品ADC采集误差过大的问题"

到此,解决了这个问题。

在调试过程中碰到问题,首先排查设计、硬件及不同板子之间的问题,然后依次检查对应的寄存器是否配置正确,再对照手册的此功能模块的推荐配置,依次排查,最终问题都会迎刃而解。

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

围观 37

引言

本文详细介绍了RL78 MCU从复位到进入main函数的过程,有助于读者对RL78 MCU体系结构的理解,RAM和ROM的初始化,以及bootloader程序的开发。

1. RL78复位源

RL78 MCU有以下7种复位源:

外部复位:

  • RESET复位引脚

内部复位:

  • 上电复位(POR)

  • 看门狗复位

  • 低电压复位

  • 非法指令复位

  • RAM奇偶校验错误复位

  • 存取非法寄存器复位

复位功能框图如下:

“RL78启动过程详解"

2. MCU运行模式

RL78 MCU有正常运行和闪存编程两种运行模式,在复位信号解除时,通过采样TOOL0引脚上的电平,进入对应的运行模式。

“RL78启动过程详解"

3. 启动代码分析

RL78 MCU启动代码主要在cstart.asm文件中,流程如下:

“RL78启动过程详解"

3.1 启动代码入口

代码如下:

“RL78启动过程详解"

MCU复位后,PC指针指向地址0,定义复位向量在地址0。

“RL78启动过程详解"

“RL78启动过程详解"

3.2 寄存器组选择

代码如下:

“RL78启动过程详解"

RL78-S2有4组通用寄存器,通过SEL RBn指令选择使用的寄存器组。

“RL78启动过程详解"

RL78通用寄存器组结构:

“RL78启动过程详解"

3.3 镜像区设置

代码如下:

“RL78启动过程详解"

3.3.1镜像区

RL78支持存取1MB的地址空间,能通过16位地址进行存取的数据区是F0000H~FFFFFH的64K字节空间,但是如果附加“ES:”,就能扩展到00000H~FFFFFH的1M字节空间。

“RL78启动过程详解"

代码闪存从地址0开始存储,一般需要使用20位地址访问该区域。为了加快对代码闪存的访问,可以将代码闪存的部分区域镜像到F0000H~FFFFFH中未使用的区域。

镜像示例如下:

“RL78启动过程详解"

3.3.2镜像区选择

复位后,MAA位默认为0,镜像00000H~0FFFF区域到F0000H~FFFFFH区域,对于闪存大于96KB的产品,可以通过设置MAA位,选择需要镜像的区域,详细请参考PMC控制寄存器。

“RL78启动过程详解"

“RL78启动过程详解"

3.4 栈初始化

代码如下:

“RL78启动过程详解"

3.4.1 设置SP

将栈顶地址 __STACK_ADDR_START设置到SP寄存器。

其中__STACK_ADDR_START是由链接器产生。

“RL78启动过程详解"

3.4.2 初始化栈

将栈底地址参数赋值给AX寄存器,然后调用栈初始化函数stkinit,将栈区域清0。

“RL78启动过程详解"

stkinit函数在stkinit.asm文件中,代码如下:

“RL78启动过程详解"

“RL78启动过程详解"

大致流程为:先按照32字节进行清0,剩余部分,按字节进行清0。

3.5 外设初始化

代码如下:

“RL78启动过程详解"

其中R_Systeminit函数是由代码生成器,通过图形界面配置生成。

注意:尽量不要修改该部分代码。

如需修改,禁止执行读取RAM的操作。(访问未初始化的RAM,可能触发RAM奇偶校验错误,产生奇偶校验复位。)

错误代码示例:

“RL78启动过程详解"

错误原因:g_dbgMode全局变量将在data段的初始化过程中赋值1,但此时data段还未初始化,dbgMode指向的RAM地址未写入奇偶校验位,if(g_dbgMode==0)语句,将执行读操作,可能触发RAM奇偶校验错误,产生奇偶校验复位。

3.6 初始化BSS,DATA段

BSS初始化代码如下:

“RL78启动过程详解"

DATA段初始化代码如下:

“RL78启动过程详解"

其中HIGH/LOW/STARTOF/SIZEOF等表达式,请参考编译器手册文档”CC-RL user’s manual”。

“RL78启动过程详解"

3.7 进入main函数

“RL78启动过程详解"

3.8 堆

CC-RL V1.02以上版本支持堆的操作

“RL78启动过程详解"

如需使用堆的相关操作,需要先初始化_REL_sysheap和_REL_sizeof_sysheap,详细内如请参考以下示例:

“RL78启动过程详解"

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

围观 1415

1、IAR IDE

IAR一直是Renesas强有力的合作伙伴,IAR IDE支持Renesas全系列MCU的开发和调试。IAR Embedded Workbench是一个完整的开发工具链,在易于使用的集成开发环境中提供了强大的代码优化和全面的调试功能。

2、Renesas RL78系列MCU

Renesas RL78系列MCU是Renesas 16-bit低功耗产品线,专为超低功耗设计,可以为客户提供以较低的成本建立高集成度和高效节能的应用平台。

RL78系列MCU有三大主要特点:

1)低功耗:最低46uA/MHz

2)可扩展性:1KB~512KB Flash

3)高效:最高1.39DMIPS/MHz

此外,RL78系列MCU具有超级全面的产品线,同时也在不断地推进新产品的开发,以满足客户未来的产品升级需求。

3、使用IAR IDE仿真RL78内置硬件乘法器&除法器注意事项

在使用IAR IDE进行RL78系列MCU仿真调试时,可执行硬件仿真或软件仿真(Simulator),但是,如果需要应用硬件乘法器/除法器,则必须使用硬件仿真,不能使用软件仿真(Simulator),软件仿真(Simulator)不支持MCU内部的硬件乘法器/除法器。

当执行硬件仿真时,如果不勾选“Disable Hardware Multiplier/Divider Unit”:

“”使用IAR

对应的乘法操作会调用函数HWMUL_32_32_32,(HWMUL_32_32_32存在于工具自动生成的文件LibReplacement.s中,当不勾选“Disable Hardware Multiplier/Divider Unit”时,会自动在Output文件夹生成LibReplacement.s文件),例如:

“”使用IAR

在程序中可以看到:

“”使用IAR

“”使用IAR

当勾选“Disable Hardware Multiplier/Divider Unit”时,编译器会选择对应的软件乘法库函数L_MUL_L03来实现乘法操作:

“”使用IAR

需要注意的是,软件乘法库函数L_MUL_L03相对于HWMUL_32_32_32函数会需要更多的资源及运行时间。

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

围观 312

对于物联网的应用或者产品版本管理等场合,芯片的信息读取是用户非常关心的问题。本文介绍了瑞萨RL78家族单片机读取Device Part Number和Unique ID的方法。

1、读出产品型号

RL78族的产品型号是使用ASCII码编写的,被保存在Code Flash的特定区域内。使用软件读取该区域,可以读出产品的型号。具体请点击链接查看应用笔记参考:https://www2.renesas.cn/cn/en/document/apn/rl78-family-software-based-part-number-reading-out-rev100

根据指令类型、时钟数目和性能,RL78单片机可以分为三种类型:RL78-S1内核、RL78-S2内核和RL78-S3内核。本文中的内容只适用于RL78-S2内核和RL78-S3内核的产品。

  • RL78-S1内核产品:RL78/G10

  • RL78-S2内核产品:RL78/G12、RL78/G13、RL78/G1A、RL78/G1E、RL78/G1C、RL78/I1A、RL78/F12、RL78/D1A、RL78/L12、RL78/L13等。

  • RL78-S3内核产品:RL78/G11、RL78/G14 、RL78/G23等。

RL78-S2内核和RL78-S3内核产品的存放产品型号的区域地址 为0xEFFD5~0xEFFDE。

表1.1中列出了RL78/G13“R5F100LE”的产品型号。产品型号是用ASCII码编写的。

“关于RL78

读出产品型号的代码参考如下。执行该代码,可以读出用ASCII码编写的产品型号。被读出的产品型号保存在内部RAM中。

unsigned char __far* ptr; 

unsigned char sig[10]; 

unsigned char i; 

ptr = (unsigned char __far*)0xEFFD5; 

for (i = 0; i < 10; i++) 

{ 

    sig[i] = *ptr; 

    ptr++; 

}

下图所示为RL78/G13的运行结果,用户可通过“Watch”窗口得到产品型号的读出结果。

“关于RL78

2、读出Unique ID

2.1 Unique ID Driver

官方提供的Unique ID Driver只可用于RL78/G2x,具体请扫描下方二维码查看应用笔记参考。(需要登陆后查看)

https://www2.renesas.cn/cn/en/oauth2/default/v1/authorize?client_id=0oa2ixjskq8o2hdJB357&response_type=code&scope=openid%20email%20phone%20profile%20MyRenesasUserInfo&redirect_uri=https%3A//www2.renesas.cn/openid-connect/renesas-okta&state=qnG56-01fbiD6dPWyz7nlu1JkA1-mSn0O3VwVh6w1Fk

  • Unique ID是分配给单个产品并存储在非编址区域中的唯一值。

    • 在制造MCU时每个产品都会获得一个Unique ID。 

    • 该Unique ID无法再被更改。

    • Unique ID的数据长度为16字节(128位)。

  • Unique ID的区域地址为 0xEFFC0~0xEFFCF。

Unique ID读取驱动文件位于应用笔记例程的libsrc下,文件结构如表2.1和图2.1所示。表2.1列出了每个文件的作用。文件结构的相关部分包含在图2.1中的红色框中。

“关于RL78

“图2.1
图2.1 驱动程序文件结构

表2.2列出了Unique ID读取驱动的API函数

“关于RL78

以下是使用RL78/G23 FPB读取Unique ID的参考示例,设备连接图如下图所示。

“图2.2
图2.2 RL78/G23 FPB设备连接图

设置和执行步骤:

a)将PC的USB端口连接到RL78/G23 FPB的micro USB端口,如图所示在图2.2中,RL78/G23 FPB设备连接图。

b)在PC上启动终端仿真程序(终端软件)。然后选择分配给USB串行转换器板的串行COM口。

c)在终端软件中进行串行通信设置以匹配示例应用程序:115,200 bps,8个数据位,无奇偶校验,1个停止位,无流量控制。

d)构建示例应用程序,将其下载到RL78/G23 FPB上,并使用调试器运行应用程序。

e)软件运行时,将Unique ID和产品名称输出到终端,之后程序正常终止。

“关于RL78

调试注意事项:无法使用调试器的内存浏览器查看存储Unique ID和产品名称ASCII代码的闪存区域,在Memory Browser窗口中,只能看到该区域显示为全FFH。

“关于RL78

2.2 除RL78/G23以外的RL78产品配置Unique ID的方法

对于除RL78/G23以外的其他RL78产品,可以通过一些算法获得唯一ID,然后烧录到ROM中的一个空的固定地址。软件可以设置命令到该地址读取该ID。使用Renesas Flash Programmer(RFP)软件的图形化界面,可以实现在烧录bin文件的同时写入配置好的Unique ID。

“关于RL78

有关详细信息,请点击下方链接查看参阅用户手册第3章。

https://www2.renesas.cn/cn/en/document/mat/renesas-flash-programmer-v205-flash-memory-programming-software-users-manual-common

“关于RL78

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

围观 473

一、概述

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)。

围观 904

页面

订阅 RSS - RL78