1. 介紹FSMC
說到STM32的FSMC(Flexible Static Memory Controller),這個玩意兒可真是STM32家族的“多面手”。想象一下,如果STM32是個熱衷于DIY的工程師,那FSMC就是他的瑞士軍刀,無論是連接SRAM、PSRAM、NOR/NAND Flash還是LCD模塊,F(xiàn)SMC都能應(yīng)對自如,簡直就是連接外部存儲和記憶界的“橋梁”。
FSMC的靈活性主要體現(xiàn)在它支持多種存儲器類型和訪問模式,這就像是它可以說多國語言,無論你來自哪個存儲器國家,它都能和你愉快地交流。而且,F(xiàn)SMC能夠讓STM32以最高效的方式訪問這些外部設(shè)備,這就像是它擁有VIP通道,能夠迅速通過安檢進入存儲器的心臟區(qū)域。
具體來說,F(xiàn)SMC能讓你配置各種訪問參數(shù),比如數(shù)據(jù)寬度(可以是8位或16位),存儲器類型(SRAM、NOR Flash等),還有訪問模式(直接模式、間接模式)。這就像是你在玩一個高級定制的游戲,你可以根據(jù)外設(shè)的特性和你的需求,調(diào)整FSMC的設(shè)置,以達到最優(yōu)的訪問速度和性能。
不過,F(xiàn)SMC也有它的復(fù)雜性,配置起來就像是在玩一個需要高度策略的游戲,每個選項都需要精心考慮。你得了解你的外部設(shè)備,知道它的語言和習(xí)慣,然后通過FSMC的配置,來告訴STM32如何與之有效交流。這就需要你深入閱讀數(shù)據(jù)手冊,可能還要做一些試驗,來找到最佳配置。
總之,F(xiàn)SMC就像是STM32的“通訊專家”,能夠讓STM32輕松地擴展存儲和連接各種外設(shè)。但要想完全駕馭它,你可能需要像學(xué)習(xí)外語一樣,花一些時間和精力來深入了解它。別擔心,一旦你熟悉了FSMC,你就能打開一個全新的可能性世界,讓你的STM32項目更加強大和靈活!
2. FSMC特點
FSMC模塊能夠與同步和異步存儲器以及16位PC內(nèi)存卡進行接口。其主要目的是:將AHB事務(wù)轉(zhuǎn)換為適當?shù)耐獠吭O(shè)備協(xié)議,滿足外部設(shè)備的訪問時序要求。所有外部存儲器與控制器共享地址、數(shù)據(jù)和控制信號。每個外部設(shè)備通過唯一的芯片選擇來訪問。FSMC一次只對一個外部設(shè)備進行訪問。
FSMC具有以下主要特點:
- 與靜態(tài)內(nèi)存映射設(shè)備接口,包括:
- 靜態(tài)隨機訪問存儲器(SRAM)
- NOR Flash 存儲器/OneNAND Flash 存儲器
- PSRAM(4個內(nèi)存Bank)
- 具有ECC硬件檢查最多8 K字節(jié)數(shù)據(jù)的兩個 NAND Flash 存儲區(qū)
- 支持16位 PC 卡兼容設(shè)備
- 支持對同步設(shè)備(NOR Flash 和 PSRAM)進行突發(fā)模式訪問
- 8位或16位寬數(shù)據(jù)總線
- 每個內(nèi)存Bank獨立芯片選擇控制
- 每個內(nèi)存Bank獨立配置
- 可編程定時以支持各種不同類型的設(shè)備,特別是:
- 可編程等待狀態(tài)(最多15個)
- 可編程總線回轉(zhuǎn)周期數(shù)(最多15個)
- 可編程輸出使能和寫使能延遲時間(最多15個)
- 獨立讀取和寫入時序和協(xié)議,以支持各種記憶體和時序變化。
- 用于PSRAM 和 SRAM 設(shè)備的寫使能和字節(jié)通道選擇輸出。
- 將32位寬 AHB 事務(wù)轉(zhuǎn)換為連續(xù)16位或8位對外部16位或8位裝置進行訪問。
- A Write FIFO,長度為2字(STM32F42x and STM32F43x長度為16字),每一個詞都是32比特寬,僅僅保存了數(shù)據(jù)而沒有地址.因此這樣可以緩沖AHB 寫突發(fā)事務(wù). 這樣就可以向慢速度記憶體中寫入并且迅速釋放AHB用于其他操作.只有一個突發(fā)同時被緩沖:如果新出現(xiàn)了一個AHB 突發(fā)或者單次傳輸在之前
- 外部異步等待控制
定義外部設(shè)備類型和相關(guān)特性的FSMC寄存器通常在啟動時設(shè)置,并且在下一次復(fù)位或上電之前不會改變。然而,可以隨時更改這些設(shè)置。
3. Block示意圖
FSMC由四個主要模塊組成:
-
AHB接口(包括FSMC配置寄存器)
-
NOR Flash/PSRAM控制器
-
NAND Flash/PC卡控制器
-
外部設(shè)備接口。
圖434顯示了該模塊的框圖。
4. AHB接口
AHB從設(shè)備接口使得內(nèi)部CPU和其他總線主設(shè)備能夠訪問外部靜態(tài)存儲器。AHB事務(wù)被轉(zhuǎn)換為外部設(shè)備協(xié)議。特別地,如果選擇的外部存儲器是16位或8位寬度,則在AHB上的32位寬度事務(wù)會被分割成連續(xù)的16位或8位訪問。FSMC芯片選擇(FSMC_NEx)在執(zhí)行帶有擴展模式的D模式下除了進行連續(xù)訪問時不會切換。
FSMC在以下情況下生成AHB錯誤:
- 當讀取或?qū)懭胛磫⒂玫腇SMC存儲器時
- 當在FSMC_BCRx寄存器中FACCEN位被復(fù)位時,讀取或?qū)懭隢OR Flash存儲器
- 當輸入引腳FSMC_CD(卡片存在檢測)為低電平時,讀取或?qū)懭隤C卡存儲器
這個AHB錯誤的影響取決于嘗試進行讀寫訪問的AHB主設(shè)備:
-
如果是帶有FPU的Cortex?-M4 CPU,將會生成一個硬件故障中斷。
-
如果是DMA,則會產(chǎn)生DMA傳輸錯誤,并自動禁用相應(yīng)的DMA通道。
AHB時鐘(HCLK)是FSMC的參考時鐘。
4.1 Supported memories and transactions
General transaction rules
所請求的AHB事務(wù)數(shù)據(jù)大小可以是8位、16位或32位,而訪問的外部設(shè)備具有固定的數(shù)據(jù)寬度。這可能導(dǎo)致傳輸不一致。因此,必須遵循一些簡單的事務(wù)規(guī)則:
-
AHB事務(wù)大小和內(nèi)存數(shù)據(jù)大小相等時,在這種情況下沒有問題。
-
AHB事務(wù)大小大于內(nèi)存大小時,在這種情況下,F(xiàn)SMC將AHB事務(wù)分割成較小的連續(xù)內(nèi)存訪問,以滿足外部數(shù)據(jù)寬度。
-
AHB事務(wù)大小小于內(nèi)存大小時,異步傳輸可能與外部設(shè)備類型有關(guān)
-
對于具有字節(jié)選擇功能(SRAM、ROM、PSRAM)的設(shè)備進行異步訪問。
- FSMC通過其字節(jié)通道NBL[1:0]允許寫入操作來訪問正確的數(shù)據(jù)。
- 允許讀取操作。讀取所有內(nèi)存字節(jié)并丟棄無用字節(jié)。在讀取操作期間保持NBL[1:0]低電平。
-
對于沒有字節(jié)選擇功能(NOR和NAND Flash 16位)的設(shè)備進行異步訪問。
當請求對16位寬Flash存儲器進行字節(jié)訪問時會出現(xiàn)這種情況。顯然,不能以字節(jié)模式訪問該設(shè)備(只能從/向Flash存儲器讀取/寫入16位詞),因此: -
不允許寫入操作
-
允許讀取操作。讀取所有內(nèi)存字節(jié)并丟棄無用字節(jié)。在讀取操作期間將NBL[1:0]設(shè)置為0.
-
Configuration registers
FSMC可以通過寄存器集進行配置。詳細描述了NOR Flash/PSRAM控制寄存器的內(nèi)容,請參見第36.5.6節(jié)。詳細描述了NAND Flash/PC卡寄存器的內(nèi)容,請參見第36.6.8節(jié)。
5. 外部設(shè)備地址映射
從FSMC的角度來看,外部存儲器被分為4個固定大小的256兆字節(jié)的Bank(參見圖435):
-
Bank1用于尋址最多4個NOR Flash或PSRAM存儲器設(shè)備。該Bank被分成4個NOR/PSRAM子Bank,每個子Bank有4個專用芯片選擇信號,如下所示:
-
Bank1 - NOR/PSRAM 1
-
Bank1 - NOR/PSRAM 2
-
Bank1 - NOR/PSRAM 3
-
Bank1 - NOR/PSRAM 4
-
-
Bank2和3用于尋址NAND Flash設(shè)備(每個Bank一個設(shè)備)
-
Bank4用于尋址PC卡設(shè)備
對于每個Bank,要使用的存儲器類型由配置寄存器中用戶定義。
5.1 NOR/PSRAM地址映射
HADDR[27:26]位用于根據(jù)表216中的顯示選擇四個內(nèi)存Bank之一。
HADDR[25:0]包含外部存儲器的地址。由于HADDR是字節(jié)地址,而存儲器是按字尋址的,根據(jù)存儲器數(shù)據(jù)寬度,實際發(fā)給存儲器的地址會有所變化,如下表所示。
將NOR Flash/PSRAM的支持進行封裝
不支持同步存儲器的Wrap burst模式。必須將存儲器配置為未定義長度的linear burst模式。
5.2 NAND/PC Card地址映射
在這種情況下,有三家Bank可供選擇,每個Bank都被劃分為表218中所示的內(nèi)存空間。
對于NAND Flash存儲器,常見和屬性內(nèi)存空間被細分為三個部分(見下表219)位于較低的256 K字節(jié)中:
- 數(shù)據(jù)部分(在常見/屬性內(nèi)存空間中的前64 K字節(jié))
- 命令部分(在常見/屬性內(nèi)存空間中的第二個64 K字節(jié))
- 地址部分(在常見/屬性內(nèi)存空間中接下來的128 K字節(jié))
應(yīng)用軟件使用3個部分來訪問NAND Flash存儲器:文章來源:http://www.zghlxwxcb.cn/news/detail-833609.html
- 發(fā)送命令到NAND Flash存儲器:軟件必須將命令值寫入命令部分的任何內(nèi)存位置。
- 指定要讀取或?qū)懭氲腘AND Flash地址:軟件必須將地址值寫入地址部分的任何內(nèi)存位置。由于地址可能是4或5字節(jié)長(取決于實際內(nèi)存大?。枰B續(xù)多次寫入地址部分以指定完整的地址。
- 讀取或?qū)懭霐?shù)據(jù):軟件從數(shù)據(jù)部分的任何內(nèi)存位置讀取或?qū)懭霐?shù)據(jù)值。
由于NAND Flash存儲器自動遞增地址,因此無需遞增數(shù)據(jù)部分的地址以訪問連續(xù)的內(nèi)存位置。文章來源地址http://www.zghlxwxcb.cn/news/detail-833609.html
到了這里,關(guān)于STM32 FSMC (Flexible static memory controller) 靈活靜態(tài)內(nèi)存控制器介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!