写点什么

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

  • 2023-01-31
    北京
  • 本文字数:4534 字

    阅读完需:约 15 分钟

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

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

Mapping of Code Flash Memory 存储代码,Mapping of Data Flash Memory 存储数据。


​瑞萨车规级 MCU 操作 Flash 没有直接提供寄存器接口,需要安装官方提供的库文件,有三种形式:

  • FCL:程序存储区仿真库,可使用此库访问程序存储区,一般用于程序自升级操作;

  • FDL:数据存储区仿真库,可通过此库操作数据区,需要人为定义地址和数据长度,占用 Flash 空间比 EEL 略少,但占用 RAM 大;

  • EEL:EEPROM 仿真库,可使用此库来访问数据内存区,该方法类似于访问外部 EEPROM,使用此库时,不用管理对数据区闪存写和擦除操作,其占用 Flash 容量大,需配合 FDL 库来操作。


RH850 FCL、FDL和EEL安装包、源码、配置PPT和使用说明-嵌入式文档类资源

汽车电子技术、瑞萨 MCU 感兴趣的小伙伴请关注公众号:美男子玩编程,公众号优先推送最新技术博文,创作不易,请各位朋友多多点赞、收藏、关注支持~

1、FCL 库

1.1、配置 FCL 库

第 1 步:下载 FCL 库。

FCL 库官网地址:Code Flash Libraries (Flash Self Programming Libraries)

RH850 FCL 库与用户手册地址:RH850/F1KM-S4 Design Support Resources | Renesas

第 2 步:安装 FCL 库。

​安装完成后可见官方库文件和用户使用文件两部分:

​文件系统结构说明如下所示:

第 3 步:将官方库文件和对应的用户使用文件添加到自己的工程后,在 CS+工程中的添加 FCL 需要的代码段,如下图所示:


​注意:

  • 在这些代码段中请不要插入其他段;

  • FCL_RESERVED.bss 段: 在 RAM 中存放 FCL 库运行的代码,即复制上面代码段的内容到此 RAM 中。如果定义了 R_FCL_HANDLER_CALL_USER,则用户代码 R_FCL_CODE_USER.text 也此 RAM 中运行。在实际应用中定义 FCL_RESERVED 预留的大小,大小必须包含该库代码量和用户代码量(如果定义了 R_FCL_HANDLER_CALL_USER );

/* This array reserves the copy area in the device RAM */#define FCL_RAM_EXECUTION_AREA_SIZE 0x8000R_FCL_NOINIT uint8_t FCL_Copy_area[FCL_RAM_EXECUTION_AREA_SIZE];
复制代码
  • R_FCL_DATA.bss:FCL 内部运行数据段;

  • 在 CS+环境下,FCL 编译后会出现 3 个对齐失配警告,请忽略。

W0561322:Section alignment mismatch : "R_FCL_CODE_USR.text"W0561322:Section alignment mismatch : "R_FCL_CODE_RAM.text"W0561322:Section alignment mismatch : "R_FCL_CODE_ROMRAM.text"
复制代码

第 4 步:修改 fcl_cfg.h 文件。

#define R_FCL_COMMAND_EXECUTION_MODE    R_FCL_HANDLER_CALL_USER//修改成#define R_FCL_COMMAND_EXECUTION_MODE    R_FCL_HANDLER_CALL_INTERNAL
复制代码
  • R_FCL_HANDLER_CALL_USER(user mode): user 模式,用户代码运行在 RAM 区,在自编程命令执行期间,可以运行用户代码,用户可以轮询库的运行状态。需要消耗一定的 RAM 空间;

  • R_FCL_HANDLER_CALL_INTERNAL (internal mode):internal 模式,不需要轮询库的状态,在自编程命令执行期间没有状态值的返回,直到命令执行结束。消耗 RAM 空间小。

第 5 步: 修改 fcl_descriptor.h 文件。

#define FCL_CPU_FREQUENCY_MHZ  (240)                          /*!< CPU frequency in MHz */#define FCL_AUTHENTICATION_ID {0xFFFFFFFF, \                               0xFFFFFFFF, \                               0xFFFFFFFF, \                               0xFFFFFFFF}                    /*!< 128Bit authentication ID */#define FCL_RAM_ADDRESS        0xFEBC0000                     /*!< RAM address range blocked for FCL */
复制代码
  • FCL_CPU_FREQUENCY_MHZ:CPU 工作频率配置,请不要在库的运行期间改变 CPU 的工作频率,如果需要改变,改完后必须重新初始化 FCL 库;

  • FCL_AUTHENTICATION_ID:如果设备设置了 ID 验证码,需要提供相应的 ID 码,在 FCL 初始阶段需要验证 ID,如果 ID 验证不通过,不能成功执行 FCL 命令;

  • FCL_RAM_ADDRESS:根据相应的设备配置 RAM 起始。

第 6 步:修改 r_fcl_types.h 文件。

#define R_FCL_NO_BFA_SWITCH #if ((defined R_FCL_MIRROR_FCU_COPY) && (defined R_FCL_NO_FCU_COPY))    #error "r_fcl_types.h: Invalid define for support device macro"#elif ((defined R_FCL_MIRROR_FCU_COPY) && (defined R_FCL_NO_BFA_SWITCH))    #error "r_fcl_types.h: Invalid define for support device macro"#elif ((defined R_FCL_NO_FCU_COPY) && (defined R_FCL_NO_BFA_SWITCH))    #error "r_fcl_types.h: Invalid define for support device macro"#elif (defined R_FCL_MIRROR_FCU_COPY)    #define R_FCL_INNER_NO_BFA_SWITCH#elif (defined R_FCL_NO_FCU_COPY)    #define R_FCL_INNER_NO_FCU_COPY#elif (defined R_FCL_NO_BFA_SWITCH)    #define R_FCL_INNER_NO_BFA_SWITCH    #define R_FCL_INNER_NO_FCU_COPY#endif
复制代码

在 FCL V2.12 版本中增加了 R_FCL_NO_FCU_COPY、R_FCL_MIRROR_FCU_COPY 和 R_FCL_NO_BFA_SWITCH 预编译配置选项。

  • 在执行 FCL 库环境准备命令时,为了从 MCU 内部固件读取数据,需要开关 CodeFlash 几次。有些设备需要更少的开关来完成这个准备工作,需要定义 R_FCL_NO_BFA_SWITCH 宏;

  • R_FCL_NO_BFA_SWITCH 宏和 R_FCL_NO_FCU_COPY、R_FCL_MIRROR_FCU_COPY 不能同时被定义。

预编译目标设备所需的定义如下表所示:

1.2、使用 FCL 库


2、FDL 库

2.1、配置 FDL 库

第 1 步:下载 FDL 库。

FDL 库官网地址:Data Flash Libraries

RH850 FDL 库与用户手册地址:RH850/F1KM-S4 Design Support Resources

第 2 步:安装 FDL 库。

​安装完成后可见官方库文件和用户使用文件两部分:



​第 3 步:将官方库文件和对应的用户使用文件添加到自己的工程后,在 CS+工程中的添加 FDL 需要的代码段,如下图所示:

​注意:

  • FDL 库的代码段请按照如图样例 1 设置,位置可以任意,但不要插在 FCL 代码的中间;

  • R_FDL_Data.bss:FCL 内部运行变量据段;

  • R_FDL_CodeRam.bss: 在执行 FDL 环境准备期间,Code Flash 不可用,需要从 RAM 中运行代码。

第 4 步:修改 r_fdl.h 文件。

#define R_FDL_NO_BFA_SWITCH /* Global compiler definition */#if ((defined R_FDL_MIRROR_FCU_COPY) && (defined R_FDL_NO_FCU_COPY))    #error "r_fdl.h: Invalid define for support device macro"#elif ((defined R_FDL_MIRROR_FCU_COPY) && (defined R_FDL_NO_BFA_SWITCH))    #error "r_fdl.h: Invalid define for support device macro"#elif ((defined R_FDL_NO_FCU_COPY) && (defined R_FDL_NO_BFA_SWITCH))    #error "r_fdl.h: Invalid define for support device macro"#elif (defined R_FDL_MIRROR_FCU_COPY)    #define R_FDL_INNER_NO_BFA_SWITCH#elif (defined R_FDL_NO_FCU_COPY)    #define R_FDL_INNER_NO_FCU_COPY#elif (defined R_FDL_NO_BFA_SWITCH)    #define R_FDL_INNER_NO_BFA_SWITCH    #define R_FDL_INNER_NO_FCU_COPY#endif
复制代码
  • 在 FDL V2.12 版本中增加了 R_FDL_NO_FCU_COPY, R_FDL_MIRROR_FCU_COPY 和 R_FDL_NO_BFA_SWITCH 预编译配置选项。

  • 在执行 FDL 库初始化时,为了从 MCU 内部拷贝固件,需要在固件区和用户区来回切换几次,需要定义宏 R_FDL_NO_BFA_SWITCH 。有些设备不需要拷贝固件(比如 RH850/D1M1A),需要定义 R_FDL_NO_FCU_COPY 宏。

  • 不要同时定义 R_FDL_NO_BFA_SWITCH 和 R_FDL_NO_FCU_COPY, R_FDL_MIRROR_FCU_COPY 。

预编译目标设备所需的定义如下表所示:


​第 5 步:修改 fdl_descriptor.h 文件。

  /* The Flash programming hardware is provided with a clock, derived from the CPU subsystem frequency. Check that        the frequency is correct as this has an impact on the programming quality and performance! */    #define CPU_FREQUENCY_MHZ       (240)                           /**< CPU frequency in MHz */     /*****************************************************************************************************************     *  Important definitions for run-time configuration of the FDL:      *   - EEL/FDL Pool -     *****************************************************************************************************************/    /* The physical erase unit of the Data Flash is 64Byte.        The Renesas EEL works with a ring buffer consisting of ring buffer (virtual) blocks that merge a certain number        of physical blocks.       E.g. virtual block size of 2kB equals 32 physical blocks of 64Bytes --> EEL_VIRTUALBLOCKSIZE = 32            virtual block size of 4kB equals 64 physical blocks of 64Bytes --> EEL_VIRTUALBLOCKSIZE = 64              Note: If the Renesas EEL is not used, an alignment is not necessary "EEL_VIRTUALBLOCKSIZE" need not be defined        and the pools start and size definitions can be set free to the application needs */    #define EEL_VIRTUALBLOCKSIZE    (64u)     #define FDL_POOL_SIZE           (16u * EEL_VIRTUALBLOCKSIZE)    /**< Number of Data Flash blocks, accessible by                                                                         the FDL. Typically it is the complete                                                                         no. of available Data Flash blocks */    #define EEL_POOL_START          (1u * EEL_VIRTUALBLOCKSIZE)     /**< 1st block of the EEL pool */    #define EEL_POOL_SIZE           (6u * EEL_VIRTUALBLOCKSIZE)     /**< no. of blocks for the EEL pool */
复制代码
  • CPU_FREQUENCY_MHZ:CPU 工作频率配置,请不要在库的运行期间改变 CPU 的工作频率,如果需要改变,改变后必须重新初始化 FDL 库;

  • EEL_VIRTUALBLOCKSIZE 虚拟块定:Data Flash 物理块的大小为 64Bytes,在 EEL(EE2PROM Emulation Library)库中,需要合并一定数量的物理块虚拟成一个虚拟块作为 EEL 的缓冲区,用户可以根据实际应用定义虚拟块的大小;如果没有使用 EEL,设 EEL_VIRTUALBLOCKSIZE = 0。如果使用 EEL,例如要定义 2KB 的虚拟块,则需要 32 块 64B 的物理块组成,那么设 EEL_VIRTUALBLOCKSIZE = 32。

  • FDL_POOL_SIZE :设备 Data Flash 的物理块的数量;

  • EEL_POOL_START、EEL_POOL_SIZE:EEL 池的起始块和大小定义。 如果没有使用 EEL,设 EEL_POOL_START = 0, EEL_POOL_SIZE = 0;如果使用 EEL,例如 EEL_POOL_START = 0u * EEL_VIRTUALBLOCKSIZE、EEL_POOL_SIZE = 5 * EEL_VIRTUALBLOCKSIZE。

2.2、使用 FDL 库

3、EEL 库

FDL 和 EEL 都是操作 Data Flash Memory,EEL 依托于 FDL,在 FDL 库中已经讲解了使用 EEL 的方法。EEL 和 FDL 关系如下图所示:

  • EEL PooL:EEL Pool 为 EEL 提供存储数据和管理信息;

  • User PooL:所有不是 EEL Pool 分配的 FDL Pool 空间都可由用户应用程序自由使用,因此称为 User PooL。

RH850FCL、FDL和EEL安装包、源码、配置PPT和使用说明-嵌入式文档类资源


瑞萨IDE:CS+ for CC下载、安装和基础使用

瑞萨IDE:CS+ for CC新建工程配置方法

瑞萨IDE:CS+ for CC进行BootLoader升级时开发环境配置

瑞萨E1/E20烧录工具自检方法

发布于: 刚刚阅读数: 4
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018-02-09 加入

嵌入式工程师,创客爱好者,公众号:美男子玩编程,全网粉丝10万+。 CSDN博客专家、微软IoT领域MVP、华为云云享专家、阿里云专家博主、知乎认证科学技术领域答主。

评论

发布
暂无评论
瑞萨RH850 FCL、FDL和EEL库的配置和使用_嵌入式_不脱发的程序猿_InfoQ写作社区