博客主頁(yè)蟆融,歡迎訪問(wèn):blog.spursgo.com
折騰過(guò)電腦的朋友都知道草巡,當(dāng)電腦運(yùn)行比較卡的時(shí)候,我們可以通過(guò)給電腦加裝內(nèi)存條來(lái)改善電腦的性能振愿。那么號(hào)稱(chēng)微型計(jì)算機(jī)的單片機(jī)能不能像電腦一樣加裝內(nèi)存條呢捷犹?裝內(nèi)存條倒是不行,但是我們可以給單片機(jī)外加和內(nèi)存條效果一樣的SRAM來(lái)提升單片機(jī)的性能冕末。下面以STM32F407ZGT6單片機(jī)來(lái)講解一下來(lái)擴(kuò)展外部SRAM萍歉。
原理:給STM32芯片擴(kuò)展內(nèi)存與給PC擴(kuò)展內(nèi)存的原理是一樣的,只是PC上一般以?xún)?nèi)存條的形式擴(kuò)展档桃,內(nèi)存條實(shí)質(zhì)是由多個(gè)內(nèi)存顆粒(即SRAM芯片)組成的通用標(biāo)準(zhǔn)模塊枪孩,而STM32直接與SRAM芯片連接。
從上面的圖片中我們可以看到藻肄,ARM芯片的下面就是我們今天的主角SRAM蔑舞,具體型號(hào)為IS62WV51216。
黑黢黢的芯片我們也看不出什么東西來(lái)嘹屯,下面就來(lái)看一看IS62WV51216的管腳圖吧攻询。
哇!這么居然這么多管腳州弟!別著急钧栖,下面我們來(lái)慢慢分析這些管腳。
除開(kāi)基本的電源和地線婆翔,IS62WV51216的管腳大概可以這么來(lái)分類(lèi):
看吧拯杠!這樣一分類(lèi),是不是就沒(méi)有那么恐怖啦啃奴。
所以IS62WV51216的管腳總的來(lái)說(shuō)大致分為:電源線潭陪、地線、地址線、數(shù)據(jù)線依溯、片選線老厌、寫(xiě)使能端、讀使能端和數(shù)據(jù)掩碼信號(hào)線黎炉。
從這個(gè)圖中我們可以看出IS62WV51216有19根地址線和16根數(shù)據(jù)線梅桩,從這些數(shù)據(jù)中我們可以分析出IS62WV51216的存儲(chǔ)大小為1M,那么這個(gè)1M是怎么分析出來(lái)的呢拜隧?
我們得來(lái)說(shuō)說(shuō)IS62WV51216的存儲(chǔ)原理。
首先趁仙,我們來(lái)談一談一般的SRAM的存儲(chǔ)原理:
sram的存儲(chǔ)模型我們可以用矩陣來(lái)說(shuō)明:
SRAM內(nèi)部包含的存儲(chǔ)陣列洪添,可以把它理解成一張表格,數(shù)據(jù)就填在這張表格上雀费。和表格查找一樣干奢,指定一個(gè)行地址和列地址,就可以精確地找到目標(biāo)單元格盏袄,這是SRAM芯片尋址的基本原理忿峻。這樣的每個(gè)單元格被稱(chēng)為存儲(chǔ)單元,而這樣的表則被稱(chēng)為存儲(chǔ)矩陣辕羽。地址譯碼器把N根地址線轉(zhuǎn)換成2的N次方根信號(hào)線逛尚,每根信號(hào)線對(duì)應(yīng)一行或一列存儲(chǔ)單元,通過(guò)地址線找到具體的存儲(chǔ)單元刁愿,實(shí)現(xiàn)尋址绰寞。如果存儲(chǔ)陣列比較大,地址線會(huì)分成行和列地址铣口,或者行滤钱、列分時(shí)復(fù)用同一地址總線,訪問(wèn)數(shù)據(jù)尋址時(shí)先用地址線傳輸行地址再傳輸列地址脑题。
但是呢件缸?你會(huì)發(fā)現(xiàn),這個(gè)原理好像不太適用于IS62WV51216叔遂,為什么呢他炊?
其實(shí)不然,因?yàn)槲覀兪褂玫腟RAM比較小掏熬,IS62WV51216沒(méi)有列地址線佑稠。它只有19根行地址線,那么旗芬,我們就可以這么來(lái)解釋?zhuān)篒S62WV51216有16根數(shù)據(jù)線舌胶,也就是說(shuō)它的數(shù)據(jù)寬度為16位,一個(gè)行地址也就對(duì)應(yīng)16位疮丛,即2字節(jié)空間幔嫂。好辆它,那現(xiàn)在來(lái)計(jì)算一下IS62WV51216有多少個(gè)行地址。2的19次方等于512K履恩,在512K的基礎(chǔ)之上在乘我們之前計(jì)算的2字節(jié)锰茉,不正好是1024K,也就是1M嗎切心?1M后面的單位是B飒筑,即Byte,而不是Bit哦绽昏。
這樣的話你就會(huì)發(fā)現(xiàn)IS62WV51216這個(gè)名字中本身就包含了大量的信息:IS62WV51216共有512K個(gè)行地址协屡,數(shù)據(jù)寬度為16位,再加以計(jì)算就可以得到它的存儲(chǔ)大小為1M啦全谤,有趣吧肤晓!
SRAM的大致原理我們講完了,但是SRAM到底在stm32中到底是怎么被使用的呢认然?
下面补憾,一位大神即將登場(chǎng),F(xiàn)SMC卷员。
STM32F407系列芯片使用FSMC外設(shè)來(lái)管理擴(kuò)展的存儲(chǔ)器
FSMC是Flexible StaticMemory Controller的縮寫(xiě)盈匾,就是靈活的靜態(tài)存儲(chǔ)控制器。它可以用于驅(qū)動(dòng)包括SRAM子刮、NOR FLASH以及NAND FLSAH類(lèi)型的存儲(chǔ)器
其他我們不用管威酒,從上面我們可以總結(jié)的是,stm32雇傭FSMC這個(gè)管家來(lái)管理我們的IS62WV51216挺峡。
來(lái)來(lái)來(lái)葵孤,我們來(lái)看看FSMC的廬山真面目:
蒙了吧!又是這么多信號(hào)線橱赠,不要怕尤仍,我們還是來(lái)總結(jié)歸納一下。
我們FSMC控制SRAM為例來(lái)說(shuō)明:
你會(huì)發(fā)現(xiàn)居然和SRAM中的線居然高度統(tǒng)一(那是當(dāng)然喏狭姨,我們就是講的FSMC嘛T桌病)
1.FSMC_NBL[1:0]分別對(duì)應(yīng)于LB#、UB#饼拍,有什么用呢赡模?提供數(shù)據(jù)掩碼信號(hào)。具體是怎么回事呢师抄?
還記得前面提到的行地址線嗎漓柑?一根行地址線對(duì)應(yīng)16位的數(shù)據(jù),我們可以把16位的數(shù)據(jù)分為高字節(jié)和低字節(jié)。當(dāng)要訪問(wèn)寬度為16位的數(shù)據(jù)時(shí)辆布,使用行地址線指出地址瞬矩,然后把UB#和LB#線都設(shè)置為低電平(FSMC_NBL0和FSMC_NBL1為低電平),那么I/O0-I/O15線(FSMC_D0到FSMC_D15)都有效锋玲,它們一起輸出該地址的16位數(shù)據(jù)(或者接收16位數(shù)據(jù)到該地址)景用;當(dāng)要訪問(wèn)寬度為8位的數(shù)據(jù)時(shí),使用行地址線指出地址惭蹂,然后把UB#(FSMC_NBL0)設(shè)置為低電平伞插,I/O8-I/O15(FSMC_D8到FSMC_D15)會(huì)對(duì)應(yīng)輸出該地址的高8位,I/O0-I/O7的信號(hào)無(wú)效(或者把LB#(FSMC_NBL1)設(shè)置為低電平盾碗,I/O0-I/O7(FSMC_D0到FSMC_D7)會(huì)對(duì)應(yīng)輸出該地址的低8位蜂怎,I/O8-I/O15的信號(hào)無(wú)效。這樣是不是有一部分信號(hào)沒(méi)有用呢置尔?好像被掩蓋了。因此它們被稱(chēng)為數(shù)據(jù)掩碼信號(hào)氢伟。
2.FSMC_NE[1:4]是個(gè)很有趣的東西榜轿,它決定了FSMC可以控制多個(gè)存儲(chǔ)器。
這里就要提及FSMC的地址映射啦朵锣!
首先谬盐,有一點(diǎn)我們必須明白,對(duì)于32位的stm32單片機(jī)來(lái)說(shuō)诚些,它能夠管理的地址大小為4GB飞傀,而stm32將4GB的地址空間中的0x60000000到0x9FFFFFFF共1GB的空間分給外部?jī)?nèi)存,所以這1GB的空間就成了我們的小天地诬烹,供我們自由玩耍砸烦。
然后強(qiáng)勢(shì)的FSMC就接管了這1GB的空間,F(xiàn)SMC將圖中的1GB大小的External RAM存儲(chǔ)區(qū)域分成了4個(gè)Bank區(qū)域绞吁,每個(gè)Bank對(duì)應(yīng)于stm32內(nèi)部尋址空間的不同地址范圍幢痘。那么為什么要分為不同的Bank區(qū)域呢?因?yàn)椴煌腂ank可以來(lái)管理不同的外部存儲(chǔ)設(shè)備家破,比如NOR Flash及SRAM存儲(chǔ)器只能使用Bank1的地址颜说,NAND Flash存儲(chǔ)器只能使用Bank2和Bank3的地址,等。
細(xì)心的你肯定還會(huì)發(fā)現(xiàn)汰聋,每個(gè)Bnak中居然還有4x64MB這種文字门粪,這是什么意思呢?
Bank內(nèi)部的256MB空間又被分成4個(gè)小塊烹困,每塊64M玄妈,各自有相應(yīng)的控制引腳用于連接片選信號(hào)。以Bank1為例,見(jiàn)下圖:
OK措近!重點(diǎn)來(lái)了溶弟!
剛剛前面提到的FSMC_NE[4:1]信號(hào)線就分別對(duì)應(yīng)圖中的FSMC bank1 NOR/PSRAM4到FSMC bank1 NOR/PSRAM1。當(dāng)STM32訪問(wèn)0x6C000000-0x6FFFFFFF地址空間時(shí)瞭郑,會(huì)訪問(wèn)到Bank1的第3小塊區(qū)域:FSMC bank1 NOR/PSRAM3相應(yīng)的FSMC_NE3信號(hào)線會(huì)輸出控制信號(hào)(即片選信號(hào))辜御,如果這個(gè)時(shí)候FSMC_NE3處剛好接上IS62WV51216的CS端,那么IS62WV51216就可以任由我們擺布啦屈张。
因此擒权,對(duì)于你使用IS62WV51216來(lái)說(shuō),一定要注意你的CS端是接的FSMC的哪個(gè)FSMC_NE端阁谆,這決定你在程序訪問(wèn)哪個(gè)地址范圍碳抄。
下面來(lái)說(shuō)一下在stm32F407中SRAM的硬件連接:
圖中需要注意的是,除了PG12的連接不固定外场绿,其他的管腳都要按照?qǐng)D中的方式連剖效,為什么呢?因?yàn)閷?duì)于FSMC來(lái)說(shuō)焰盗,它已經(jīng)集成到了單片機(jī)內(nèi)部璧尸,它的提供給的管腳已經(jīng)確定了,是不能改動(dòng)的熬拒。唯一具有靈活性的就是FSMC_NE爷光,具體用哪個(gè)FSMC_NE管腳來(lái)和你的SRAM相連,當(dāng)然是你的自由澎粟,但是不要忘了蛀序,你要找到你選的FSMC_NE所對(duì)應(yīng)的地址范圍,不然寫(xiě)程序的時(shí)候就搞不清喏活烙!
怎么樣徐裸?用FSMC來(lái)控制IS62WV51216還是很簡(jiǎn)單吧!
對(duì)于編程的具體細(xì)節(jié)我這里就不講解了啸盏,懂了原理倦逐,寫(xiě)起代碼來(lái)也很簡(jiǎn)單的。