RA4M2-SENSOR开发板允许对Memory存储器进行读写,而Memory存储器则包括Code Flash、Data Flash及SRAM。
对于RA4M2-SENSOR 开发板来说,其芯片型号为R7FA4M2AD3CFL。它的分为两块,一块大小为8Kb,另一块为32Kb,见图1所示。

图1 flash存储空间大小
对于code flash来说,其存储区域划分见图2所示。

图2 存储区域划分
为进行code flash读写测试,需使用RASC按图3进行配置并生成KEIL项目工程。

图3 配置处理
在完成配置并生成项目工程后,需为读写code flash添加以下函数:
void FLASH_Init(void)
{
err = R_FLASH_HP_Open(&g_flash0_ctrl,&g_flash0_cfg);
assert(err == FSP_SUCCESS);
}
void Code_FLASH_Test(void)
{
err = FSP_SUCCESS;
uint8_t *p = CODE_FLASH_TEST_ADDR;
for(uint8_t i = 0;i < CODE_FLASH_TEST_NUM;i++)
{
write_buffer[i] = i;
printf("buffer[ %d ]= %d \n\r",i,write_buffer[i] );
}
// 擦除,在写入新数据前必须擦除
printf("Erase start\n\r");
__disable_irq(); //关闭所有中断
err = R_FLASH_HP_Erase(&g_flash0_ctrl,CODE_FLASH_TEST_ADDR,1); //0x00078000地址开始,擦除一个块
assert(err == FSP_SUCCESS);
__enable_irq();
// 写入新数据
printf("write start\n\r");
__disable_irq();
err = R_FLASH_HP_Write(&g_flash0_ctrl, (uint32_t)write_buffer, CODE_FLASH_TEST_ADDR, CODE_FLASH_TEST_NUM);
assert(err == FSP_SUCCESS);
__enable_irq();
// 读取指定地址的数据
printf("read start\n\r");
for(uint8_t i = 0;i < CODE_FLASH_TEST_NUM;i++)
{
read_buffer[i] = *(p + i);
printf("buffer[ %d ]= %d \n\r",i,read_buffer[i] );
}
// 对比写入和读取的数据
if (0 == memcmp(read_buffer, write_buffer, CODE_FLASH_TEST_NUM))
{
printf("Data consistency\n\r"); //数据一致,读写正确
}
else
{
printf("Data inconsistency\n\r"); //数据不一致
while(1);
}
}
读写测试的主程序为:
void hal_entry(void)
{
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
FLASH_Init();
pritf("FLASH test: \n\r");
Code_FLASH_Test();
while(1);
}
经程序的编译和下载,其程序的测试结果如图4至图6所示。

图4 写入数据

图5 读取数据

图5 数据对比
此外,还可以在DeBug模式下,使用变量和存储器来进行观察。
通过指定存储器地址来观察的效果如图6所示,而通过变量来观察的效果则如图7和图8所示。

图6 观察存储器内容


图7 观察写入变量


图8 观察读取变量
|