STM32 FSMC 學習筆記

FSMC的詳解

1.FSMC機制

FSMC(Flexihie Static Memory Controller,可變靜態存儲控制器)STM32系列中內部集成256 KB以上FlaSh,後綴爲xCxDxE的高存儲密度微控制器特有的存儲控制機制。之所以稱爲“可變”,是由於通過對特殊功能寄存器的設置,FSMC能夠根據不同的外部存儲器類型,發出相應的數據/地址/控制信號類型以匹配信號的速度,從而使得STM32系列微控制器不僅能夠應用各種不同類型、不同速度的外部靜態存儲器,而且能夠在不增加外部器件的情況下同時擴展多種不同類型的靜態存儲器,滿足系統設計對存儲容量、產品體積以及成本的綜合要求

11 FSMC技術優勢

①支持多種靜態存儲器類型。STM32通過FSMC町以與SRAMROMPSRAMNOR FlashNANDFlash存儲器的引腳直接相連。

②支持豐富的存儲操作方法。FSMC不僅支持多種數據寬度的異步讀/寫操作,而且支持對NORPSRAMNAND存儲器的同步突發訪問方式。

    ③支持同時擴展多種存儲器。FSMC的映射地址空間中,不同的BANK是獨立的,可用於擴展不同類型的存儲器。當系統中擴展和使用多個外部存儲器時,FSMC會通過總線懸空延遲時間參數的設置,防止各存儲器對總線的訪問衝突。

    ④支持更爲廣泛的存儲器型號。通過對FSMC的時間參數設置,擴大了系統中可用存儲器的速度範圍,爲用戶提供了靈活的存儲芯片選擇空間。

⑤支持代碼從FSMC擴展的外部存儲器中直接運行,而不需要首先調入內部SRAM

12 FSMC內部結構

STM32微控制器之所以能夠支持NOR FlashNAND Flash這兩類訪問方式完全不同的存儲器擴展,是因爲FSMC內部實際包括NOR FlashNANDPC Card兩個控制器,分別支持兩種截然不同的存儲器訪問方式。在STM32內部,FSMC的一端通過內部高速總線AHB連接到內核CortexM3,另一端則是面向擴展存儲器的外部總線。內核對外部存儲器的訪問信號發送到AHB總線後,經過FSMC轉換爲符合外部存儲器通信規約的信號,送到外部存儲器的相應引腳,實現內核與外部存儲器之間的數據交互。FSMC起到橋樑作用,既能夠進行信號類型的轉換,又能夠進行信號寬度和時序的調整,屏蔽掉不同存儲類型的差異,使之對內核而言沒有區別。

13 FSMC映射地址空間

FSMC管理1 GB的映射地址空間。該空間劃分爲4個大小爲256 MBBANK,每個BANK又劃分爲464 MB的子BANK,如表1所列。FSMC2個控制器管理的映射地址空間不同。NOR Flash控制器管理第1BANKNANDPC Card控制器管理第24BANK。由於兩個控制器管理的存儲器類型不同,擴展時應根據選用的存儲設備類型確定其映射位置。其中,BANK14個子BANK擁有獨立的片選線和控制寄存器,可分別擴展一個獨立的存儲設備,而BANK2BANK4只有一組控制寄存器。

2 FSMC擴展NOR Flash配置

SRAMROMNOR FlashPSRAM類型的外部存儲器都是由FSMCNOR Flash控制器管理的,擴展方法基本相同,其中NOR Flash最爲複雜。通過FSMC擴展外部存儲器時,除了傳統存儲器擴展所需要的硬件電路外,還需要進行FSMC初始化配置。FSMC提供大量、細緻的可編程參數,以便能夠靈活地進行各種不同類型、不同速度的存儲器擴展。外部存儲器能否正常工作的關鍵在於:用戶能否根據選用的存儲器型號,對配置寄存器進行合理的初始化配置。

(1)確定映射地址空間

根據選用的存儲器類型確定擴展使用的映射地址空間。NOR Flash只能選用BANK1中的4個子BANK。選定映射子BANK後,即可確定以下2方面內容:

①硬件電路中用於選中該存儲器的片選線FSMC_NEi(i爲子BANK號,i=14)

FSMC配置中用於配置該外部存儲器的特殊功能寄存器號

(2)配置存儲器基本特徵

通過對FSMC特殊功能寄存器FSMC_BCRi(i爲子BANK號,i=14)中對應控制位的設置,FSMC根據不同存儲器特徵可靈活地進行工作方式和信號的調整。根據選用的存儲器芯片確定需要配置的存儲器特徵,主要包括以下方面:

①存儲器類型(MTYPE)SRAMROMPSRAM,還是NOR FlaSh

②存儲芯片的地址和數據引腳是否複用(MUXEN)FSMC可以直接與AD0AD15複用的存儲器相連,不需要增加外部器件;

③存儲芯片的數據線寬度(MWID)FSMC支持8位/16位兩種外部數據總線寬度;

④對於NOR Flash(PSRAM),是否採用同步突發訪問方式(B URSTEN)

⑤對於NOR Flash(PSRAM)NWAIT信號的特性說明(WAITENWAITCFGWAITPOL)

⑥對於該存儲芯片的讀/寫操作,是否採用相同的時序參數來確定時序關係(EXTMOD)

(3)配置存儲器時序參數

FSMC通過使用可編程的存儲器時序參數寄存器,拓寬了可選用的外部存儲器的速度範圍。FSMCNORFlash控制器支持同步和異步突發兩種訪問方式。選用同步突發訪問方式時,FSMCHCLK(系統時鐘)分頻後,發送給外部存儲器作爲同步時鐘信號FSMC_CLK。此時需要的設置的時間參數有2個:

HCLKFSMC_CLK的分頻係數(CLKDIV),可以爲216分頻;

②同步突發訪問中獲得第1個數據所需要的等待延遲(DATLAT)

對於異步突發訪問方式,FSMC主要設置3個時間參數:地址建立時間(ADDSET)、數據建立時間(DATAST)和地址保持時間(ADDHLD)FSMC綜合了SRAMROMPSRAMNOR Flash產品的信號特點,定義了4種不同的異步時序模型。選用不同的時序模型時,需要設置不同的時序參數,如表2所列。在實際擴展時,根據選用存儲器的特徵確定時序模型,從而確定各時間參數與存儲器讀/寫週期參數指標之間的計算關係;利用該計算關係和存儲芯片數據手冊中給定的參數指標,可計算出FSMC所需要的各時間參數,從而對時間參數寄存器進行合理的配置。

3.FSMC配置實例。

使用FSMC控制器後,可以把FSMC提供的FSMC_A[25:0]作爲地址線,而把FSMC提供的FSMC_D[15:0]作爲數據總線。

(1)當存儲數據設爲8位時,(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b)

地址各位對應FSMC_A[25:0],數據位對應FSMC_D[7:0]

(2)當存儲數據設爲16位時,(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b)

地址各位對應FSMC_A[24:0],數據位對應FSMC_D[15:0]

FSMC 包括4個模塊:

(1)AHB接口(包括FSMC配置寄存器)

(2)NOR閃存和PSRAM控制器(驅動LCD的時候LCD就好像一個PSRAM的裏面只有216位的存儲空間,一個是DATA RAM 一個是CMD RAM

(3)NAND閃存和PC卡控制器

(4)外部設備接口

注:FSMC可以請求AHB進行數據寬度的操作。如果AHB操作的數據寬度大於外部設(NORNANDLCD)的寬度,此時FSMCAHB操作分割成幾個連續的較小的數據寬度,以適應外部設備的數據寬度。

STM32 <wbr>FSMC <wbr>學習筆記

 

FSMC對外部設備的地址映像從0x6000 0000開始,到0x9FFF FFFF結束,共分4個地址塊,每個地址塊256M字節。可以看出,每個地址塊又分爲4個分地址塊,大小64M。對NOR的地址映像來說,我們可以通過選擇HADDR[27:26]來確定當前使用的是哪個64M的分地址塊,如下頁表格。而這四個分存儲塊的片選,則使用NE[4:1]來選擇。數據線/地址線/控制線是共享的。

NE1 ->Bank1   NE2->Bank2  NE3->Bank3  NE4->Bank4

 NE1 連接, 則每小塊NOR/PSRAM 64M

一塊:6000 0000h--63ff ffffh (DATA長度爲8位情況下,由地址線FSMC_A[25:0]決定;DATA長度爲16位情況下,由地址線FSMC_A[24:0]決定)

第二塊:6400 0000h--67ff ffffh

第二塊:6800 0000h--6bff ffffh

第三塊:6c00 0000h--6fff ffffh

注:這裏的HADDR是需要轉換到外部設備的內部AHB地址線,每個地址對應一個字節單元。因此,若外部設備的地址寬度是8位的,則HADDR[25:0]STM32CPU引腳FSMC_A[25:0]一一對應,最大可以訪問64M字節的空間。若外部設備的地址寬度是16位的,則是HADDR[25:1]STM32CPU引腳FSMC_A[24:0]一一對應。在應用的時候,可以將FSMC_A總線連接到存儲器或其他外設的地址總線引腳上。

例:STM32F10XX FCMS控制LCD的驅動

FSMC提供了所有的LCD控制器的信號:
FSMC_D[16:0]
 

發佈了4 篇原創文章 · 獲贊 85 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章