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