本帖最后由 jinglixixi 于 2025-9-30 23:18 编辑
申请原创
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 读取数据
图6 数据对比
此外,还可以在DeBug模式下,使用变量和存储器来进行观察。 通过指定存储器地址来观察的效果如图7所示,而通过变量来观察的效果则如图8和图9所示。 图7 观察存储器内容
图8 观察写入变量
图9 观察读取变量
|