STM32是ST(意法半導(dǎo)體)公司推出的基于ARM內(nèi)核Cortex-M3的32位微控制器系列。Cortex-M3內(nèi)核是為低功耗和價(jià)格敏感的應(yīng)用而專門設(shè)計(jì)的,具有突出的能效比和處理速度。通過(guò)采用Thumb-2高密度指令集,Cortex-M3內(nèi)核降低了系統(tǒng)存儲(chǔ)要求,同時(shí)快速的中斷處理能夠滿足控制領(lǐng)域的高實(shí)時(shí)性要求,使基于該內(nèi)核設(shè)計(jì)的STM32系列微控制器能夠以更優(yōu)越的性價(jià)比,面向更廣泛的應(yīng)用領(lǐng)域。
STM32系列微控制器為用戶提供了豐富的選擇,可適用于工業(yè)控制、智能家電、建筑安防、醫(yī)療設(shè)備以及消費(fèi)類電子產(chǎn)品等多方位嵌入式系統(tǒng)設(shè)計(jì)。STM32系列采用一種新型的存儲(chǔ)器擴(kuò)展技術(shù)——FSMC,在外部存儲(chǔ)器擴(kuò)展方面具有獨(dú)特的優(yōu)勢(shì),可根據(jù)系統(tǒng)的應(yīng)用需要,方便地進(jìn)行不同類型大容量靜態(tài)存儲(chǔ)器的擴(kuò)展。
PART 2 FMSC 內(nèi)部結(jié)構(gòu)
2.1
FSMC技術(shù)優(yōu)勢(shì)
①支持多種靜態(tài)存儲(chǔ)器類型。STM32通過(guò)FSMC可以與SRAM、ROM、PSRAM、NORFlash和NANDFlash存儲(chǔ)器的引腳直接相連。
②支持豐富的存儲(chǔ)操作方法。FSMC不僅支持多種數(shù)據(jù)寬度的異步讀/寫(xiě)操作,而且支持對(duì)NOR/PSRAM/NAND存儲(chǔ)器的同步突發(fā)訪問(wèn)方式。
③支持同時(shí)擴(kuò)展多種存儲(chǔ)器。FSMC的映射地址空間中,不同的BANK是獨(dú)立的,可用于擴(kuò)展不同類型的存儲(chǔ)器。當(dāng)系統(tǒng)中擴(kuò)展和使用多個(gè)外部存儲(chǔ)器時(shí),F(xiàn)SMC會(huì)通過(guò)總線懸空延遲時(shí)間參數(shù)的設(shè)置,防止各存儲(chǔ)器對(duì)總線的訪問(wèn)沖突。
④支持更為廣泛的存儲(chǔ)器型號(hào)。通過(guò)對(duì)FSMC的時(shí)間參數(shù)設(shè)置,擴(kuò)大了系統(tǒng)中可用存儲(chǔ)器的速度范圍,為用戶提供了靈活的存儲(chǔ)芯片選擇空間。
⑤支持代碼從FSMC擴(kuò)展的外部存儲(chǔ)器中直接運(yùn)行,而不需要首先調(diào)入內(nèi)部SRAM。
2.2
FSMC 內(nèi)部結(jié)構(gòu)
STM32微控制器之所以能夠支持NORFlash和NANDFlash這兩類訪問(wèn)方式完全不同的存儲(chǔ)器擴(kuò)展,是因?yàn)镕SMC內(nèi)部實(shí)際包括NORFlash和NAND/PCCard兩個(gè)控制器,分別支持兩種截然不同的存儲(chǔ)器訪問(wèn)方式。在STM32內(nèi)部,F(xiàn)SMC的一端通過(guò)內(nèi)部高速總線AHB連接到內(nèi)核Cortex-M3,另一端則是面向擴(kuò)展存儲(chǔ)器的外部總線。
內(nèi)核對(duì)外部存儲(chǔ)器的訪問(wèn)信號(hào)發(fā)送到AHB總線后,經(jīng)過(guò)FSMC轉(zhuǎn)換為符合外部存儲(chǔ)器通信規(guī)約的信號(hào),送到外部存儲(chǔ)器的相應(yīng)引腳,實(shí)現(xiàn)內(nèi)核與外部存儲(chǔ)器之間的數(shù)據(jù)交互。FSMC起到橋梁作用,既能夠進(jìn)行信號(hào)類型的轉(zhuǎn)換,又能夠進(jìn)行信號(hào)寬度和時(shí)序的調(diào)整,屏蔽掉不同存儲(chǔ)類型的差異,使之對(duì)內(nèi)核而言沒(méi)有區(qū)別。
2.3
FSMC映射地址空間
FSMC管理1GB的映射地址空間。該空間劃分為4個(gè)大小為256MB的BANK,每個(gè)BANK又劃分為4個(gè)64MB的子BANK,如表1所列。FSMC中的2個(gè)控制器管理的映射地址空間不同。NORFlash控制器管理第1個(gè)BANK,NAND/PCCard控制器管理第2~4個(gè)BANK。
由于兩個(gè)控制器管理的存儲(chǔ)器類型不同,擴(kuò)展時(shí)應(yīng)根據(jù)選用的存儲(chǔ)設(shè)備類型確定其映射位置。其中,BANK1的4個(gè)子BANK擁有獨(dú)立的片選線和控制寄存器,可分別擴(kuò)展一個(gè)獨(dú)立的存儲(chǔ)設(shè)備,而B(niǎo)ANK2~BANK4只有一組控制寄存器。
PART 3 FSMC擴(kuò)展外部SRAM配置
3.1
FSMC擴(kuò)展外部SRAM配置
在STM32與FPGA進(jìn)行通信的時(shí)候,F(xiàn)PGA其實(shí)可以看做STM32外部的SRAM。因此相應(yīng)的配置可以參考對(duì)外部SRAM的配置。
SRAM/ROM、NORFlash和PSRAM類型的外部存儲(chǔ)器都是由FSMC的NORFlash控制器管理的,擴(kuò)展方法基本相同,其中NORFlash最為復(fù)雜。通過(guò)FSMC擴(kuò)展外部存儲(chǔ)器時(shí),除了傳統(tǒng)存儲(chǔ)器擴(kuò)展所需要的硬件電路外,還需要進(jìn)行FSMC初始化配置。
FSMC提供大量、細(xì)致的可編程參數(shù),以便能夠靈活地進(jìn)行各種不同類型、不同速度的存儲(chǔ)器擴(kuò)展。外部存儲(chǔ)器能否正常工作的關(guān)鍵在于:用戶能否根據(jù)選用的存儲(chǔ)器型號(hào),對(duì)配置寄存器進(jìn)行合理的初始化配置。
3.2
讀寫(xiě)時(shí)序控制
異步通信模式1:SRAM/CRAM
3.3
配置存儲(chǔ)器基本特征
通過(guò)對(duì)FSMC特殊功能寄存器FSMC_BCRi(i為子BANK號(hào),i=1,…,4)中對(duì)應(yīng)控制位的設(shè)置,F(xiàn)SMC根據(jù)不同存儲(chǔ)器特征可靈活地進(jìn)行工作方式和信號(hào)的調(diào)整。根據(jù)選用的存儲(chǔ)器芯片確定需要配置的存儲(chǔ)器特征,主要包括以下方面:
①存儲(chǔ)器類型(MTYPE)是SRAM/ROM、PSRAM,還是NORFlaSh;
②存儲(chǔ)芯片的地址和數(shù)據(jù)引腳是否復(fù)用(MUXEN),F(xiàn)SMC可以直接與AD0~AD15復(fù)用的存儲(chǔ)器相連,不需要增加外部器件;
③存儲(chǔ)芯片的數(shù)據(jù)線寬度(MWID),F(xiàn)SMC支持8位/16位兩種外部數(shù)據(jù)總線寬度;
④對(duì)于NORFlash(PSRAM),是否采用同步突發(fā)訪問(wèn)方式(BURSTEN);
⑤對(duì)于NORFlash(PSRAM),NWAIT信號(hào)的特性說(shuō)明(WAITEN、WAITCFG、WAITPOL);
⑥對(duì)于該存儲(chǔ)芯片的讀/寫(xiě)操作,是否采用相同的時(shí)序參數(shù)來(lái)確定時(shí)序關(guān)系(EXTMOD)。
3.4
配置存儲(chǔ)器時(shí)序參數(shù)
FSMC通過(guò)使用可編程的存儲(chǔ)器時(shí)序參數(shù)寄存器,拓寬了可選用的外部存儲(chǔ)器的速度范圍。FSMC的SRAM控制器支持同步和異步突發(fā)兩種訪問(wèn)方式。
選用同步突發(fā)訪問(wèn)方式時(shí),F(xiàn)SMC將HCLK(系統(tǒng)時(shí)鐘)分頻后,發(fā)送給外部存儲(chǔ)器作為同步時(shí)鐘信號(hào)FSMC_CLK。
此時(shí)需要的設(shè)置的時(shí)間參數(shù)有2個(gè):
①HCLK與FSMC_CLK的分頻系數(shù)(CLKDIV),可以為2~16分頻;
②同步突發(fā)訪問(wèn)中獲得第1個(gè)數(shù)據(jù)所需要的等待延遲(DATLAT)。
對(duì)于異步突發(fā)訪問(wèn)方式,F(xiàn)SMC主要設(shè)置3個(gè)時(shí)間參數(shù):地址建立時(shí)間(ADDSET)、數(shù)據(jù)建立時(shí)間(DATAST)和地址保持時(shí)間(ADDHLD)。FSMC綜合了SRAM/ROM、PSRAM和NORFlash產(chǎn)品的信號(hào)特點(diǎn),定義了4種不同的異步時(shí)序模型。選用不同的時(shí)序模型時(shí),需要設(shè)置不同的時(shí)序參數(shù),如表2所列。
在實(shí)際擴(kuò)展時(shí),根據(jù)選用存儲(chǔ)器的特征確定時(shí)序模型,從而確定各時(shí)間參數(shù)與存儲(chǔ)器讀/寫(xiě)周期參數(shù)指標(biāo)之間的計(jì)算關(guān)系;利用該計(jì)算關(guān)系和存儲(chǔ)芯片數(shù)據(jù)手冊(cè)中給定的參數(shù)指標(biāo),可計(jì)算出FSMC所需要的各時(shí)間參數(shù),從而對(duì)時(shí)間參數(shù)寄存器進(jìn)行合理的配置。
PART 4 STM32擴(kuò)展外部SRAM實(shí)例
4.1
難點(diǎn)解析
4.1.1 數(shù)據(jù)傳輸自動(dòng)化
第一個(gè)角度理解STM32有FSMC(其實(shí)其他芯片基本都有類似的總線功能),F(xiàn)SMC的好處就是你一旦設(shè)置好之后,WR(寫(xiě))、RD(讀)、DB0-DB15這些控制線和數(shù)據(jù)線,都是FSMC自動(dòng)控制的。打個(gè)比方,當(dāng)你在程序中寫(xiě)到:
*(volatileunsignedshortint*)(0x60000000)=val;
那么FSMC就會(huì)自動(dòng)執(zhí)行一個(gè)寫(xiě)的操作,其對(duì)應(yīng)的主控芯片的WE、RD這些腳,就會(huì)呈現(xiàn)出寫(xiě)的時(shí)序出來(lái)(即WE=0,RD=1),數(shù)據(jù)val的值也會(huì)通過(guò)
DB0-15自動(dòng)呈現(xiàn)出來(lái)(即FSMC-D0:FSMC-D15=val)。地址0x60000000會(huì)被呈現(xiàn)在數(shù)據(jù)線上(即A0-A25=0,地址線的對(duì)應(yīng)最麻煩,要根據(jù)具體情況來(lái)。
4.1.2 硬件連接
硬件平臺(tái):(STM32F103VC+EP3C5E144C8N)
將圖中的IS61WV512BLL改為FPGA對(duì)應(yīng)的接口即,可按照模式A-SRAM/PSRAM進(jìn)行連接。
那么在硬件上面,我們需要做的,僅僅是MCU和LCD控制芯片的連接關(guān)系:
WE-WR,均為低電平有效
RD-RD,均為低電平有效
FSMC-D0-15接LCDDB0-15
FSMC_NE1--CS接PD7
連接好之后,讀寫(xiě)時(shí)序都會(huì)被FSMC自動(dòng)完成。但是還有一個(gè)很關(guān)鍵的問(wèn)題,就是RS沒(méi)有接因?yàn)樵贔SMC里面,根本就沒(méi)有對(duì)應(yīng)RS。怎么辦呢?這個(gè)時(shí)候,有一個(gè)好方法,就是用某一根地址線來(lái)接RS。
比如我們選擇了A16這根地址線來(lái)接,那么當(dāng)我們要寫(xiě)寄存器(備注:此處應(yīng)為數(shù)據(jù))的時(shí)候,我們需要RS,也就是A16(RS為高)置高。軟件中怎么做呢?也就是將FSMC要寫(xiě)的地址改成0x60010000,如下:
*(volatileunsignedshortint*)(0x60010000)=val;
這個(gè)時(shí)候,A16在執(zhí)行其他FSMC的同時(shí)會(huì)被拉高,因?yàn)锳0-A18要呈現(xiàn)出0x60010000。0x60010000里面的Bit17=1,就會(huì)導(dǎo)致A16為1。要讀數(shù)據(jù)(備注:此處為寄存器)時(shí),地址由0x60010000改為了0x60000000,這個(gè)時(shí)候A16就為0了。
RS問(wèn)題:RS為0表示;讀寫(xiě)寄存器;RS為1,讀寫(xiě)數(shù)據(jù)RAM;
4.2
STM32固件對(duì)FSMC進(jìn)行初始化配置
ST公司為用戶開(kāi)發(fā)提供了完整、高效的工具和固件庫(kù),其中使用C語(yǔ)言編寫(xiě)的固件庫(kù)提供了覆蓋所有標(biāo)準(zhǔn)外設(shè)的函數(shù),使用戶無(wú)需使用匯編操作外設(shè)特性,從而提高了程序的可讀性和易維護(hù)性。
STM32固件庫(kù)中提供的FSMC的SRAM控制器操作固件,主要包括1個(gè)數(shù)據(jù)結(jié)構(gòu)和3個(gè)函數(shù)。
FSMC_NORSRAMInitStructure(調(diào)用庫(kù)函數(shù))
RCC_Configuration();(時(shí)鐘選擇)
NVIC_Configuration();(中斷優(yōu)先級(jí))
FSMC_GPIO_Configuration();(連接IO口初始化)
FSMC_SRAM_Init();(FMSC配置)
4.3
其他人調(diào)試遇到問(wèn)題點(diǎn)(摘錄)
項(xiàng)目中需要使用STM32和FPGA通信,使用的是地址線和數(shù)據(jù)線,在FPGA中根據(jù)STM32的讀寫(xiě)模式A的時(shí)序完成寫(xiě)入和讀取。之前的PCB設(shè)計(jì)中只使用了8跟數(shù)據(jù)線和8根地址線,調(diào)試過(guò)程中沒(méi)有發(fā)現(xiàn)什么問(wèn)題,在現(xiàn)在的PCB中使用了8根地址線和16根數(shù)據(jù)線,數(shù)據(jù)寬度也改成了16位。
剛開(kāi)始是讀取數(shù)據(jù)不正確,后來(lái)發(fā)現(xiàn)了問(wèn)題,STM32在16位數(shù)據(jù)寬度下有個(gè)內(nèi)外地址映射的問(wèn)題,只需要把FPGA中的設(shè)定的地址乘以2在STM32中訪問(wèn)就可以了,但是在寫(xiě)操作的時(shí)候會(huì)出現(xiàn)寫(xiě)當(dāng)前地址的時(shí)候把后面的地址寫(xiě)成0的情況,比如說(shuō)我給FPGA中定義的偏移地址0x01寫(xiě)一個(gè)16位數(shù)據(jù),按照地址映射,在STM32中我把地址寫(xiě)入0x02,。實(shí)際測(cè)試發(fā)現(xiàn)這個(gè)地址上的數(shù)據(jù)是對(duì)的,但是FPGA中0x02地址上的數(shù)據(jù)也變成了00。
塊1存儲(chǔ)區(qū)被劃分為4個(gè)NOR/PSRAM區(qū),這四個(gè)區(qū)在內(nèi)部地址上是連續(xù)排列的。但是實(shí)際上每個(gè)區(qū)共用的是同一組地址線與數(shù)據(jù)線,因此需要有內(nèi)外的一個(gè)地址映射,因此在STM32中實(shí)際上有兩個(gè)地址,一個(gè)是在內(nèi)部訪問(wèn)的地址,另外一個(gè)是實(shí)際地址線輸出的地址。
HADDR[27:0]對(duì)應(yīng)的是需要轉(zhuǎn)換到外部存儲(chǔ)器的內(nèi)部AHB地址線,其HADDR[27:26]位用于選擇四個(gè)存儲(chǔ)塊之一。HADDR[25:0]包含外部存儲(chǔ)器地址。HADDR是字節(jié)地址,而不同的外部存儲(chǔ)器數(shù)據(jù)長(zhǎng)度也不一樣,因此在數(shù)據(jù)寬度為8位和16位時(shí)映射關(guān)系也不一樣。
在數(shù)據(jù)寬度為8位時(shí)HADDR[25:0]與FSMC_A[25:0]對(duì)應(yīng)相連,這時(shí)候在STM32中訪問(wèn)的地址和實(shí)際地址線產(chǎn)生的地址是一致的。而在16位數(shù)據(jù)寬度時(shí)HADDR[25:1]與FSMC_A[24:0]對(duì)應(yīng)相連,HADDR[0]未接,這時(shí)候?qū)嶋H地址線上給出的地址為需要訪問(wèn)的偏移地址的一半。
經(jīng)過(guò)測(cè)試,發(fā)現(xiàn)寫(xiě)數(shù)據(jù)時(shí)實(shí)際上是進(jìn)行了多次寫(xiě)入,導(dǎo)致把后面的地址也給寫(xiě)上了,最終導(dǎo)致數(shù)據(jù)混亂,后來(lái)經(jīng)過(guò)學(xué)長(zhǎng)提醒,決定把訪問(wèn)的地址定義為16位的,原來(lái)是32位的,經(jīng)過(guò)測(cè)試問(wèn)題解決。
所以這兒也算是長(zhǎng)了經(jīng)驗(yàn),因?yàn)槲抑挥昧?根地址線,為了避免可能的問(wèn)題,地址最好定義成對(duì)應(yīng)的位數(shù)。但是還是很納悶為什么之前八位數(shù)據(jù)線讀寫(xiě)的時(shí)候沒(méi)有這個(gè)問(wèn)題。
PART 5 結(jié)語(yǔ)
STM32作為新一代ARMCortex-M3核處理器,其卓越的性能和功耗控制能夠適用于廣泛的應(yīng)用領(lǐng)域;而其特殊的可變靜態(tài)存儲(chǔ)技術(shù)FSMC具有高度的靈活性,對(duì)于存儲(chǔ)容量要求較高的嵌入式系統(tǒng)設(shè)計(jì),能夠在不增加外部分立器件的情況下,擴(kuò)展多種不同類型和容量的存儲(chǔ)芯片,降低了系統(tǒng)設(shè)計(jì)的復(fù)雜性,提高了系統(tǒng)的可靠性。
原文標(biāo)題:FSMC | STM32與FPGA通信
文章出處:【微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
FPGA
+關(guān)注
關(guān)注
1630文章
21777瀏覽量
604724 -
通信
+關(guān)注
關(guān)注
18文章
6049瀏覽量
136224 -
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4338瀏覽量
86003 -
STM32
+關(guān)注
關(guān)注
2270文章
10915瀏覽量
356776 -
FSMC
+關(guān)注
關(guān)注
0文章
55瀏覽量
38172
原文標(biāo)題:FSMC | STM32與FPGA通信
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論