22. LCD-FSMC原理簡(jiǎn)介
一個(gè)小技巧:查看某個(gè)函數(shù)的定義,先把光標(biāo)移到這個(gè)函數(shù)上,然后按F12鍵。
一。 FSMC簡(jiǎn)介
FSMC全稱(chēng)“靜態(tài)存儲(chǔ)器控制器”。
使用FSMC控制器后,可以把FSMC提供的FSMC_A[25:0]作為地址線,而把FSMC提供的FSMC_D[15:0]作為數(shù)據(jù)總線。
(1)當(dāng)存儲(chǔ)數(shù)據(jù)設(shè)為8位時(shí)
(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b)
地址各位對(duì)應(yīng)FSMC_A[25:0],數(shù)據(jù)位對(duì)應(yīng)FSMC_D[7:0]
(2)當(dāng)存儲(chǔ)數(shù)據(jù)設(shè)為16位時(shí)
(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b)
由于數(shù)據(jù)是16位,而內(nèi)部HADDR每個(gè)地址對(duì)應(yīng)一個(gè)字節(jié),所以內(nèi)部地址要右移一位(也就是除2)與外部地址對(duì)齊。
例:外部地址0對(duì)應(yīng)內(nèi)部地址0的數(shù)據(jù)
外部地址1對(duì)應(yīng)內(nèi)部地址2的數(shù)據(jù)
外部地址2對(duì)應(yīng)內(nèi)部地址4的數(shù)據(jù)
................
因?yàn)橥獠康刂芬粋€(gè)地址對(duì)應(yīng)一個(gè)16位的數(shù)據(jù),而內(nèi)部地址每個(gè)2個(gè)地址才能存儲(chǔ)一個(gè)16位的數(shù)據(jù)。
地址各位對(duì)應(yīng)FSMC_A[24:0],數(shù)據(jù)位對(duì)應(yīng)FSMC_D[15:0]
FSMC包括4個(gè)模塊:
(1)AHB接口(包括FSMC配置寄存器)
(2)NOR閃存和PSRAM控制器(驅(qū)動(dòng)LCD的時(shí)候LCD就好像一個(gè)PSRAM的里面只有2個(gè)16位的存儲(chǔ)空間,一個(gè)是DATA RAM一個(gè)是CMD RAM)
(3)NAND閃存和PC卡控制器
(4)外部設(shè)備接口
注:FSMC可以請(qǐng)求AHB進(jìn)行數(shù)據(jù)寬度的操作。如果AHB操作的數(shù)據(jù)寬度大于外部設(shè)備(NOR或NAND或LCD)的寬度,此時(shí)FSMC將AHB操作分割成幾個(gè)連續(xù)的較小的數(shù)據(jù)寬度,以適應(yīng)外部設(shè)備的數(shù)據(jù)寬度。
FSMC對(duì)外部設(shè)備的地址映像從0x6000 0000開(kāi)始,到0x9FFF FFFF結(jié)束,共分4個(gè)地址塊,每個(gè)地址塊256M字節(jié)。可以看出,每個(gè)地址塊又分為4個(gè)分地址塊,大小64M。對(duì)NOR的地址映像來(lái)說(shuō),我們可以通過(guò)選擇HADDR[27:26]來(lái)確定當(dāng)前使用的是哪個(gè)64M的分地址塊,如下頁(yè)表格。而這四個(gè)分存儲(chǔ)塊的片選,則使用NE[4:1]來(lái)選擇。數(shù)據(jù)線/地址線/控制線是共享的。
NE1 ->Bank1NE2->Bank2NE3->Bank3NE4->Bank4
若NE1連接,則每小塊NOR/PSRAM 64M
第一塊:6000 0000h--63ff ffffh (DATA長(zhǎng)度為8位情況下,由地址線FSMC_A[25:0]決定;DATA長(zhǎng)度為16位情況下,由地址線FSMC_A[24:0]決定)
第二塊:6400 0000h--67ff ffffh
第二塊:6800 0000h--6bff ffffh
第三塊:6c00 0000h--6fff ffffh
注:這里的HADDR是需要轉(zhuǎn)換到外部設(shè)備的內(nèi)部AHB地址線,每個(gè)地址對(duì)應(yīng)一個(gè)字節(jié)單元。因此,若外部設(shè)備的地址寬度是8位的,則HADDR[25:0]與STM32的CPU引腳FSMC_A[25:0]一一對(duì)應(yīng),最大可以訪問(wèn)64M字節(jié)的空間。若外部設(shè)備的地址寬度是16位的,則是HADDR[25:1]與STM32的CPU引腳FSMC_A[24:0]一一對(duì)應(yīng)。在應(yīng)用的時(shí)候,可以將FSMC_A總線連接到存儲(chǔ)器或其他外設(shè)的地址總線引腳上。
例:STM32F10XX FCMS控制LCD的驅(qū)動(dòng)
FSMC提供了所有的LCD控制器的信號(hào):
FSMC_D[16:0]: 16bit的數(shù)據(jù)總線
FSMC NEx:分配給NOR的256M,再分為4個(gè)區(qū),每個(gè)區(qū)用來(lái)分配一個(gè)外設(shè),這四個(gè)外設(shè)的片選分為是NE1-NE4,對(duì)應(yīng)的引腳為:PD7—NE1,PG9—NE2,PG10-NE3,PG12—NE4
FSMC NOE:輸出使能,連接LCD的RD腳。
FSMC NWE:寫(xiě)使能,連接LCD的RW腳。
FSMC Ax:用在LCD顯示RAM和寄存器之間進(jìn)行選擇的地址線,即該線用于選擇LCD的RS腳,該線可用地址線的任意一根線,范圍:FSMC_A[25:0]。
注:RS = 0時(shí),表示讀寫(xiě)寄存器;RS = 1表示讀寫(xiě)數(shù)據(jù)RAM。
舉例1:選擇NOR的第一個(gè)存儲(chǔ)區(qū),并且使用FSMC_A16來(lái)控制LCD的RS引腳,則我們?cè)L問(wèn)LCD顯示RAM的基址為0x6002 0000,訪問(wèn)LCD寄存器的地址為:0x6000 0000。因?yàn)閿?shù)據(jù)長(zhǎng)度為16bit,所以FSMC_A[24:0]對(duì)應(yīng)HADDR[25:1]所以顯示RAM的基址=0x60000000+2^16*2=0x60000000+0x2 0000=0x60020000
舉例2:選擇NOR的第四個(gè)存儲(chǔ)區(qū),使用FSMC_A0控制LCD的RS腳,則訪問(wèn)LCD顯示RAM的基址為0x6c00 0002,訪問(wèn)LCD寄存器的地址為:0x6c00 0000。
例:
FSMC_D[15:0],連16bit數(shù)據(jù)線;FSMC_NE1,連片選:只有bank1可用
FSMC NOE:輸出使能
FSMC NEW:FSMC寫(xiě)使能
FSMC Ax:連接RS,可用范圍FSMC_A[24:0]
二。NOR PSRAM外部接口
FSMC的地址線有26根,可以訪問(wèn)2^26個(gè)字節(jié)的空間也就是64MB,訪問(wèn)不同的塊通過(guò)片選控制。
注意每個(gè)存儲(chǔ)塊的地址都不一樣。
三。 存儲(chǔ)塊1操作簡(jiǎn)介
對(duì)于外部引腳,F(xiàn)SMC_A[0]永遠(yuǎn)接在外部設(shè)備地址A[0],只是對(duì)于內(nèi)部來(lái)講,當(dāng)數(shù)據(jù)是16位時(shí),內(nèi)部地址
HADDR[1]對(duì)應(yīng)引腳FSMC_A[0]。
三。存儲(chǔ)塊1的操作簡(jiǎn)介
讀寫(xiě)時(shí)序可以分開(kāi)設(shè)置對(duì)于LCD的讀寫(xiě)操作很有用處,因?yàn)長(zhǎng)CD的讀寫(xiě)時(shí)序是不同的。
地址線只用一根
數(shù)據(jù)線D[0]-D[16]直接相連
NEx 接LCD的片選CS
NOE 接LCD的RD
NWE 接LCD的WR
四。FSMC的寄存器
EXTMOD位必須為1的時(shí)候,讀時(shí)序和寫(xiě)時(shí)序才能分別設(shè)置!