瑞萨RL78系列单片机支持百万次读写的数据闪存方法概述

描述

早期的存储器只能写一次,随后紫外线擦写的存储器问世,支持上千次读写操作。

随着技术的发展,闪存的读写越来越快,读写次数也越来越多。十万次读写已经是目前最低配置,百万次读写将成为标配。

如今,存储器的价格已不再是20年前昂贵买不起的价格,基本可以用“白菜价”来形容了。所以,现在MCU内部集成存储的容量越来越大,性能也越来越高。

 

今天结合瑞萨RL78系列单片机支持百万次读写的数据闪存(Data Flash)给大家讲述一下其读写方法。

数据闪存(Data Flash)概述

最近这些年推出的大部分MCU,基本都有供用户可编程和使用的Flash,RL78系列MCU也是类似的Flash,官方叫数据闪存(Data Flash)。

数据闪存(Data Flash)可供用户存储产品的标定参数、运行数据等,这样就可以免去片外存储器件,有效的降低了用户的硬件成本。

Data Flash特点:

用户能基于瑞萨官方提供的库来使用MCU内部的数据闪存,虽然MCU内部的闪存仍以1K字节块作为单位,但是用户可以按照字节进行读写。

RL78资源的不同,对应的内部数据闪存的大小也不尽相同,一般大小在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以外的区域,如下。

mcu

如下是基于R5F100LE在CS+上的具体section配置,以避开相应的区域,其他型号的MCU也可参考。

mcu

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”上运行测试结果如下,执行正确。

mcumcu








审核编辑:刘清

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

全部0条评论

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

×
20
完善资料,
赚取积分