EMC作為一個外部存儲接口,使其為MCU追求大容量、高速度成為可能。作為比較常用的外部存儲芯片SDRAM,其相對復雜的數據傳輸時序,在擁有EMC之后,又會出現那些問題,今天就談一下它們之間的那些事。
恩智浦(NXP)公司生產的這款LPC1788芯片帶有控制外部存儲的控制器,它是一個多端口存儲外設,它支持異步靜態存儲設備,如RAM、ROM和Flash,也支持單數據速率傳輸的SDRAM這種動態存儲器。該控制器帶有26根地址線,32根數據線。其支持4塊靜態存儲片選地址映射和4塊動態存儲片選地址映射。下圖是EMC接口在內存映射的位置。
EMC與外部的動態存儲器相連時,其占用的地址線相對來說是比較少的,這還是跟動態存儲器的這種存儲結構是有一定關系的。就拿SDRAM來說,其內部存儲是按行列分布的,如下圖所示,就像表格一樣,有對應的行地址和列地址,每一個小方格就是一個存儲單元。在對其尋址時,需要先進行行地址尋址,再進行列地址尋址,才選擇出確定的操作單元。所以其行列地址線是可以分時復用,這也就決定了其占用的地址線較少。
◆ EMC為動態存儲器提供了引腳完成對應的信號傳輸 ◆ EMC_D[31:0]: 數據線;
EMC_A[14:0]:地址線;
EMC_CLK:為SDRAM提供時鐘;
EMC_CKE:SDRAM的時鐘使能位;
EMC_DQM[3:0]:數據掩碼信號;
EMC_RAS:SDRAM行地址選通脈沖信號;
EMC_CAS:SDRAM列地址選通脈沖信號
EMC_DYCS[3:0]:SDRAM的片選信號;
EMC_WE:SDRAM寫使能。
當動態存儲器件的引腳連接到EMC上后,就需要對EMC的寄存器來進行配置。可以看到對于SDRAM,有很多的關于時間參數配置的寄存器,需要根據實際連接的外部存儲器件來進行相應的配置。當然,這些時間參數在外部存儲器件的數據手冊中都是可以找著的。
但我們也不能掉以輕心,一些錯誤的時間配置可能導致數據傳輸無法完成,嚴重的可能導致動態存儲器內部數據丟失。對于動態存儲器件來說,其需要不斷進行刷新才能保存數據,這是它很重要的操作,所以刷新時間的配置是很重要的。對于常用的SDRAM 芯片IS42S16400來說,在其數據手冊中找到下圖這樣一個時間參數,它的意思就是說刷新4096次需要的時間是64ms,也就是說刷新一次的時間是15.625us,如果刷新的周期比這個大的話,SDRAM就無法保存數據。而對于LPC1788 EMC模塊,它就有這樣一個時間參數寄存器EMCDynamicRefresh,它可以用來設置SDRAM刷新一次的時間。

由于寄存器是以EMC的時鐘作為基準的,所以這個刷新時間的設置還跟EMC的時鐘有關,在配置的過程中,根據當前時鐘計算一下,以免出現錯誤。對于連有多個動態外部存儲芯片,而他們是共用這一個刷新時間的,這時候就要根據各個數據手冊中要求的刷新周期,以每次刷新時間最短的為準,這樣才能保證都能在規定的時間內完成刷新。同時對于支持熱復位的情況下,也要注意一下,由于熱復位期間,EMC的時鐘發生變化,這時候的刷新周期也就有所變化,在配置過程中,也要考慮到上面的情況。
對于其他的時間參數,可以對照EMC關于時間參數配置的寄存器和對應的外部存儲芯片的數據手冊,完成正確的配置,當EMC配置完成之后,就可以通過訪問總線地址來訪問外部存儲。
EMC實現的這種與外部存儲數據傳輸方式,會在以后的嵌入式產品中應用越來越廣泛,它為小容量MCU提供了新的契機。
|