[软件] RA4M2-SENSOR开发板的Memory存储区读写测试

[复制链接]
385|0
jinglixixi 发表于 2025-9-30 23:15 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2025-9-30 23:18 编辑

申请原创


RA4M2-SENSOR开发板允许对Memory存储器进行读写,而Memory存储器则包括Code FlashData FlashSRAM
对于RA4M2-SENSOR 开发板来说,其芯片型号 R7FA4M2AD3CFL。它的分为两块,一块大小为8Kb,另一块为32Kb,见图1所示。
6918068dbf2890fcae.png
1  flash存储空间大小


对于code flash来说,其存储区域划分见图2所示。
1682968dbf29a4e81c.png
2 存储区域划分

为进行code flash读写测试,需使用RASC按图3进行配置并生成KEIL项目工程。
9748268dbf2abb6854.png
3 配置处理

在完成配置并生成项目工程后,需为读写code flash添加以下函数:
  1. void FLASH_Init(void)
  2. {
  3.         err = R_FLASH_HP_Open(&g_flash0_ctrl,&g_flash0_cfg);
  4.         assert(err == FSP_SUCCESS);
  5. }

  6. void Code_FLASH_Test(void)
  7. {
  8.         err = FSP_SUCCESS;
  9.         uint8_t *p = CODE_FLASH_TEST_ADDR;
  10.         for(uint8_t i = 0;i < CODE_FLASH_TEST_NUM;i++)
  11.         {
  12.                 write_buffer[i] = i;
  13.                 printf("buffer[ %d ]= %d \n\r",i,write_buffer[i] );        
  14.         }
  15.         
  16.         // 擦除,在写入新数据前必须擦除
  17.         printf("Erase start\n\r");
  18.         __disable_irq();                                // 关闭所有中断
  19.         err = R_FLASH_HP_Erase(&g_flash0_ctrl,CODE_FLASH_TEST_ADDR,1);  // 0x00078000地址开始,擦除一个块
  20.         assert(err == FSP_SUCCESS);
  21.         __enable_irq();

  22.         // 写入新数据
  23.         printf("write start\n\r");
  24.          __disable_irq();
  25.         err = R_FLASH_HP_Write(&g_flash0_ctrl, (uint32_t)write_buffer, CODE_FLASH_TEST_ADDR, CODE_FLASH_TEST_NUM);
  26.         assert(err == FSP_SUCCESS);
  27.          __enable_irq();
  28.         
  29.         // 读取指定地址的数据
  30.         printf("read start\n\r");
  31.         for(uint8_t i = 0;i < CODE_FLASH_TEST_NUM;i++)
  32.         {
  33.                 read_buffer[i] = *(p + i);
  34.                 printf("buffer[ %d ]= %d \n\r",i,read_buffer[i] );        
  35.         }
  36.         
  37.         // 对比写入和读取的数据
  38.         if (0 == memcmp(read_buffer, write_buffer, CODE_FLASH_TEST_NUM))
  39.         {
  40.                 printf("Data consistency\n\r");                // 数据一致,读写正确
  41.         }
  42.         else
  43.         {
  44.                 printf("Data inconsistency\n\r");               // 数据不一致
  45.                 while(1);
  46.         }
  47. }

读写测试的主程序为:
  1. void hal_entry(void)
  2. {
  3.            err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
  4.            assert(FSP_SUCCESS == err);        
  5.            FLASH_Init();
  6.            pritf("FLASH test: \n\r");
  7.            Code_FLASH_Test();                        
  8.            while(1);
  9. }

经程序的编译和下载,其程序的测试结果如图4至图6所示。
7222568dbf338a698f.png
4 写入数据

8693668dbf35233b34.png
5 读取数据

2385368dbf3697ba6d.png
6 数据对比


此外,还可以在DeBug模式下,使用变量和存储器来进行观察。
通过指定存储器地址来观察的效果如图7所示,而通过变量来观察的效果则如图8和图9所示。
6968268dbf38307fc4.png
7  观察存储器内容

9441468dbf3ac05035.png
8 观察写入变量

4457168dbf3ef82f8f.png
9 观察读取变量


您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部