91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【干貨分享】瑞薩RA6E2地奇星開發(fā)板Flash讀寫與OLED顯示實戰(zhàn)

電子發(fā)燒友論壇 ? 2025-12-16 08:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


本次測評基于瑞薩RA6E2地奇星開發(fā)板,驗證其內(nèi)部 Code Flash 與 Data Flash 的讀寫功能穩(wěn)定性與可靠性,測試 Flash 擦除、寫入、讀取及數(shù)據(jù)驗證的全流程可行性,為后續(xù)嵌入式項目存儲方案提供參考依據(jù)。


摘自優(yōu)秀創(chuàng)作者-jf_34532509

https://bbs.elecfans.com/jishu_2507323_1_1.html


613810e4-da13-11f0-8ce9-92fbcf53809c.png
瑞薩RA6E2-地奇星開發(fā)板
測評環(huán)境:e2 studio + FSP( Flexible Software Package ) + RA6E2地奇星開發(fā)板

1、測評概述

硬件與軟件環(huán)境

61515c02-da13-11f0-8ce9-92fbcf53809c.png

616d8670-da13-11f0-8ce9-92fbcf53809c.png

核心測評流程

  1. 初始化 Flash 控制器,配置 FSP 底層驅(qū)動;
  2. 對指定 Flash 塊執(zhí)行擦除操作,驗證擦除后空白狀態(tài);
  3. 向 Code Flash 與 Data Flash 寫入測試數(shù)據(jù);
  4. 從 Flash 讀取數(shù)據(jù),通過memcmp函數(shù)驗證讀寫一致性;
  5. 通過 OLED 顯示讀寫狀態(tài)及數(shù)據(jù),直觀呈現(xiàn)測試結(jié)果。


二、測評原理與代碼實現(xiàn)

2.1 Flash 讀寫核心原理

瑞薩RA6E2的 Code Flash 與 Data Flash 均基于 NOR Flash 架構(gòu),遵循"先擦除,后寫入"的操作原則:

  • 擦除:將指定 Flash 塊的所有字節(jié)置為0xFF(空白狀態(tài));
  • 寫入:僅能將0xFF位改寫為0,無法直接將0改寫為1;
  • 驗證:讀取寫入后的數(shù)據(jù)與原始數(shù)據(jù)對比,一致則代表讀寫成功。

2.2 FSP庫配置

對于IIC引腳的相關(guān)配置在之前帖子中講過了,試用軟件IIC主要就是把SCL和SDA引腳配置成GPIO接口模擬IIC數(shù)據(jù)的傳輸即可。本次主要介紹flash相關(guān)FSP庫的配置。
步驟如下:

  1. 打開configuration.xml,先配置Clock,開發(fā)板有連個晶振,分別是20MHz和32.768kHz。這里一定要20MHz的主控晶振。RTC時鐘晶振在這里不做要求。
    619db5ac-da13-11f0-8ce9-92fbcf53809c.png
  2. 新增flash堆棧
    61b2881a-da13-11f0-8ce9-92fbcf53809c.png
    61d27e68-da13-11f0-8ce9-92fbcf53809c.png

通過上述配置就完成了flash的FSP庫的配置。

2.3 芯片內(nèi)部flash Memory結(jié)構(gòu)及地址

通過查閱用戶手冊,flash memory相關(guān)的模塊框圖如下:
61e64722-da13-11f0-8ce9-92fbcf53809c.png

通過上圖我們可以知道應(yīng)用層通過FACI向閃存子系統(tǒng)發(fā)起操作請求,F(xiàn)CU解析FACI轉(zhuǎn)發(fā)的命令,結(jié)合外部信號生成時序控制邏輯,通過Flash sequencer完成操作的資源調(diào)度與流程編排。Flash sequencer根據(jù)FCU的控制指令對目標(biāo)存儲介質(zhì)進(jìn)行擦除-編程操作。
code flash的存儲器地址映射如下圖:
61fd71e0-da13-11f0-8ce9-92fbcf53809c.png

值得注意的是,每個塊對應(yīng)的內(nèi)存容量不一樣,后續(xù)代碼編寫需要注意,本次使用Block 13塊進(jìn)行操作,從0x0003_8000開始編寫。
data flash的存儲器地址映射如下:

621692ec-da13-11f0-8ce9-92fbcf53809c.png

本次代碼編寫從起始地址0x0800_0000開始編寫。

2.4 關(guān)鍵代碼實現(xiàn)


本次測評采用 FSP 標(biāo)準(zhǔn) API 完成 Flash 操作,核心代碼邏輯如下:
本次所有有關(guān)flash的代碼都在hal_entry.c文件下編寫:

1. 對相關(guān)地址寄存器的地址進(jìn)行宏定義

#defineFLASH_CF_BLOCK_21 0x00038000U#defineFLASH_DF_BLOCK_0 0x08000000U#defineFLASH_DATA_BLOCK_SIZE (1024*32)

2. 回調(diào)函數(shù)實現(xiàn)

volatilebool interrupt_called;volatileflash_event_t flash_event;voidflash_callback(flash_callback_args_t*p_args){ interrupt_called =true; flash_event = p_args->event;}

通過回調(diào)函數(shù),F(xiàn)lash操作完成后,主動觸發(fā)中斷然后調(diào)用回調(diào)函數(shù)并置位標(biāo)志位,主程序只需要等待標(biāo)志位即可,從而降低CPU資源占用率。

3. 擦除flash

// 擦除Code Flash R_FLASH_HP_Erase(&g_flash0_ctrl,FLASH_CF_BLOCK_21,1);

4. 寫入Code Flash

// 寫入Code Flash R_FLASH_HP_Write(&g_flash0_ctrl, (uint32_t)test_data, FLASH_CF_BLOCK_21,256);

5. 讀取并驗證是否寫入成功

memcpy(read_data, (uint8_t*)FLASH_CF_BLOCK_21,4);if(memcmp(test_data, read_data,4) ==0){// OLED顯示"code flash寫入成功"OLED_ShowString(1,1,"code flash: OK");// 顯示讀取的實際數(shù)據(jù)for(uint8_ti=0; i<4; i++)?OLED_ShowHexNum(2,1+i*3, read_data[i],?2);}else{OLED_ShowString(2,1,"code flash: FAIL");assert(false);}

data flash相關(guān)代碼和code flash基本一致,因此不在展示。
整體相關(guān)實現(xiàn)代碼如下:

#include"hal_data.h"#include"oled.h"#include // 僅用于memcpy/memcmp#if(1 == BSP_MULTICORE_PROJECT) && BSP_TZ_SECURE_BUILDbsp_ipc_semaphore_handle_tg_core_start_semaphore = {.semaphore_num =0};#endif// Flash 塊地址定義#defineFLASH_CF_BLOCK_21 0x00038000U // Code Flash 21塊地址#defineFLASH_DF_BLOCK_0 0x08000000U // Data Flash 0塊地址#defineFLASH_DATA_BLOCK_SIZE (1024*32) // Code Flash 塊容量(32KB)// Flash 中斷回調(diào)標(biāo)志與事件volatilebool interrupt_called;volatileflash_event_t flash_event;/*** [url=home.php?mod=space&uid=2666770]@Brief[/url] Flash 中斷回調(diào)函數(shù)* [url=home.php?mod=space&uid=1902110]@NOTE[/url] 用于感知Flash異步操作(擦除/寫入)的完成狀態(tài)*/voidflash_callback(flash_callback_args_t*p_args){ interrupt_called =true; // 置位操作完成標(biāo)志 flash_event = p_args->event;// 記錄操作結(jié)果事件}/*** @brief 主入口函數(shù):實現(xiàn)Code Flash/Data Flash讀寫驗證*/voidhal_entry(void){ fsp_err_terr; uint8_ttest_data[4] = {0x1a,0x24,0x46,0x6a}; // 測試數(shù)據(jù)(4字節(jié)) uint8_tread_data[4] = {0}; // Flash讀取數(shù)據(jù)緩存 // 初始化OLED(可視化驗證結(jié)果) OLED_Init(); OLED_Clear(); // ========== Code Flash 操作流程 ========== // 1. 打開Flash控制器 err =R_FLASH_HP_Open(&g_flash0_ctrl, &g_flash0_cfg); assert(FSP_SUCCESS == err); // 2. 關(guān)閉全局中斷,避免Flash操作被干擾 __disable_irq(); // 3. 擦除Code Flash 21塊(擦除是寫入的前提) R_FLASH_HP_Erase(&g_flash0_ctrl, FLASH_CF_BLOCK_21,1); // 4. 寫入測試數(shù)據(jù)到Code Flash(最小寫入單位256字節(jié)) R_FLASH_HP_Write(&g_flash0_ctrl, (uint32_t)test_data, FLASH_CF_BLOCK_21,256); // 5. 恢復(fù)全局中斷 __enable_irq(); // 6. 讀取+驗證Code Flash數(shù)據(jù) memcpy(read_data, (uint8_t*)FLASH_CF_BLOCK_21,4); if(memcmp(test_data, read_data,4) ==0) { // OLED顯示Code Flash寫入成功 OLED_ShowString(1,1,"code flash: OK"); // 顯示讀取的實際數(shù)據(jù)(十六進(jìn)制) for(uint8_ti=0; i<4; i++)?OLED_ShowHexNum(2,1+i*3, read_data[i],?2);? ? }? ? else? ? {? ? ? ? OLED_ShowString(2,1,"code flash: FAIL");? ? ? ? assert(false); ?// 驗證失敗觸發(fā)斷言,定位錯誤? ? }? ? // ========== Data Flash 操作流程 ==========? ? // 1. 重置中斷完成標(biāo)志? ? interrupt_called =?false;? ? // 2. 擦除Data Flash 0塊 + 等待中斷回調(diào)確認(rèn)完成? ? R_FLASH_HP_Erase(&g_flash0_ctrl, FLASH_DF_BLOCK_0,?1);? ? while(!interrupt_called);? ? // 3. 寫入測試數(shù)據(jù)到Data Flash(最小寫入單位4字節(jié))? ? R_FLASH_HP_Write(&g_flash0_ctrl, (uint32_t)test_data, FLASH_DF_BLOCK_0,?4);? ? // 4. 等待寫入操作完成(輪詢狀態(tài)寄存器)? ? flash_status_t?status;? ? do{R_FLASH_HP_StatusGet(&g_flash0_ctrl, &status);}while(FLASH_STATUS_BUSY == status);? ? // 5. 讀取+驗證Data Flash數(shù)據(jù)? ? memcpy(read_data, (uint8_t?*)FLASH_DF_BLOCK_0,?4);? ? if(memcmp(test_data, read_data,?4) ==?0)? ? {? ? ? ? // OLED顯示Data Flash寫入成功? ? ? ? OLED_ShowString(3,1,"data flash: OK");? ? ? ? // 顯示讀取的實際數(shù)據(jù)(十六進(jìn)制)? ? ? ? for(uint8_t?i=0; i<4; i++)?OLED_ShowHexNum(4,1+i*3, read_data[i],?2);? ? }? ? else? ? {? ? ? ? OLED_ShowString(4,1,"data flash: FAIL");? ? ? ? assert(false); ?// 驗證失敗觸發(fā)斷言,定位錯誤? ? }? ? // 多核相關(guān)代碼(保留以避免編譯錯誤,單核場景可忽略)#if?(0 == _RA_CORE) && (1 == BSP_MULTICORE_PROJECT) && !BSP_TZ_NONSECURE_BUILD#if?BSP_TZ_SECURE_BUILD? ? R_BSP_IpcSemaphoreTake(&g_core_start_semaphore);#endif? ? R_BSP_SecondaryCoreStart();#if?BSP_TZ_SECURE_BUILD? ? while(FSP_ERR_IN_USE ==?R_BSP_IpcSemaphoreTake(&g_core_start_semaphore)){}#endif#endif#if?(1 == _RA_CORE) && (1 == BSP_MULTICORE_PROJECT) && BSP_TZ_SECURE_BUILD? ? R_BSP_IpcSemaphoreGive(&g_core_start_semaphore);#endif#if?BSP_TZ_SECURE_BUILD? ? R_BSP_NonSecureEnter();#endif}// 安全相關(guān)空函數(shù)(保留以避免編譯錯誤)#if?BSP_TZ_SECURE_BUILDFSP_CPP_HEADERBSP_CMSE_NONSECURE_ENTRY?void?template_nonsecure_callable?();BSP_CMSE_NONSECURE_ENTRY?void?template_nonsecure_callable?(){}FSP_CPP_FOOTER#endif

三、測評結(jié)果與分析

3.1 功能驗證結(jié)果

6229e87e-da13-11f0-8ce9-92fbcf53809c.png

3.2 常見問題與解決方案

623c5f2c-da13-11f0-8ce9-92fbcf53809c.png

四、測評總結(jié)與建議

4.1 測評總結(jié)

  1. 瑞薩RA6E2地奇星開發(fā)板的Code FlashData Flash讀寫功能穩(wěn)定可靠,數(shù)據(jù)驗證一致性達(dá) 100%,完全滿足嵌入式項目的存儲需求。
  2. FSP 驅(qū)動封裝簡潔易用,通過標(biāo)準(zhǔn)化 API 即可完成 Flash 全流程操作,降低了開發(fā)門檻。
  3. Code Flash 適合存儲程序固件或大容量靜態(tài)數(shù)據(jù),Data Flash 適合存儲小容量頻繁更新的參數(shù)(如設(shè)備配置信息)。

4.2 應(yīng)用建議

  1. 存儲方案選型
  • 大容量、低更新頻率數(shù)據(jù) → Code Flash;
  • 小容量、高更新頻率數(shù)據(jù) → Data Flash;
  • 關(guān)鍵數(shù)據(jù)建議采用雙備份存儲,提升可靠性。
  • 開發(fā)優(yōu)化建議
    • 擦除和寫入操作耗時較長,建議在非中斷敏感時段執(zhí)行;
    • 頻繁寫入的場景可引入wear leveling(磨損均衡)算法,延長 Flash 使用壽命;
    • 利用 Flash 保護(hù)功能,對關(guān)鍵數(shù)據(jù)塊進(jìn)行寫保護(hù),防止誤操作。


6250b210-da13-11f0-8ce9-92fbcf53809c.png


6258b500-da13-11f0-8ce9-92fbcf53809c.png聲明:本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請注明以上來源。如需平臺(包括:試用+專欄+企業(yè)號+學(xué)院+技術(shù)直播+共建社區(qū))合作及入群交流,請咨詢18925255684(微信同號:elecfans123),謝謝!

更多熱點文章閱讀

基于ESP32的終極智能手表,全過程+全開源!

RDK X3暴改機(jī)器人:手搓能爬樓的AI快遞員會爬樓能嘮嗑

基于樹莓派制作一個番茄鐘機(jī)器人!

用ESP12E做一個3D打印的6輪搖臂火星探測車

基于ESP32的圓形顯示屏互動式圣誕雪球

基于Arduino控制的六足機(jī)器人


62673486-da13-11f0-8ce9-92fbcf53809c.png


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • OLED
    +關(guān)注

    關(guān)注

    121

    文章

    6358

    瀏覽量

    233629
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1748

    瀏覽量

    155515
  • 瑞薩
    +關(guān)注

    關(guān)注

    37

    文章

    22481

    瀏覽量

    90867
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    26

    文章

    6291

    瀏覽量

    118076
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RA6E2開發(fā)板試用】+初識地

    是我見到的首款外觀近似于ESP32系列開發(fā)板產(chǎn)品,其修長的體型與常規(guī)的
    發(fā)表于 12-05 20:51

    RA6E2開發(fā)板試用】+開發(fā)環(huán)境構(gòu)建與下載測試

    這次試用的RA6E2-立創(chuàng)地是一款高性價比的開發(fā)板,為透徹地體驗它的性能,構(gòu)建其
    發(fā)表于 12-06 00:11

    RA6E2開發(fā)板試用】+3款RA6E2開發(fā)板的比較

    在同一時期,能在論壇出現(xiàn)3款RA6E2開發(fā)板是一件不多見的罕見事兒。 出于好奇不免想對其做一下比較看看各自都有些啥特點。 1 . 體型和外觀 我們的地星主打的就是一個小巧秀氣,見圖1所示。 圖1
    發(fā)表于 12-06 10:06

    RA6E2開發(fā)板試用】介紹、環(huán)境搭建、工程測試

    RA6E2開發(fā)板試用】介紹、環(huán)境搭建、工程測試 本文介紹了
    發(fā)表于 12-07 15:27

    RA6E2開發(fā)板試用】開發(fā)板相關(guān)資料介紹、點燈工程創(chuàng)建及演示

    HDMI CEC,SSI Quad SPI 12位A/D轉(zhuǎn)換器 12位D/A轉(zhuǎn)換器 通用PWM定時器 有預(yù)留的 SWD 接口。 詳見:【立創(chuàng)·地RA6E2開發(fā)板 文檔中心。 h
    發(fā)表于 12-08 16:44

    RA6E2開發(fā)板試用】+ 5.RA6E2開發(fā)板coremark跑分測試313分

    RA6E2開發(fā)板這款開發(fā)板性能很強(qiáng)的,是A
    發(fā)表于 12-09 17:18

    RA6E2開發(fā)板試用】 環(huán)境配置+串口驅(qū)動LED燈

    RA6E2開發(fā)板試用】+ 環(huán)境配置+串口驅(qū)動LED燈 1.硬件準(zhǔn)備 USB-TTL驅(qū)動
    發(fā)表于 12-10 15:35

    RA6E2開發(fā)板試用】軟件IIC驅(qū)動OLED屏幕實現(xiàn)數(shù)字打印

    RA6E2測評版 軟件IIC驅(qū)動OLED數(shù)字顯示
    發(fā)表于 12-11 19:58

    RA6E2開發(fā)板試用】內(nèi)部Code flash和Data flash寫入數(shù)據(jù)并通過OLED顯示

    RA6E2開發(fā)板 Code Flash與D
    發(fā)表于 12-12 20:15

    RA6E2開發(fā)板試用】LED點亮

    的寄存器和IO關(guān)系吧,官方給了資料在\\\\立創(chuàng)·地RA6E2開發(fā)板\\\\4、官方文檔\\\\RA6E2 Group.pdf,第438
    發(fā)表于 12-16 22:02

    RA6E2開發(fā)板試用】使用RA6E2驅(qū)動 esp8266 WiFi模塊進(jìn)行串口通信【已修復(fù)】

    1. 需求描述 使用RA6E2驅(qū)動 esp8266 WiFi模塊,用串口調(diào)試助手顯示 esp8266WiFi模塊響應(yīng)數(shù)據(jù)。 具體來說: 串口調(diào)試助手發(fā)送 AT 指令到
    發(fā)表于 12-17 10:13

    RA6E2開發(fā)板試用】DHT11 測量溫濕度

    使用 RA6E2 微控制器,實現(xiàn) DHT11 溫濕度傳感器的數(shù)據(jù)采集,并通過 I2C 接口的 OLED12864
    發(fā)表于 12-19 18:50

    RA6E2開發(fā)板試用】開發(fā)板介紹及環(huán)境搭建

    一、開發(fā)板簡介 “地”是立創(chuàng)聯(lián)合(Renesas)推出的高性價比 Cortex-M33 入門級
    發(fā)表于 12-22 00:40

    RA6E2開發(fā)板試用】使用`RA6E2`驅(qū)動 `ESP8266 WiFi模塊`,調(diào)試AT指令。

    ) 5. 工程運行效果 6. 總結(jié) 本文介紹了【 RA6E2
    發(fā)表于 12-25 10:08

    試用活動 | 100套??!RA6E2/RA4E2開發(fā)板評測活動

    活動簡介: RA6E2/RA4E2開發(fā)板評測活動是一個針對
    的頭像 發(fā)表于 09-10 11:18 ?1727次閱讀
    試用活動 | 100套??!<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA6E2</b>/<b class='flag-5'>RA4E2</b><b class='flag-5'>開發(fā)板</b>評測活動