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