基于IAR for RH850的瑞萨RH850 FCL库用法介绍(二)

article/2025/11/6 15:03:29

版权声明
email:1256153255@qq.com
website for get 瑞萨RH850F1x开发板和瑞萨E1仿真器

认真的朋友会发现,我的上一篇博文《基于IAR for RH850的瑞萨RH850 FCL库用法介绍》在最后留下了一个bug,就是当FCL执行ERASE或WRITE时,返回的状态myRequest.status_enu经常是0x00000005(R_FCL_ERR_PROTECTION),在上一篇博客最后给的解决办法是通过RFP进行Chip的ERASE,但是这种方式的ERASE之后,只能正常的执行一次FCL的WRITE,第二次时又会出现R_FCL_ERR_PROTECTION。

在FCL官方手册上分析出现R_FCL_ERR_PROTECTION的原因如下
在这里插入图片描述
官方给的原因是:安全设置(安全Flag)被Enable了,导致Code Flash被 Protection了,解决办法就是Disable安全设置。
怎么Disable呢?继续查手册,找到这里
在这里插入图片描述
那就是说宏R_FCL_SUPPORT_SECURITYFLAGS是负责安全设置的Enable和Disable的,那好办呀,把代码中的R_FCL_SUPPORT_SECURITYFLAGS注释掉就完了。结果注释掉之后还是没完,依然R_FCL_ERR_PROTECTION。

那就试试其他区域呗,如下修改

/* erase block 2 and 3 */myRequest.command_enu = R_FCL_CMD_ERASE;myRequest.idx_u32     = 0x2;                   /* erased range = 0x4000 to 0x7fff */myRequest.cnt_u16     = 1;R_FCL_Execute (&myRequest);#if R_FCL_COMMAND_EXECUTION_MODE == R_FCL_HANDLER_CALL_USERwhile (R_FCL_BUSY == myRequest.status_enu){R_FCL_Handler ();}#endiftest_value = myRequest.status_enu;/* write 512 bytes to address 0x40000 (start of block 2) */REINITIALIZE_BUFFER;myRequest.command_enu = R_FCL_CMD_WRITE;myRequest.bufferAdd_u32 = (uint32_t)&writeBuffer_u08[0];myRequest.idx_u32       = 0x4000;myRequest.cnt_u16       = 1;                    /* written bytes = 256 * cnt_u16 */R_FCL_Execute (&myRequest);#if R_FCL_COMMAND_EXECUTION_MODE == R_FCL_HANDLER_CALL_USERwhile (R_FCL_BUSY == myRequest.status_enu){R_FCL_Handler ();}#endiftest_value = myRequest.idx_u32;

↓↓↓↓↓↓↓↓↓

/* erase block 2 and 3 */myRequest.command_enu = R_FCL_CMD_ERASE;myRequest.idx_u32     = 0x3;                   /* erased range = 0x4000 to 0x7fff */myRequest.cnt_u16     = 1;R_FCL_Execute (&myRequest);#if R_FCL_COMMAND_EXECUTION_MODE == R_FCL_HANDLER_CALL_USERwhile (R_FCL_BUSY == myRequest.status_enu){R_FCL_Handler ();}#endiftest_value = myRequest.status_enu;/* write 512 bytes to address 0x40000 (start of block 2) */REINITIALIZE_BUFFER;myRequest.command_enu = R_FCL_CMD_WRITE;myRequest.bufferAdd_u32 = (uint32_t)&writeBuffer_u08[0];myRequest.idx_u32       = 0x6000;myRequest.cnt_u16       = 1;                    /* written bytes = 256 * cnt_u16 */R_FCL_Execute (&myRequest);#if R_FCL_COMMAND_EXECUTION_MODE == R_FCL_HANDLER_CALL_USERwhile (R_FCL_BUSY == myRequest.status_enu){R_FCL_Handler ();}#endiftest_value = myRequest.idx_u32;

竟然可以了,再试试后边的其他block,也可以
那就是Block2不能这么玩儿了,为什么呢?是不是Block2放的还是Code,不能擦除呢?查map文件

  11 638 bytes of readonly  code memory50 bytes of readonly  data memory41 116 bytes of readwrite data memory

Code量占用了11638Bytes,Block0和Block1共16KB,够用。

没辙了!!!

那就用RFP把整个1M的Code Flash读出来看看,结果发现问题所在了

S0110000437265617465642062792052465033
S31500000000E0022C2C000000000000000000000000B0
S315000000101F00E0027E2D000000000000000000002E
S31500000020EE0F4000C10E1F001F00E0027E2D0000F3
S31500000030EE0F4000C10E0F001F00E002662D00000B
。。。。。。。。
S31500002D7050000000000000008207610006E863EFD3
S31500002D8001000338013280FF0600A5FD7F00000028
S31500002D90850500008505000085050000E00748015F
S31500002DA041000000410000004100FFFFFFFFFFFF60
S31500002DB0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D
S31500002DC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D
S31500002DD0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD

从这段来看,code是放在Block0和Block1是没错。

但是,再往下

S31500003FD0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB
S31500003FE0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB
S31500003FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB
S31500004000000800000241000008000240000104040C
S31500004010000000002004000008020A080100080A47
S315000040200400820000000000008000000000060678
S31500004030000000220000000008000A08100400002A
。。。。。。。。
S31500005FD000000000000000000000000000000000BB
S31500005FE000000000000000000000000000000000AB
S31500005FF0000000000000000000000000000000009B
S31500006000000102030405060708090A0B0C0D0E0F12
S31500006010101112131415161718191A1B1C1D1E1F02
S31500006020202122232425262728292A2B2C2D2E2FF2

发现没有,Block2(0x0000 4000~0x0000 5FFF)不是ERASE状态,所以 不能 写 入。
而Block3开始(0x0000 6000)就是我们刚才写入的值。这下明白了吧,原来Block2不是ERASE状态。

但是这里还有两个疑问:
1、Block2里边这些数据是什么内容?
2、在FCL的COMMOND指令对Block2执行了R_FCL_CMD_ERASE,为什么不能正常ERASE?

这两个问题,还没找到原因,找到之后和大家共享出来,如有朋友知道,也请留言对我进行扫盲。


http://chatgpt.dhexx.cn/article/osH4YqpP.shtml

相关文章

5、RH850 F1 定时器TAUJ功能和配置

TAUJ定时器为RH850较为常用的定时器: (1)定时器计时是通过计数来实现的,定时器内部有一个计数器,这个计数器根据时钟(这个时钟来自于ARM的APB总线)来工作。每隔一个时钟周期,计数器…

13、RH850 F1 选项字节和看门狗

前言: 选项字OPTION配置是RH850的一项重点,用户手册对选项字的配置介绍很少,这篇文章将主要针对选项字和看门狗的配置进行讲解。 一、选项字特性 闪存的选项字节是一个扩展区域,并保存用户为各种目的指定的数据。由选项字节指定的外围模块等的…

6、RH850 F1 AD转换功能和配置

前言: 上文完成了RH850的TAUJ定时器配置,此章我们将讲解RH850的ADC功能。 AD转换就是将时间连续和幅值连续的模拟量转换为时间离散、伏值也离散的数字量。使输出的数字量与输入的模拟量成正比。AD转换的过程有四个阶段,即采样、保持、量化和编码。 采样是…

RH850 Clock+LED

RH850 ClockLED 解除时钟寄存器写保护 写保护寄存器的写过程 通过使用以下保护解锁序列,可以启用对写保护寄存器的写访问: 1.将固定值0000 00A5H写入保护命令寄存器。 2.将所需的值写入受保护的寄存器。 3.将所需值的按位反转写入受保护的寄存器。 4.…

关于RH850系统时钟初始化的分析解读

博主联系方式:QQ:1256153255 ,邮箱:1256153255qq.com 点击这里可申请RH850开发板 点击这里可申请瑞萨E1仿真器 RH850的时钟初始化,有些是自己配置的,有些是用Smart configure图形配置后自动生成的&#x…

RH850系列芯片Mcal代码生成教程

RH850系列芯片Mcal代码生成教程 Rh850 mcal的配置、生成代码不同于NXP、英飞凌等芯片,并非使用EB,而是使用Vector工具加Makefile组合的方式,比较繁琐。本文将以RH850/F1KM的Can模块为例,讲解Rh850的代码生成流程。 相关依赖 首…

瑞萨RH850 CS+集成开发环境Sections字段说明

在文章:瑞萨RH850 CS环境下设置堆和栈空间和瑞萨IDE:CS for CC进行BootLoader升级时开发环境配置中,讲解到Sections字段的使用。 那么Sections字段到底什么含义呢,下表进行了梳理和总结: 手册全文请参见:RH…

RH850进不去烧写

有遇到输入晶振进不去界面的嘛,引脚第二次梳理一次都是正确的,cs➕接法也进不去,请问有遇到这种情况的嘛,谢谢指点。(https://img-blog.csdnimg.cn/335b57577edd4feabd1226ab1666d154.jpg) can线不接的话板子会在上电1-2秒复位&a…

11、RH850 中断配置

前言: 单片机的中断是由单片机片内的中断系统来实现的。当中断请求源(简称中断源)发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断服务程序处理中断服务请求,处理完中…

RH850F1x Starter Kit V3用户手册(中文翻译版)

版权声明 本博文系广州欧科曼科技有限公司所有,转载请注明出处。 广州欧科曼科技有限公司致力于瑞萨MCU及周边相关产品开发设计。 email:1256153255qq.com 需要翻译版PDF文档,请联系博主QQ获取 website for purchase 瑞萨RH850开发板 and 瑞…

RH850F1L 移植freeRTOS

学习基于GHS将freeRTOS移植到RH850 F1L的过程 移植过程参考github的一个教程,其中有部分修改优化,但是不多。 GitHub - mikisama/FreeRTOS_RH850: FreeRTOS port for Renesas RH850 支持gcc、ghs、ccrh、IAR 4种编译器。 有问题一起讨论,…

瑞萨RH850 FCL、FDL和EEL库的配置和使用

目录 1、FCL库 1.1、配置FCL库 1.2、使用FCL库 2、FDL库 2.1、配置FDL库 2.2、使用FDL库 3、EEL库 瑞萨RH850 Flash中有两种存储类型:Mapping of Code Flash Memory和Mapping of Data Flash Memory。 Mapping of Code Flash Memory存储代码,Mappi…

基于IAR for RH850的瑞萨RH850 FCL库用法介绍

博主联系方式:QQ:1256153255 ,email:1256153255qq.com website for get 瑞萨RH850F1x开发板和瑞萨E1仿真器 1、简介 本文介绍了RH850 FCL的使用以及相关的经验技巧,使用的环境如下 MCU:瑞萨RH850F1K 型号…

瑞萨RH850开发环境搭建

简述 本文介绍瑞萨RH850开发环境搭建。 内部包含cancasexl的驱动安装,canoe的软件安装,IAR的软件安装,E1的自检等。 当前版本:V1.0 email:1256153255qq.com website for get 瑞萨RH850开发板 and 瑞萨E1仿真器 变…

2、RH850外设时钟选择及配置

前言 上一篇文章完成了RH850时钟源寄存器配置,外设要正常工作,必须要配置对应的时钟,这篇文章说明RH850外设时钟配置。 时钟选择寄存器 下面表格是RH850-F1K技术规格书列出的外设时钟寄存器。 外设时钟寄存器基本都相同,如TAUJ代表…

3、RH850端口说明及及复用功能配置

RH850端口有3种工作模式 通用IO口(普通数字口)。PMC控制寄存器对应bit为0。软件配置复用模式。PMC控制寄存器对应bit为1。PIPC寄存器对应bit为0。硬件直接连接模式。PMC控制寄存器对应bit为1。PIPC寄存器对应bit为1。 主要控制寄存器 PIPC 0: 端口由软件配置(software I/O c…

10、RH850 CAN通讯功能和配置

前言: CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。 在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于…

瑞萨RH850芯片在IAR和CS+编译环境下设置堆(heap)和栈(stack)的大小

博主联系方式:QQ:1256153255 ,邮箱:1256153255qq.com 点击这里了解RH850开发板 点击这里了解瑞萨E1仿真器 点击这里了解GHS Multi 在实际使用RH850开发的过程中,有时会需要调整芯片的堆栈空间大小。 对于RH850芯片&…

播放rtmp在线网站及播放器

2019独角兽企业重金招聘Python工程师标准>>> 网站地址 http://www.cutv.com/demo/live_test.swf 推流地址 rtmp://ip:8005/live/32010020160918113426717107expxqe 或者采用flash player 也可以 -----------------------------------------------------------------…

rtmp/rtsp播放器

相信大家在做rtmp、rtsp直播的时候,最大的困惑就是选个靠谱的播放器,直播的延迟,一定意义上说,90%的取决于播放器的好坏。 那啥样的播放器才是靠谱的播放器呢?笔者以为,稳定、低延迟、支持路数多&#xff0…