?
1引言
?需求?
MM32F5 系列微控制器具備 QSPI 接口,可以外接 QSPI Flash,擴大可使用的 Flash 空間,從而滿足那些需要大 Flash 空間應用的需求,讓 Flash 空間的大小不再成為限制應用開發的瓶頸。
但使用 QSPI Flash 之前,還需要對 QSPI 接口進行配置,然后才能執行存儲在 QSPI Flash 上的代碼,這讓應用程序的開發變得復雜。
因此,需要一些解決方案,能夠讓用戶盡可能無感地使用 QSPI Flash 存儲應用程序。
案例
以 MM32F5277E9PV 微控制器為例,這個微控制器搭載著 ArmChina STAR-MC1 內核,主頻可達 120MHz,擁有 256KB Flash 和 128KB SRAM,使用這塊芯片,可以實現一些 “復雜的應用”,例如,運行一個帶有 GUI 功能的應用。
在編譯這個 “復雜的應用” 時,編譯器可能會報錯,顯示缺少足夠 Flash 空間;這個應用可能包含了圖片,字庫,好幾個協議棧,所需要的 Flash 空間非常大,一般微控制器不會擁有這么大的片內 Flash。因此,需要外接一個 QSPI Flash 來解決這個問題。
MM32F5270 系列微控制器帶有 QSPI 接口,可以使用 QSPI Flash 來擴展微控制器可使用的 Flash 空間;如果擔心外接 QSPI Flash 占據 PCB 空間,則可使用 MM32F5280 系列微控制器,該微控制器合封有一塊 1MB ~ 2MB 的 QSPI Flash,無需考慮 QSPI Flash 的電路,節省 PCB 面積。
通過外接 QSPI Flash,就可以擁有足夠的空間來實現這個 “復雜的應用”。但開發應用時,仍希望像使用片內 Flash 那樣使用 QSPI Flash:下載程序的時候,直接點擊 IDE 的下載按鈕,就能下載程序;調試代碼的時候,直接點擊調試按鈕,就能進行軟件調試;只需少量修改代碼,就能讓應用程序保存在 QSPI Flash 中,讓微控制器直接執行。
為了讓 IDE 下載程序到 QSPI Flash 中,需要有一個合適的下載算法。為了讓編譯器知道應用程序要保存在 QSPI Flash 中,需要修改 Linker 文件,讓編譯器知道 QSPI Flash 的地址范圍。為了讓微控制器執行存儲在 QSPI Flash 中的程序,還需要實現合適的 2nd Bootloader ,引導微控制器去執行 QSPI Flash 中的程序。
?目標
在 MDK 平臺上實現定制化的下載算法,可將應用程序下載到 QSPI Flash 中。
盡可能少地改動應用程序代碼,使其能夠存儲在 QSPI Flash 中。
實現簡單的 2nd Bootloader,使其能夠引導微控制器執行存儲在 QSPI Flash 中的應用程序。
在上述的 2nd Bootloader 的基礎上,實現量產下載,更新應用程序等特殊功能。
2配置硬件環境
?硬件環境
QSPI Flash
工欲善其事,必先利其器,想在 QSPI Flash 上存儲應用程序,就需要選擇一款合適的 QSPI Flash 芯片。
選型時,需要重點關注工作電壓的范圍,部分 QSPI Flash 的工作電壓在 1.8V 左右,如果使用 3.3V 供電,是沒辦法正常工作的,反之亦然。
除了電壓范圍外,部分 QSPI Flash 芯片在默認情況下,是不允許使用四線模式的,原本 QSPI 的 D2 & D3 引腳會被用于寫保護使能(WP)和 HOLD 使能。讓 QSPI Flash 允許使用四線模式的方法,需參照使用的 QSPI Flash 芯片手冊進行操作。建議使用默認處于四線模式的 QSPI Flash,或者在設計 2nd Bootloader 時,能在跳轉到應用程序之前,將四線模式打開。
MM32F5 系列的微控制器支持大多數常見的 QSPI Flash,表1中列舉的 QSPI Flash 芯片為經過實際測試可用的 QSPI Flash 芯片:
表1 測試可用的 QSPI Flash 列表
硬件電路設計時,需要了解微控制器的哪些引腳可作為 QSPI 接口,表2 是 MM32F5270 系列微控制器的 QSPI 接口引腳:
表2 MM32F5270 系列微控制器 QSPI 接口引腳
其引腳配置如下:
引腳模式:復用推挽輸出。
引腳速度:高速模式,QSPI 的 SCK 時鐘最快可達 60MHz,因此應配置成高速模式。
引腳復用功能號:巧合的是,當引腳作為 QSPI 接口時,復用功能號均為 AF10。
表3 為MM32F5280 系列微控制器的引腳:
表3 MM32F5280的QSPI引腳
可以發現,MM32F5280 系列微控制器只有一組引腳可作為 QSPI 接口,并且這些引腳并沒有引出到芯片外部,這是由于 MM32F5280 系列微控制器內部合封了 QSPI Flash,其引腳已經在芯片內部與 QSPI Flash 相連,不需要再引出至芯片外部。
雖然 MM32F5280 片內合封了 QSPI Flash,對應的引腳也直接與其相連,但在使用這塊 QSPI Flash 時,仍需配置相應的引腳,其配置方法與 MM32F5270 完全一致。
由于 MM32F5280 系列微控制器將其 QSPI Flash 合封在了芯片內部,因此在 PCB 設計時,可減少外圍元件的數量,降低了產品成本。
當使用 MM32F5270 + QSPI Flash 的方案時,由于 QSPI 信號線暴露在微控制器外部,易受到外部電磁環境的干擾,可能無法以最快的速度(SCK 的頻率為 60MHz)訪問 QSPI Flash,但這個問題在 MM32F5280 上就不會出現。
當然,也正是由于 MM32F5280 系列微控制器的 QSPI Flash 合封在了芯片內部,如果想用使用更大的 Flash 時,還是需要使用 MM32F5270 + QSPI Flash 的方案。
Board
PLUS-F5270開發板,如圖1所示:
圖1 PLUS-F5270開發板
PLUS-F5270 板載華邦的 W25Q64JVSIQ,Flash 大小為 8MB (64Mb),3.3V 供電,默認情況下,四線模式處于打開狀態。
MM32F5270 連接該 QSPI Flash 所使用的引腳號如圖2所示:
圖2 MM32F5270連接的QSPI Flash引腳
在PLUS-F5270開發板上,MM32F5270芯片與QSPI Flash W25Q64的引腳對應關系如表4所示。
表4 PLUS-F5270開發板上MM32F5270與QSPI Flash W25Q64的引腳對應關系
在設計 MM32F5270 + QSPI Flash 的應用時,建議優先采用 PF6(QSPI_CS)、PG7(QSPI_SCK)、PG6(QSPI_D0)、PF8(QSPI_D1)、PF10(QSPI_D2)、PG8(QSPI_D3) 引腳,從而可使用 MM32F5280 MCU 無縫替換 MM32F5270。
?軟件工具
在開發調試 MM32F5270 + QSPI Flash 這個 “復雜的應用” 時,需要一些軟件工具:
開發平臺
嵌入式軟件的開發需要一個軟件平臺,這個軟件平臺可以是 MDK,IAR,ARMGCC 等,本文將以 MDK 為例,開發并調試所需要的軟件。在官網(https://www.keil.com/download/product)頁面上,可下載MDK-ARM的安裝包并啟動安裝,使用 MDK 進行工程的調試與下載。
需要注意,MDK 的軟件版本最低為 5.37,且需使用 AC6 編譯器,舊版本 AC5 編譯器不支持編譯 STAR-MC1 平臺的軟件。
下載算法
不同于 SRAM,修改 Flash 中的內容時,需要先將 Flash 中的數據整塊擦除,再通過特殊的方法將數據寫入到 Flash 中,而不是直接往指定地址進行寫操作。因此,需要有一段中間程序,能夠幫助調試器將指定位置的數據,寫入到 Flash 中。
這段中間程序就叫做下載算法,它運行在 SRAM 中,在修改 Flash 中的內容前,調試器會先將下載算法通過 SWD 或其他調試接口加載到 SRAM 中并執行,然后再加載存放到 Flash 中的數據,讓存儲在 SRAM 中的下載算法將數據寫入到 Flash 中。
獲取下載算法有三種方式:
1從 MCU 廠商的官網中下載相應 MCU 的 PACK 包中獲取。
2從 MDK 的 Pack Installer 中獲取。
3使用開發平臺提供的模板文件自行制作。
2nd Bootloader
2nd Bootloader 將會引導微控制器執行存放在 QSPI Flash 中的應用程序,之所以稱為 2nd Bootloader,是為了區分固化在微控制器內部的 1st Bootloader。當然,2nd Bootloader 也可以固化到微控制器中,作為 1st Bootloader 來使用,但那樣就失去了可定制化的意義。
2nd Bootloader 執行存儲在 QSPI Flash 上的應用程序之前,會先初始化 QSPI 外設,以及所用到的 GPIO 引腳,讓微控制器能夠通過訪問地址的形式訪問 QSPI Flash,就像訪問片內 Flash 那樣。當然,這只是 2nd Bootloader 最基本的功能,在此基礎上,還可以增加一些定制化的功能,例如為量產而準備的串口 + Ymodem 下載固件功能,或者增加 OTA 升級的方案。
評論
查看更多