<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32單片機的FSMC機制FlaSh存儲器擴展

STM32單片機的FSMC機制FlaSh存儲器擴展

作者: 時(shí)間:2009-11-27 來(lái)源:網(wǎng)絡(luò ) 收藏

  引 言

  是ST(意法半導體)公司推出的基于A(yíng)RM內核Cortex-M3的32位微控制器系列。Cortex-M3內核是為低功耗和價(jià)格敏感的應用而專(zhuān)門(mén)設計的,具有突出的能效比和處理速度。通過(guò)采用Thumb-2高密度指令集,Cortex-M3內核降低了系統存儲要求,同時(shí)快速的中斷處理能夠滿(mǎn)足控制領(lǐng)域的高實(shí)時(shí)性要求,使基于該內核設計的系列微控制器能夠以更優(yōu)越的性?xún)r(jià)比,面向更廣泛的應用領(lǐng)域。

  系列微控制器為用戶(hù)提供了豐富的選擇,可適用于工業(yè)控制、智能家電、建筑安防、醫療設備以及消費類(lèi)電子產(chǎn)品等多方位嵌入式系統設計。STM32系列采用一種新型的技術(shù)——FSMC,在外部方面具有獨特的優(yōu)勢,可根據系統的應用需要,方便地進(jìn)行不同類(lèi)型大容量靜態(tài)。

  1

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

  1.1 FSMC技術(shù)優(yōu)勢

 ?、僦С侄喾N靜態(tài)存儲器類(lèi)型。STM32通過(guò)FSMC町以與SRAM、ROM、PSRAM、NOR 和NAND存儲器的引腳直接相連。

 ?、谥С重S富的存儲操作方法。FSMC不僅支持多種數據寬度的異步讀/寫(xiě)操作,而且支持對NOR/PSRAM/NAND存儲器的同步突發(fā)訪(fǎng)問(wèn)方式。

 ?、壑С滞瑫r(shí)擴展多種存儲器。FSMC的映射地址空間中,不同的BANK是獨立的,可用于擴展不同類(lèi)型的存儲器。當系統中擴展和使用多個(gè)外部存儲器時(shí),FSMC會(huì )通過(guò)總線(xiàn)懸空延遲時(shí)間參數的設置,防止各存儲器對總線(xiàn)的訪(fǎng)問(wèn)沖突。

 ?、苤С指鼮閺V泛的存儲器型號。通過(guò)對FSMC的時(shí)間參數設置,擴大了系統中可用存儲器的速度范圍,為用戶(hù)提供了靈活的存儲芯片選擇空間。

 ?、葜С执a從FSMC擴展的外部存儲器中直接運行,而不需要首先調入內部SRAM。

  1.2 FSMC內部結構

  STM32微控制器之所以能夠支持NOR 和NAND Flash這兩類(lèi)訪(fǎng)問(wèn)方式完全不同的存儲器擴展,是因為FSMC內部實(shí)際包括NOR Flash和NAND/PC Card兩個(gè)控制器,分別支持兩種截然不同的存儲器訪(fǎng)問(wèn)方式。在STM32內部,FSMC的一端通過(guò)內部高速總線(xiàn)AHB連接到內核Cortex-M3,另一端則是面向擴展存儲器的外部總線(xiàn)。內核對外部存儲器的訪(fǎng)問(wèn)信號發(fā)送到AHB總線(xiàn)后,經(jīng)過(guò)FSMC轉換為符合外部存儲器通信規約的信號,送到外部存儲器的相應引腳,實(shí)現內核與外部存儲器之間的數據交互。FSMC起到橋梁作用,既能夠進(jìn)行信號類(lèi)型的轉換,又能夠進(jìn)行信號寬度和時(shí)序的調整,屏蔽掉不同存儲類(lèi)型的差異,使之對內核而言沒(méi)有區別。

  1.3 FSMC映射地址空間

  FSMC管理1 GB的映射地址空間。該空間劃分為4個(gè)大小為256 MB的BANK,每個(gè)BANK又劃分為4個(gè)64 MB的子BANK,如表1所列。FSMC的2個(gè)控制器管理的映射地址空間不同。NOR Flash控制器管理第1個(gè)BANK,NAND/PC Card控制器管理第2~4個(gè)BANK。由于兩個(gè)控制器管理的存儲器類(lèi)型不同,擴展時(shí)應根據選用的存儲設備類(lèi)型確定其映射位置。其中,BANK1的4個(gè)子BANK擁有獨立的片選線(xiàn)和控制寄存器,可分別擴展一個(gè)獨立的存儲設備,而B(niǎo)ANK2~BANK4只有一組控制寄存器。

  2 FSMC擴展NOR Flash配置

  SRAM/ROM、NOR Flash和PSRAM類(lèi)型的外部存儲器都是由FSMC的NOR Flash控制器管理的,擴展方法基本相同,其中NOR Flash最為復雜。通過(guò)FSMC擴展外部存儲器時(shí),除了傳統存儲器擴展所需要的硬件電路外,還需要進(jìn)行FSMC初始化配置。FSMC提供大量、細致的可編程參數,以便能夠靈活地進(jìn)行各種不同類(lèi)型、不同速度的存儲器擴展。外部存儲器能否正常工作的關(guān)鍵在于:用戶(hù)能否根據選用的存儲器型號,對配置寄存器進(jìn)行合理的初始化配置。

  (1)確定映射地址空間

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

 ?、儆布娐分杏糜谶x中該存儲器的片選線(xiàn)FSMC_NEi(i為子BANK號,i=1,…,4);

 ?、贔SMC配置中用于配置該外部存儲器的特殊功能寄存器號(如表1所列)。

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

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

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

 ?、俅鎯ζ黝?lèi)型(MTYPE)是SRAM/ROM、PSRAM,還是NOR FlaSh;

 ?、诖鎯π酒牡刂泛蛿祿_是否復用(MUXEN),FSMC可以直接與AD0~AD15復用的存儲器相連,不需要增加外部器件;

 ?、鄞鎯π酒臄祿€(xiàn)寬度(MWID),FSMC支持8位/16位兩種外部數據總線(xiàn)寬度;

 ?、軐τ贜OR Flash(PSRAM),是否采用同步突發(fā)訪(fǎng)問(wèn)方式(B URSTEN);

 ?、輰τ贜OR Flash(PSRAM),NWAIT信號的特性說(shuō)明(WAITEN、WAITCFG、WAITPOL);

 ?、迣τ谠摯鎯π酒淖x/寫(xiě)操作,是否采用相同的時(shí)序參數來(lái)確定時(shí)序關(guān)系(EXTMOD)。

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

  FSMC通過(guò)使用可編程的存儲器時(shí)序參數寄存器,拓寬了可選用的外部存儲器的速度范圍。FSMC的NORFlash控制器支持同步和異步突發(fā)兩種訪(fǎng)問(wèn)方式。選用同步突發(fā)訪(fǎng)問(wèn)方式時(shí),FSMC將HCLK(系統時(shí)鐘)分頻后,發(fā)送給外部存儲器作為同步時(shí)鐘信號FSMC_CLK。此時(shí)需要的設置的時(shí)間參數有2個(gè):

 ?、貶CLK與FSMC_CLK的分頻系數(CLKDIV),可以為2~16分頻;

 ?、谕酵话l(fā)訪(fǎng)問(wèn)中獲得第1個(gè)數據所需要的等待延遲(DATLAT)。

  對于異步突發(fā)訪(fǎng)問(wèn)方式,FSMC主要設置3個(gè)時(shí)間參數:地址建立時(shí)間(ADDSET)、數據建立時(shí)間(DATAST)和地址保持時(shí)間(ADDHLD)。FSMC綜合了SRAM/ROM、PSRAM和NOR Flash產(chǎn)品的信號特點(diǎn),定義了4種不同的異步時(shí)序模型。選用不同的時(shí)序模型時(shí),需要設置不同的時(shí)序參數,如表2所列。在實(shí)際擴展時(shí),根據選用存儲器的特征確定時(shí)序模型,從而確定各時(shí)間參數與存儲器讀/寫(xiě)周期參數指標之間的計算關(guān)系;利用該計算關(guān)系和存儲芯片數據手冊中給定的參數指標,可計算出FSMC所需要的各時(shí)間參數,從而對時(shí)間參數寄存器進(jìn)行合理的配置。

STM32單片機的FSMC機制FlaSh存儲器擴展

  3 STM2擴展S29GL系列NOR Flash實(shí)例

  3.1 S29GL系列NOR Flash簡(jiǎn)介

  Spansion公司的S29GL系列芯片是采用90nm技術(shù)制造的高集成度NOR Flash存儲芯片,提供16~128 MB可選容量,支持最快25 ns的頁(yè)訪(fǎng)問(wèn)速度和11O ns的隨機訪(fǎng)問(wèn)速度,帶有最大64字節的寫(xiě)緩沖區,以提供更快、更高效的編程,是嵌入式系統設計中大容量存儲器擴展的理想選擇。本文選用的型號為S29GL512P,容量為512×64K字(總容量64 MB),擴展到NOR Flash控制器管理的BANK1的第2個(gè)子BANK。

  3.2 STM32與S29GL512P的電路連接

  S25GL512P可通過(guò)控制引腳BYTE選擇對芯片的訪(fǎng)問(wèn)單位(字/字節),區別在于:

 ?、賹τ谛酒_DQ15,字模式時(shí)傳送最高數據位D15;字節模式時(shí)傳送最低地址A-1。

 ?、谧帜J綍r(shí),數據引腳D0~D15上傳送數據信號;字節模式時(shí),只有D0~D7上有信號。

  此處,將BYTE上拉到高電平,選擇16位的字訪(fǎng)問(wèn)單位。FSMC數據線(xiàn)FSMC_D[15:0]與S29GL512P的D15~D0對應連接;FSMC地址線(xiàn)FSMC_A[25:0]的低25根與S29GL512P的地址線(xiàn)A[24:0]對應連接。

  由于S29GL512P芯片映射到BANK1的子BANK2,可確定其片選線(xiàn)應連接FSMC片選控制線(xiàn)FSMC_NE2。S29GL512P的RY/BY引腳連接FSMC的FSMC_NWAIT引腳,提供等待信號。

  3.3 FSMC的配置

  根據S29GL512P的映射位置,需要對FSMC_BCR2和FSMC_BTR2/BWTR2寄存器進(jìn)行配置。

  (1)FSMC_BCR2

  配置S29GL512P的讀/寫(xiě)采用統一時(shí)間參數,只需要設置時(shí)間寄存器FSMC_BTR2。配置存儲器類(lèi)型為NORFlash,數據總線(xiàn)寬度為16位(字),不采用地址/數據復用,使能BANK1的子BANK2。

  (2)FSMC_BTR2

  由表2可知,異步NOR Flash時(shí)序模型Mode2/B需要設置時(shí)間參數DATAST和ADDSET。根據時(shí)序圖,兩個(gè)參數的計算公式如下:

公式

  式中:Twc和Trc為所選存儲芯片的寫(xiě)周期長(cháng)度和讀操作周期長(cháng)度;Twp為所選存儲芯片的寫(xiě)信號持續長(cháng)度。根據S29GL512P用戶(hù)手冊,可知參數Twc=Trc=130 ns,Twp=35 ns。設STM32微控制器采用72 MHz主頻,則HCLK=(1/72×10-6)s。通過(guò)上述公式計算,可取值為:DATAST=2,ADDSET=5。

  為了達到更好的控制效果,還應考慮FSMC自身延遲問(wèn)題,使用校正公式:

公式

  式中:TAVQV為所選存儲芯片訪(fǎng)問(wèn)過(guò)程中,從地址有效至數據有效的時(shí)間域;Tsu(Data_NE)為STM32特征參數,從數據有效到FSMC_NE(片選)失效時(shí)間域;Ttv(A_NE)為STM32特征參數,從FSMC_NE有效至地址有效的時(shí)間域。

  TAVQV=130 ns,Tsu(Data_NE)+Ttv(A_NE]=36 ns,對DATAST參數進(jìn)行校正,可得DATAST=3。

  3.4 應用STM32固件對FSMC進(jìn)行初始化配置

  ST公司為用戶(hù)開(kāi)發(fā)提供了完整、高效的工具和固件庫,其中使用C語(yǔ)言編寫(xiě)的固件庫提供了覆蓋所有標準外設的函數,使用戶(hù)無(wú)需使用匯編操作外設特性,從而提高了程序的可讀性和易維護性。

  STM32固件庫中提供的FSMC的NOR Flash控制器操作固件,主要包括2個(gè)數據結構和3個(gè)函數。數據結構FSMC_NORSRAMTimingInitTypeDef對應時(shí)間參數寄存器FSMC_BTR和FSMC_BWTR的結構定義;

  FSMC_NORSRAMinitTypeDef對應特征配置寄存器FSMC_BCR的結構定義,并包含2個(gè)指向對應BANK的FSMC_BTR和FSMC_BWTR寄存器的FSMC_NORSRAMTimingInitTypeDef結構指針。針對上述S29GL512P芯片擴展要求,利用固件庫進(jìn)行的主要初始化操作如下:

程序

程序

  結 語(yǔ)

  STM32作為新一代ARM Cortex-M3核處理器,其卓越的性能和功耗控制能夠適用于廣泛的應用領(lǐng)域;而其特殊的可變靜態(tài)存儲技術(shù)FSMC具有高度的靈活性,對于存儲容量要求較高的嵌入式系統設計,能夠在不增加外部分立器件的情況下,擴展多種不同類(lèi)型和容量的存儲芯片,降低了系統設計的復雜性,提高了系統的可靠性。



關(guān)鍵詞: STM32 FSMC機制 Flash 存儲器 擴展

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>