目錄預覽
1. 引言
2. MDK 下載算法基礎知識
3.程序擦除操作執行流程
4.程序燒錄操作執行流程
5. 程序校驗操作執行流程
6. MDK 創建下載算法過程通用步驟
7. 添加 QSPI-FLASH 驅動及其有關庫函數
8. 算法和使用方法
9. 小結
1.引言
隨著用戶的應用越來越復雜以及 GUI 等需要大存儲空間的需求越來越多,很多時候我們需要將代碼或數據放在外擴的 Flash 存儲空間。但是這樣存在一個外部 Flash 燒寫的問題,尤其是在應用調試時,需要將代碼或數據燒錄到外部 Flash。
如果調試工具不能夠一鍵燒錄,勢必會給調試帶來諸多的麻煩。本文以 STM32H750 芯片為例,介紹通過 KEIL制作 QSPI 接口的外部 Flash 下載算法的方法。
2.MDK 下載算法基礎知識
FLASH 編程算法是一種用于擦除應用程序或將應用程序下載到 Flash 的程序代碼。MDK 本身支持的各種器件都自帶下載算法,存放在 MDK 各種器件的軟件包里面,以STM32H7 為例,算法存在于
KeilSTM32H7xx_DFP2.6.0CMSISFlash
(軟件包版本不同,數字 2.6.0 會不同)。但是,只有 STM32 官方部分開發板提供了算法工程,大多數用戶開發板都需要自己編寫下載算法。不同的 QSPI-FLASH 的驅動略有差別,因此下載算法也不同。所以,掌握通用的下載算法制作步驟很重要。
MDK 通過創建一批與地址信息無關的函數,實現的功能主要有初始化,擦除,編程,讀取,校驗等,然后在 MDK 調試下載階段,會將算法文件加載到芯片的內部 RAM 里面(加載地址可以通過 MDK 設置),然后 MDK 通過與這個算法文件的交互,實現程序下載,調試階段數據讀取等操作。
3.程序擦除操作執行流程
如圖 1
(Algorithm Functions (keil.com)所示
可以看出 Flash 的擦除過程包括以下幾個步驟:
a) 加載算法到 RAM(一般指片內 SRAM)
b) 執行初始化函數 Init
c) 執行擦除操作,根據用戶的 MDK 配置,這里可以選擇整個芯片擦除或者扇區擦
除。
d) 擦除操作結束后執行 Uninit 函數
4.程序燒錄操作執行流程
如圖 2
(Algorithm Functions (keil.com)
所示,程序燒錄執行流程包括以下步驟:
a)對所有的 AXF 文件做 init 初始化(AXF 是 MDK 生成的可執行文件,也就是需要燒
錄和調試的代碼)
b)查看燒寫算法 FLM 文件是否存在,如果不存在,則操作結束;如果存在,則繼續
c)加載算法文件到 RAM 中
d)執行初始化函數 Init
e)加載用戶程序代碼至 RAM 中
f)執行寫入編程函數 Program Page
g)執行 Uninit 函數
f)操作結束
從以上操作過程中可以看出,我們的用戶代碼是先放在 RAM 中緩存的,然后 IDE 通過調用 RAM 中的 FLASH 寫入函數 Program Page 將代碼寫入到 Flash 中,完成代碼的燒錄。
5.程序校驗操作執行流程
程序校驗操作大致流程如圖 3(Algorithm Functions (keil.com)所示
其中校驗要用到 MDK 生成的 axf 可執行文件。
校驗就是 把 axf 文件中的程序和實際下載到芯片的程序讀出來做比較。
a)查看燒寫算法 FLM 文件是否存在,如果不存在,則操作失??;如果存在,則繼續
b)加載算法到 RAM 中
c)執行初始化 Init
d)檢查校驗算法是否存在:
如果存在,加載應用程序到 RAM 中,然后執行校驗算法函數
如果不存在,計算 CRC,將芯片中讀取出來的數據和 RAM 中加載應用計算輸出的
CRC 值做比較。
e)執行 Uninit 函數。
f)替換 BKPT( BreakPoint 斷點指令)為 B. 死循環指令
h)執行 RecoverySupportStop, 恢復支持停止。
i)執行 DebugCoreStop,調試內核停止
g)運行應用,若運行成功,則硬件復位
k)操作完成,停止調試端口
6.MDK 創建下載算法過程通用步驟
6.1使用 MDK 提供的通用模板
模板路徑:
C:Keil_v5ARMPacksARMCMSIS5.6.0Device_Template_Flash
請找到自己 MDK 的安裝路徑,找到后將工程拷貝出來。然后將以下兩個文件的只讀屬性取消。FlashDev.c 是 flash 信息描述文件,需要根據自己的 flash 實際情況修改。FlashPrg.c 是具體擦除、寫入、校驗等接口函數實現文件,需要自己根據實際情況進行開發。
同時MDK提供的工程模板原始名字是 NewDevice.uvprojx, 大家可以根據自己的需要做修改。
6.2MDK 工程設置
6.2.1 修改使用的芯片型號
6.2.2修改輸出算法文件名
圖6.修改輸出算法文件名
這個名字是方便用戶查看的, 比如設置為 stm32h7,那么輸出的算法文件就是stm32h7.flm。
6.2.3設置算法文件中 RO 和 RW 段的獨立性
選擇“ ROPI”以及 “RWPI”選項, 可以避免用戶不得不將代碼加載到內存中的特定位置。
6.2.4將程序可執行文件 axf 修改為 FLM
通過以下命令即可在編譯后生成 FLM 文件。
6.2.5 分散加載設置
分散加載文件 Target.lin 模板中有提供,--diag_suppress L6305 用于屏蔽 L6503 類型警告信息,設置了分散加載后, 此處的配置就不再起作用了。
長按掃碼關注公眾號
更多資訊,盡在STM32
▽點擊“閱讀原文”,可下載原文檔
-
單片機
+關注
關注
6039文章
44579瀏覽量
636448 -
STM32
+關注
關注
2270文章
10910瀏覽量
356582
原文標題:工程師筆記|通過 KEIL 制作 QSPI 接口的外部 Flash 下載算法
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論