早期的存储器只能进行一次写操作,后来随着紫外线擦写存储器的问世,它支持了上千次的读写操作。
随着技术的不断发展,闪存的读写速度和次数都在不断提高。如今,即使是最低配置的闪存也能支持十万次的读写操作,而百万次的读写操作已经成为了标准配置。
存储器的价格也随着时间的推移变得越来越亲民,如今基本可以用“白菜价”来形容。因此,现在的MCU内部集成的存储器容量越来越大,性能也越来越高。
在这个背景下,瑞萨RL78系列单片机支持百万次读写的数据闪存(Data Flash)成为了焦点。下面我们来介绍一下其读写方法。
数据闪存(Data Flash)概述
大部分近年推出的MCU基本都提供了供用户编程和使用的Flash,而RL78系列MCU也不例外,其官方称之为数据闪存(Data Flash)。
数据闪存(Data Flash)可以用来存储产品的标定参数、运行数据等信息,这样就可以省去外部存储器件,有效降低了用户的硬件成本。
Data Flash特点:
用户可以基于瑞萨官方提供的库来操作MCU内部的数据闪存。虽然数据闪存仍然以1K字节块为单位,但用户可以按字节进行读写操作。
RL78系列MCU的不同型号拥有不同大小的内部数据闪存,一般在2K到8K字节之间。而每个地址的当前读写次数可达到1,000,000次,并且可以在1.8到5.5伏的电压范围内进行操作。
Data Flash使用说明
Data Flash应用库的下载:
如果你用的是CC-RL编译器,请在如下地址下载应用库和API应用文档:
https://www.renesas.cn/cn/zh/document/upr/data-flash-library-type04-ver105-cc-rl-compiler-rl78-family?language=en
如果你用的是CA78K0R编译器,请在如下地址下载应用库和API应用文档:
https://www.renesas.cn/cn/zh/document/upr/data-flash-library-type04-ver105-ca78k0r-compiler-rl78-family
(提醒:请复制链接到浏览器下载)
避开MCU内部RAM相关区域:
根据MCU的硬件手册和《Self RAM list of Flash Self-Programming Library for RL78 Family》规定,有些MCU的RAM部分区域不能被数据库使用,因此需要在section设置进行避开,否则编译会出错,不同MCU要求也不尽相同,以R5F100LE为例,闪存库仅能使用RAM FFE00H ~ FF2FFH以外的区域,如下。
![图片](data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
如下是基于R5F100LE在CS+上的具体section配置,以避开相应的区域,其他型号的MCU也可参考。
![图片](data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
Data Flash测试
把RL78闪存库加载到应用工程里,然后调用初始化和读写函数进行数据的操作,当前使用RL78G13硬件板型号是“YRPBRL78G13”。然后在R5F100LE Data Flash的起始地址连续写一串数据“0x11,0x22,0x33, … 0xCC,并把它们读出出来,数据定义以及应用代码如下:
unsigned char Execute_status;
unsigned char W_DataFla_buff[3] = {0x11,0x22,0x33};
unsigned char W_DataFla_buff1[3] = {0x44,0x55,0x66};
unsigned char W_DataFla_buff2[3] = {0x77,0x88,0x99};
unsigned char W_DataFla_buff3[3] = {0xAA,0xBB,0xCC};
unsigned char R_DataFla_buff[12];
unsigned long int address=0x00;
R_FDL_Init();
Execute_status = R_FDL_BlankCheck(0x00,1024);
if (Execute_status == 0x1b)
{
R_FDL_Erase(0x00);
}
R_FDL_Write(address,&W_DataFla_buff[0],3);
address+=3;
R_FDL_Write(address,&W_DataFla_buff1[0],3);
address+=3;
R_FDL_Write(address,&W_DataFla_buff2[0],3);
address+=3;
R_FDL_Write(address,&W_DataFla_buff3[0],3);
address+=3;
Execute_status = R_FDL_Iverify(0x00,1024);
if (Execute_status == 0x1b)
{
return;
}
R_FDL_Read(0x00,&R_DataFla_buff[0],12);
PFDL_Close();
代码在硬件板“YRPBRL78G13”上运行测试结果如下,执行正确。
![图片](data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !