FDL库官方地址:Data Flash Libraries | Renesas
RH850的FDL库与用户手册地址:RH850/F1KM-S4 Design Support Resources | Renesas
一、FDL库的移植过程
1、添加文件到自己的工程中
(1)解压安装FDL库文件
(2)解压后对应文件夹介绍
(3)将官方库文件和对应的应用文件放到自己的工程文件中
2、用CS+中FDL需要添加的段
二、用户文件的修改
1、用户手册中对官方库文件与用户文件的介绍
2、将官方库文件和应用文件添加到自己工程
3、fdl_descriptor.h 中的修改
#define CPU_FREQUENCY_MHZ (120) //MCU的主频
#define EEL_VIRTUALBLOCKSIZE (64u) //Data FLASH每个blcok为64byte
#define FDL_POOL_SIZE (16u * EEL_VIRTUALBLOCKSIZE)
#define EEL_POOL_START (1u * EEL_VIRTUALBLOCKSIZE)
#define EEL_POOL_SIZE (6u * EEL_VIRTUALBLOCKSIZE)
//修改成,不使用EEL_POOL
#define CPU_FREQUENCY_MHZ (240) //MCU的主频
#define EEL_VIRTUALBLOCKSIZE (64u) //Data FLASH每个blcok为64byte
#define FDL_POOL_SIZE (1024) //Data Flash 64KB = 1024 blocks * 64 byte
#define EEL_POOL_START (0)
#define EEL_POOL_SIZE (0)
- EEL POOL:EEL Pool为EEL提供存储模拟数据和管理信息
- User POOL:所有非由EEL pool分配的FDL池空间都可由用户应用程序自由使用,因此称为
用户池
三、 FDL库的大致使用流程
/* 1.初始FDL库 */
fdlRet = R_FDL_Init( &DeviceFDLCfg_des );
if( R_FDL_OK != fdlRet )
{
/* Error handler */
while( 1 );
}
/* 2.准备FDL环境 */
req.command_enu = R_FDL_CMD_PREPARE_ENV;
req.idx_u32 = 0;
req.cnt_u16 = 0;
req.accessType_enu = R_FDL_ACCESS_NONE;
R_FDL_Execute( &req );
while( R_FDL_BUSY == req.status_enu )
{
R_FDL_Handler();
}
if( R_FDL_OK != req.status_enu )
{
/* Error handler */
while( 1 );
}
/* 3.擦除要写的块 */
req.command_enu = R_FDL_CMD_ERASE;
req.idx_u32 = 0;
req.cnt_u16 = 1;
req.accessType_enu = R_FDL_ACCESS_USER;
R_FDL_Execute( &req );
while( R_FDL_BUSY == req.status_enu )
{
R_FDL_Handler();
}
if( R_FDL_OK != req.status_enu )
{
/* Error handler */
while( 1 )
;
}
/* 4.写入已经擦除的块 */
req.command_enu = R_FDL_CMD_WRITE;
req.idx_u32 = 0x0000;
req.cnt_u16 = 0x8;
req.bufAddr_u32 = (uint32_t)( &wBuf_au08[0] );
req.accessType_enu = R_FDL_ACCESS_USER;
R_FDL_Execute( &req );
while( R_FDL_BUSY == req.status_enu )
{
R_FDL_Handler();
}
if( R_FDL_OK != req.status_enu )
{
/* Error handler */
while( 1 )
;
}
/* 5.读取写入的数据*/
req.command_enu = R_FDL_CMD_READ;
req.idx_u32 = 0x0000;
req.cnt_u16 = 0x8;
req.bufAddr_u32 = (uint32_t)( &rBuf_au32[0] );
req.accessType_enu = R_FDL_ACCESS_USER;
R_FDL_Execute( &req );
while( R_FDL_BUSY == req.status_enu )
{
R_FDL_Handler();
}
if( R_FDL_OK != req.status_enu )
{
/* Error handler */
while( 1 )
;
}