版权声明
本博文系欧科曼汽车电子所有,转载请注明出处。 欧科曼汽车电子致力于瑞萨MCU及周边相关产品开发设计。
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?

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

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

  1. 瑞萨RH850/F1L-片上资源分配(Flash,RAM,外设资源)

    瑞萨RH850片上存储资源分配,本博文讲解RH850为176pin LQFP封装: 1.片上Code Flash 2.片上Data Flash 3.片上RAM 版权声明 本博文系广州欧科曼科技有限公司 ...

  2. 瑞萨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 ...

  3. 详解AUTOSAR:Green Hills Software(GHS)编译下载瑞萨RH850程序(环境配置篇—2)

    目录 1.配置烧录器参数 2.仿真烧录程序 在学习本篇博文之前,可以先看一看:Green Hills Software(GHS)的安装和申请License文件. 使用GHS编译下载瑞萨RH850程序方 ...

  4. [瑞萨RH850学习笔记]——RDC与旋转变压器

    [瑞萨RH850学习笔记]--RDC与旋转变压器 一.旋转变压器基本原理 旋转变压器 使用电磁式方法进行角位移测量的传感器.特点是稳定性高,环境耐受力强,抗干扰能力强,精度较高. 基本原理 本质上是一 ...

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

    瑞萨RH850 Flash中有两种存储类型:Mapping of Code Flash Memory和Mapping of Data Flash Memory. Mapping of Code Fla ...

  6. 33、基于CACX和R7F0C004M的瑞萨单片机入门教程

    代码资源下载:https://download.csdn.net/download/BaoTTing/58444918 一.开发环境介绍 CS+ for CACX: 瑞萨单片机开发环境,已经停止更新, ...

  7. 基于SCL语言的模拟量平均值滤波FB库功能介绍及创建FB库的具体方法

    基于SCL语言的模拟量平均值滤波FB库功能介绍及创建FB库的具体方法 FB库功能说明: 可对模拟量进行平均值滤波处理,某些从现场采集的模拟量信号在传输过程中易出现干扰,可能导致数据失真,使用该FB库可 ...

  8. 基于瑞萨RH850的BootLoader调试问题记录

    最近要基于瑞萨的RH850开发BootLoader,调试过程遇到了一些问题,在这里记录一下. 1 Flash擦写问题 1.1 Flash介绍 Flash分为DFlash和CFlash DFlash一般 ...

  9. 瑞萨RH850 CS+环境下设置堆和栈空间

    目录 1.设置栈空间 2.设置堆空间 嵌入式软件开发离不开对堆和栈的操作. 栈由操作系统自动分配和释放 ,存放函数的参数值.局部变量的值等.通常都是被调用时处于存储空间中,调用完毕立即释放. 堆由开发 ...

  10. 瑞萨RH850 F1KM-S4 -LED闪烁

    上一章节,学会通过GPIO口控制LED灯的开和关,本节介绍如何实现LED灯的周期开和关,实现闪烁效果. 关于LED闪烁的实现方法,一般有以下几种,本章讲解第一种GPIO控制. 1. 采用GPIO控制: ...

最新文章

  1. 设计模式之Dynamic Proxy-动态代理
  2. tcp/ip 协议栈Linux源码分析三 IPv4分片报文重组分析三
  3. C++ builder 的文件读写操作总结
  4. 解决MyBatis的报错 There is no getter for property named ‘*‘ in ‘class java.lang.String‘
  5. kafak消费者从头开始消费(消费者组)
  6. 卖萌屋学术站开放注册啦!寻募种子用户,超多特权放出!
  7. python 实例创建
  8. c语言if的时候自动转换,[求助]IF语句转换SWITCH语句写出!如何
  9. python与机器学习(六)——支持向量机(SVM) 多层感知机(MLP)
  10. 【GTK3.0】背景设置
  11. 大专适合学习php么_学好php能做什么?哪些人群适合学习php?
  12. 笔记︱盘点实验科学的三种实验模型(A/B实验、因果推断、强化学习)
  13. 硕士转计算机科学,普利茅斯大学计算机科学(转专业)理学硕士研究生申请要求及申请材料要求清单...
  14. 活动桌面处理和一个例子
  15. 【报告分享】2019年人工智能中国专利技术分析报告.pdf(附下载链接)
  16. ESP32-C3 学习测试 蓝牙 篇(五、添加 characteristic)
  17. 反编译008神器,修改手机型号与android版本号信息
  18. C语言编程编制职工档案管理程序,C语言 编写一个职工档案程序.doc
  19. Java声效计算器(带有十进制转二进制和十六进制的功能)
  20. ADsAD合辑(二)AD具体使用

热门文章

  1. Java字符串排序比较。
  2. 人口增长模型 源代码
  3. 计算机本科毕业论文选题单片机,单片机毕业论文范文
  4. 如何在unity中调用电脑或安卓自带的摄像机
  5. 计算机怎么开启tftp服务器,win7电脑如何开启tftp服务器 电脑开启tftp服务器操作方法...
  6. ueditor编辑器的使用
  7. 高数下(同济大学版本)期中冲刺式复习
  8. Alexa工具栏研究
  9. matlab图像处理Lena大作业
  10. java jad_Java反编译工具 jad安装及使用的指南