1. 程式人生 > 其它 >RISC-V MCU應用教程之讀寫內部Flash

RISC-V MCU應用教程之讀寫內部Flash

簡介

CH32V103系列是以青稞V3A處理器為核心的32位通用MCU,該處理器是基於RISC-V開源指令集設計。片上集成了時鐘安全機制、多級電源管理、通用DMA控制器。此係列具有1路USB2.0主機/裝置介面、多通道12位ADC轉換模組、多通道TouchKey、多組定時器、多路IIC/USART/SPI介面等豐富的外設資源。
本章教程將通過程式程式碼進行內部FLASH讀寫操作。

1、CH32V103內部FLASH簡介及相關函式介紹
CH32V103晶片含有一個內部FLASH,其儲存資料在掉電後不會丟失,主要用於儲存程式程式碼。晶片在重新上電並復位後,可通過載入讀取內部FLASH中程式程式碼執行。

通常,我們可通過兩種方式對內部FLASH進行讀寫:一是通過下載器等外部工具讀寫內部FLASH,二是通過晶片執行程式程式碼讀取自身內部FLASH。本章即通過第二種方法進行內部FLASH讀寫。此外,就讀寫速度而言,讀寫內部FLASH比外部FLASH快的多,且由於內部FLASH掉電後資料不會丟失,因此內部FLASH剩餘空間可用於儲存重要資料和關鍵記錄。

由於內部FLASH可被通過外部工具或程式程式碼讀寫,為了防止內部FLASH中儲存資料被獲取,某些應用會禁止讀寫內部FLASH內容,或在第一次執行時計算加密資訊並記錄到某些區域,然後刪除自身的部分加密程式碼,這些應用都涉及到內部FLASH的操作。

CH32V103內部FLASH主要包含主儲存器和資訊塊兩塊區域,其中資訊塊又可被分為兩塊系統引導程式碼儲存區域、使用者選擇字和廠商配置字區域。其中,主儲存器區域主要用於使用者的應用程式儲存,以4K位元組(32 頁)單位進行防寫劃分;除了“廠商配置字”區域出廠鎖定,使用者不可訪問,其他區域在一定條件下使用者可操作。

CH32V103內部FLASH具有2種程式設計/擦除方式,具體如下:
標準程式設計:此方式是預設程式設計方式(相容方式)。這種模式下CPU以單次2位元組方式執行程式設計,單次1K位元組執行擦除及整片擦除操作。
快速程式設計:此方式採用頁操作方式(推薦)。經過特定序列解鎖後,執行單次128位元組的程式設計及128位元組擦除。

關於CH32V103內部FLASH具體資訊,可參考CH32V103應用手冊。CH32V103內部FLASH標準庫函式具體內容如下:

 

2、硬體設計
本章教程主要通過程式程式碼進行內部FLASH讀寫操作,使用CH32V103內部資源,無需進行硬體連線。

3、軟體設計
CH32V103內部FLASH程式設計/擦除方式有兩種,一種是標準程式設計,一種是快速程式設計,本章即使用上述這兩種方式分別進行內部FLASH讀寫操作,程式程式設計主要分3個步驟:
1、對內部FLASH進行解鎖;
2、對內部FLASH進行頁擦除;
3、對內部FLASH進行讀寫操作。
根據上述操作步驟,編寫具體程式,具體程式如下:
flash.h檔案

flash.h檔案主要包含相關定義和函式宣告;

flash.c檔案

flash.c檔案主要包含兩個函式,一個是內部FLASH標準程式設計函式Flash_Test,一個是內部FLASH快速程式設計函式Flash_Test_Fast,這兩個函式具體執行過程如下:
內部FLASH標準程式設計函式Flash_Test執行過程:
(1)呼叫FLASH_Unlock函式進行解鎖;
(2) 根據起始地址及結束地址計算需要擦除頁數;
(3) 呼叫FLASH_ClearFlag函式清除各種標誌位;
(4) 使用for迴圈以及呼叫FLASH_ErasePage函式擦除頁數,每次擦除一頁;
(5) 使用while迴圈並呼叫FLASH_ProgramWord函式向起始地址至結束地址的儲存區域都寫入變數“Data”儲存的數值數值;
(6) 呼叫FLASH_Lock函式進行上鎖;
(7) 使用指標讀取寫入的資料內容並校驗。

內部FLASH快速程式設計函式Flash_Test_Fast執行過程與標準程式設計執行過程類似,具體如下:
(1)呼叫FLASH_Unlock_Fast函式進行解鎖;
(2) 呼叫FLASH_ErasePage_Fast函式擦除指定快閃記憶體頁;
(3) 呼叫FLASH_BufReset函式復位快閃記憶體緩衝區,執行清除內部128位元組快取區操作;
(4) 呼叫FLASH_BufLoad函式向指定地址開始連續寫入16位元組資料(4位元組/次操作,寫的地址每次偏移量為4),然後執行載入到緩衝區;
(5) 呼叫FLASH_ProgramPage_Fast函式啟動一次快速頁程式設計動作,程式設計指定的快閃記憶體頁;
(6) 呼叫FLASH_Lock_Fast函式進行上鎖;
(7) 使用for迴圈讀取程式設計地址進行資料校驗並返回校驗值。
以上兩個函式執行過程可對照CH32V103應用手冊第24章快閃記憶體操作流程進行程式編寫,更有助於理解程式設計。

main.c函式

 

 main.c函式主要進行函式初始化以及根據flash.c檔案兩個函式返回值輸出相應資訊。

4、下載驗證
將編譯好的程式下載到開發板並復位,串列埠列印情況具體如下:

根據串列埠列印資訊可知,內部FLASH標準程式設計和快速程式設計測試成功。