天天看點

使用FSMC驅動LCD以及資料線偏移的問題

FSMC的了解

使用FSMC功能将8080接口的LCD當外部RAM來使用(資料傳給LCD時沒經過内部SRAM,是以一幀圖檔很大也可以直接傳),根據STM的位址配置設定圖可以看出外部RAM的位址由0x60000000開始到0x9FFFFFFF結束,一共1G記憶體,将其平分為了4個塊,每個塊256M位元組,其中每個塊的時序不同來支援多種外部存儲器。8080接口的LCD時序和第一塊的時序相接近,第一個塊裡面又分為4個區,每個區大小為64M位元組,都有獨立的寄存器對所連接配接的存儲器進行配置,每個區的32位位址中的低28位[27:0]不同,其中的高位[27:26]是來區分4個區的,低位[25:0]有個名字叫HADDR[25:0],外部RAM的位址就是通過HADDR[25:0]來給的,可是LCD寫資料之後其内部位址是自動遞增的,是以不需要發位址給LCD,則位址線目前不使用,8080接口與FSMC的第一個塊的接口之間的差别隻有一個資料/指令線和位址線,是以我們可以使用位址線中的一根線來代替資料/指令線,然後通過FSMC給不同的位址寫資料來改變位址線上的那根資料/指令線的高低電平,達到讀寫資料或者讀寫指令的要求,在通過FSMC給位址時,位址就是按區的位址或上被改變的其中一根位址線(資料/指令線),來決定FSMC的時序和資料或指令。

這是将外部RAM位址分為4個塊的圖:

使用FSMC驅動LCD以及資料線偏移的問題

這是将第一個塊分為4個區的圖:

使用FSMC驅動LCD以及資料線偏移的問題

關于A0對齊A1或者A0對齊A2的問題:

這是FSMC驅動LCD的規定:

使用FSMC驅動LCD以及資料線偏移的問題

這是三星公司的ARM晶片s3c2440與1片128KB的SRAM晶片的連接配接原理圖:

使用FSMC驅動LCD以及資料線偏移的問題

初學者可能會有幾個疑問,為什麼SRAM晶片的A0位址引腳連接配接的是ARM晶片的A1引腳呢?那什麼情況下SRAM晶片的A0連接配接ARM晶片的A0引腳呢?

首先,我們分析一下圖中的 SRAM晶片,該晶片有A0-A15一共16根位址線,有D0-D15一共16根資料線,故其存儲空間為 2^16 * 16 bit = 2^17 * 8 bit = 2^17 byte = 128KB

我們知道,要尋址 128KB 需要 17 根位址線(128 = 2^17 ),然而SRAM晶片的位址引腳卻隻有16根,ARM端該如何給位址線呢?

由圖可以看出,SRAM晶片的資料總線是16位寬,即一次傳輸2個位元組的資料。是以,我們可以這樣了解,即一個位址空間其實對應着2個位元組的資料,實際上真正的尋址空間隻有64KB而已,16根位址線足夠。這樣ARM端并不需要将17根位址線全部連接配接到SRAM晶片上,隻需要給出高16位位址(A1~A16),然後,SRAM晶片即根據這16根位址找到對應的位址空間,将該位址空間的2個位元組發送到資料總線上,然後ARM端根據未連接配接到SRAM晶片的A0的電平,來決定具體是取高位元組,還是低位元組。

由這些分析可以推出一個規律,即 ARM端的位址線到底是 A0 、A1 還是 A2 連接配接 存儲晶片的 A0,取決于存儲系統的資料總線位寬,如果是 8位則A0->A0,如果是16位則A1->A0,如果是32位則A2->A0。(這段話這在别處看到搬過來的)

8080接口

FSMC接口