前言 STM32提供了靈活多樣的外擴(kuò)存儲(chǔ)器的訪問實(shí)現(xiàn)。本文將介紹如何利用QSPI(QuadSPI) 外擴(kuò)串行NOR Flash存儲(chǔ)器的實(shí)現(xiàn)過(guò)程。首先對(duì)QSPI接口功能特性進(jìn)行介紹,然后分別介紹硬件設(shè)計(jì)和軟件開發(fā)。并基于STM32CubeM提供訪問MICRON N25Q128A13EF840F的實(shí)現(xiàn)參考。 一 實(shí)現(xiàn)環(huán)境 開發(fā)板:STM32F469G-DISCO 開發(fā)庫(kù):STM32CubeF4 v1.16.0 STM32CubeMX: v4.22.0 集成開發(fā)環(huán)境:IAR v7.70.1.11486 實(shí)現(xiàn)過(guò)程在STM32F469I-DISCO板上展開,利用板上已有的串行NORFlash存儲(chǔ)器(MICRON N25Q128A13EF840F),呈現(xiàn)整個(gè)開發(fā)環(huán)節(jié)。在本文中,首先根據(jù)QSPI接口,介紹QSPI與外擴(kuò)串行存儲(chǔ)器的硬件連接。另外,Cube軟件包中包含QSPI實(shí)例,本文對(duì)庫(kù)中實(shí)現(xiàn)的QSPI例不做討論,讀者可參考這些QSPI例程進(jìn)行設(shè)計(jì)。本文圍繞由STM32CubeMX生成的工程,介紹如何實(shí)現(xiàn)對(duì)外擴(kuò)串行NOR Flash存儲(chǔ)器的訪問。
二 QSPI介紹 在呈現(xiàn)QSPI訪問外擴(kuò)Flash的實(shí)例前, 需要對(duì)QSPI有一定的了解,在此對(duì)QSPI進(jìn)行簡(jiǎn)短的介紹。更多內(nèi)容請(qǐng)參考AN4760。 QSPI(Quad-SPI)支持四線串行訪問形式。同時(shí),QSPI支持傳統(tǒng)SPI和Dual-SPI模式,Dual-SPI模式支持兩線串行訪問。與FMC/FSMC比較,QSPI支持更低成本、更小封裝外部串行Flash存儲(chǔ)器,更少的IO引腳占用,有效減少PCB面積,降低PCB設(shè)計(jì)復(fù)雜度。 下表是QSPI在不同系列STM32產(chǎn)品線的支持情況(僅部分羅列,未涵蓋所有支持型號(hào))。
QSPI接口提供了靈活可配置的5個(gè)階段,如下圖所示(時(shí)序圖根據(jù)配置不同可能存在差異)。分別是命令階段、地址階段、復(fù)用字節(jié)階段、Dummy階段和數(shù)據(jù)階段。可以根據(jù)外擴(kuò)Flash中命令時(shí)序?qū)Σ煌A段進(jìn)行配置。后續(xù)會(huì)以實(shí)例進(jìn)行呈現(xiàn)。更多內(nèi)容請(qǐng)參考AN4760。
QSPI支持三種模式,分別是: 間接模式 所有操作通過(guò)QSPI寄存器實(shí)現(xiàn),類似于傳統(tǒng)SPI,可以使用阻塞模式、中斷模式或者DMA模式進(jìn)行讀寫等訪問。本文中提供的實(shí)現(xiàn)例為間接模式下的實(shí)現(xiàn)。 狀態(tài)輪詢模式 接口自動(dòng)輪詢指定寄存器,直到回讀寄存器內(nèi)容與指定條件匹配。可應(yīng)用于狀態(tài)檢測(cè),從而實(shí)現(xiàn)忙等待等效果。本文不對(duì)此模式進(jìn)行介紹,應(yīng)用實(shí)現(xiàn)可參考Cube軟件包中QSPI例程。 存儲(chǔ)器映射模式 外擴(kuò)Flash被視為內(nèi)部存儲(chǔ)器,支持AHB主器件直接訪問,CPU能夠直接運(yùn)行位于QSPI存儲(chǔ)器的執(zhí)行代碼。內(nèi)部系統(tǒng)架構(gòu)如下圖所示(以STM32F469/F479為例)。本文不對(duì)此模式進(jìn)行介紹,應(yīng)用實(shí)現(xiàn)可參考Cube軟件包中QSPI例程QSPI_ExecuteInPlace。
三 QSPI外擴(kuò)串行Flash的實(shí)現(xiàn) 3.1 串行Flash介紹 以MICRON N25Q128A13EF840F為例,更多細(xì)節(jié)請(qǐng)參考存儲(chǔ)器手冊(cè)。N25Q128A13EF840F引腳圖、時(shí)序圖和電氣參數(shù)來(lái)源于N25Q128A13 手冊(cè)文檔。 支持協(xié)議: SPI, Dual I/O(對(duì)應(yīng)Dual-SPI), Quad I/O(對(duì)應(yīng)Quad-SPI) 支持訪問模式:?jiǎn)尉訪問、雙線訪問、四線訪問,得益于QSPI接口的靈活可配性,三種訪問模式全部支持。 最大時(shí)鐘頻率:108MHz 存儲(chǔ)空間: 128Mb (16MB) 器件引腳示意圖如下所示。由兩根電源引腳和六根QSPI信號(hào)線構(gòu)成。
下表為存儲(chǔ)器N25Q128A13xxx命令(未列出全部命令)。通過(guò)下表可知,存儲(chǔ)器提供了靈活的訪問實(shí)現(xiàn)形式,結(jié)合同樣靈活可配置的QSPI接口,能夠?qū)崿F(xiàn)存儲(chǔ)器命令全支持。本文僅提供設(shè)計(jì)思路,呈現(xiàn)了部分命令在QSPI上的實(shí)現(xiàn)。
3.2 硬件設(shè)計(jì) 涉及到的信號(hào)線少,硬件設(shè)計(jì)簡(jiǎn)單,只需直接將QSPI的六根信號(hào)線與存儲(chǔ)器連接即可。考慮到可測(cè)性,可以增加串行電阻或者測(cè)試點(diǎn)。硬件電路圖如下所示。
QSPI接口PCB設(shè)計(jì)遵循如下幾點(diǎn),更多硬件設(shè)計(jì)內(nèi)容請(qǐng)參考AN4488。 a. 線阻 50Ω± 10% b. 最大線長(zhǎng) <120mm c. 避免在不同信號(hào)層走信號(hào)線 d. 時(shí)鐘線至少離其他信號(hào)線3倍線寬距離 e. 數(shù)據(jù)信號(hào)線長(zhǎng)差 ≤10mm f. 避免時(shí)鐘線采用蛇形走線,同時(shí)盡量減少數(shù)據(jù)線上過(guò)孔。 3.3 軟件開發(fā)流程
3.4 軟件實(shí)現(xiàn)例 在環(huán)境搭建完成后,就可以利用STM32CubeMX根據(jù)硬件連接情況,進(jìn)行QSPI配置,獲取IAR工程。具體軟件實(shí)現(xiàn)流程如下。
四 小結(jié) STM32的QuadSPI接口靈活可配,對(duì)于命令階段、地址階段、復(fù)用字節(jié)階段、Dummy階段和數(shù)據(jù)階段都可以進(jìn)行配置。基于這種靈活性,能夠?qū)崿F(xiàn)市面上SPI、Dual IO、Quad IO的串行Flash支持。出于簡(jiǎn)化考慮,QSPI支持的中斷訪問及DMA訪問等更多功能沒有在本文進(jìn)行介紹,更多實(shí)現(xiàn)可以參考ST提供的Cube軟件包中的QSPI例程。另外,不同廠家的串行Flash命令及操作實(shí)現(xiàn)略有差異,具體以采用的Flash文檔描述為準(zhǔn)。
相關(guān)文檔 AN4760 Quad-SPI (QSPI) interface onSTM32 microcontrollers AN4488 Getting started withSTM32F4xxxx MCU hardware development RM0386 STM32F469xx and STM32F479xxadvanced ARM®-based 32-bit MCUs 更多有關(guān)QSPI配置及代碼解讀的內(nèi)容細(xì)節(jié)可添加下方技術(shù)QQ群進(jìn)行下載閱讀。 技術(shù)QQ群:258644475
|