SDRAM:Synchronous Dynamic Random Access Memory,同步動態隨機存儲器,同步是指內存工作需要同步時鐘,內部的命令的發送與數據的傳輸都以它為基準;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲,而是自由指定地址進行數據讀寫
一.內部結構
原理圖如下:
存儲邏輯結構:
可以看出SDRAM的內部是一個陣列,就像表格一樣,其尋址方式是按照塊、行、列來的,即先選定SDRAM芯片,然后發出塊信號確定那一塊,再發出行信號確定哪一行,再發出列信號確定哪一列。
CPU對SDRAM的訪問可以分為以下幾步:
CPU對存儲控制器發出統一編址
內存控制器發出片選信號,選定SDRAM芯片
選定哪一個Bank(通過ADDR24、ADDR25信號線選定,總共4個Bank)
對選定的Bank進行行列尋址
找到對應的地址,通過32根數據線進行數據傳輸(原理圖中是32位)
看起來很簡單,但是我們要考慮到,不同規格SDRAM對應著不同的尋址方式,因為不同的SDRAM可能行列數不一樣,對時序要求不一樣,所以在訪問SDRAM之前,我們要配置存儲控制器中的一些寄存器來匹配SDRAM!!!
二.相關寄存器
存儲控制器一共有13個寄存器,6種寄存器,對BANK0~BANK5進行訪問時,只需要配置BWSCON和BANKCONx寄存器,但是對SDRAM訪問,不僅僅需要對這倆個寄存器進行配置,還需要額外配置4個寄存器。
下面以訪問SDRAM為例子介紹一下這些寄存器(按照芯片手冊中的順序來介紹):
BWSCON
位寬&等待控制寄存器
ST6:決定是否使用SDRAM的數據掩碼,對SDRAM時為0,對SRAM時為1。
WS6:決定是否使用WAIT信號,一般不使用。(WAIT信號就是在SDRAM沒準備好的時候,由SDRAM發給CPU,請求延遲一段時間)
DW6:決定BANK位寬,自然是32位。
所以,BWSCON寄存器要或運算的值為:0x02000000
BANKCON6
BANK控制寄存器,用來控制外接設備的訪問時序的,BANK0~BANK5默認0X0700
對于SDRAM的訪問,我們需要配置的就是圖中陰影部分的:
MT:決定BANK外接的是SDRAM還是SRAM,SDRAM選擇11.
Trcd:行列信號之間的延遲時間,根據芯片手冊得知最小為21ns,而我們的HCLK時鐘為100MHz,一個clock10ns,所以保險起見選擇30ns,即:01。
SCAN:設置列地址位,這里使用的SDRAM列地址一共9位,所以為:01.
所以,BANKCON6寄存器要或運算的值為:0x00018005
REFRESH
刷新控制寄存器,用來控制SDRAM的刷新模式和刷新頻率。我們知道,SDRAM中的存儲陣列需要不斷的刷新來保證數據不丟失,所以就要配置刷新控制寄存器。
REFEN:決定使能刷新功能,當然是開啟了,值為:1
TREFMD:刷新的模式,一般自動刷新,值為:0
Trp:根據芯片手冊得知20ns保險,對應2clocks,值為:00
Tsrc:默認即可
Refresh Counter:刷新計數的值,查SDRAM的手冊可得8192個刷新周期為64ms,則每一個刷新周期為7.8125ns,通過公式計算可得刷新計數的值為:1955
所以,REFRESH寄存器要或運算的值為:0x008c07a3
BANKSIZE
BURST_EN:決定是否允許突發傳輸,值為:1。
SCKE_EN:決定是否使用SCKE信號來決定省電模式,值為:1。
SCLK_EN:決定SCLK時鐘信號的產生模式,值為:1。
BK76MAP:決定BANK6、BANK7的大小,這里SDRAM是64M,所以值為:001。(BANK0~BANK5的大小是128M固定的,BANK6、BANK7的大小是可以控制的)
所以,BANKSIZE寄存器要或運算的值為:0x000000b1
MRSR
SDRAM模式設置寄存器
只有CL的值是可以修改的,查詢芯片手冊:
可知,CL可以是2clock或者是3clock,保險起見,值為:011
所以,MRSR寄存器要或運算的值為:0x00000030
/**********************************************************************************************************************/
綜上所述,對SDRAM初始化的代碼為:
void SDRAM_Init(void)
{
/* 對BANK6進行配置 以訪問SDRAM */
BWSCON |= 0x02000000;//對SDRAM使用數據掩碼、不使用WAIT信號、設置BANK6位寬32bit
BANKCON6 = 0x00018005;//BANK6外接SDRAM、行列信號間延遲3clocks、設置列地址位數
REFRESH = 0x008c07a3;//配置刷新模式及刷新計數值
BANKSIZE = 0x000000b1;//設置BANK6大小為64MB
MRSRB6 = 0x00000030;//設置CL為3clocks
}
三.讀寫SDRAM
對SDRAM進行配置之后,進行讀寫操作,看看寫進去的值和讀出來的值是否統一。
測試就直接寫在main.c中吧:
#include "s3c2440_soc.h"
#include "uart.h"
void SDRAM_Init(void)
{
/* 對BANK6進行配置 以訪問SDRAM */
BWSCON |= 0x02000000;//對SDRAM使用數據掩碼、不使用WAIT信號、設置BANK6位寬32bit
BANKCON6 = 0x00018005;//BANK6外接SDRAM、行列信號間延遲3clocks、設置列地址位數
REFRESH = 0x008c07a3;//配置刷新模式及刷新計數值
BANKSIZE = 0x000000b1;//設置BANK6大小為64MB
MRSRB6 = 0x00000030;//設置CL為3clocks
}
int SDRAM_Test(void)
{
/* BANK6 基地址0x30000000 */
volatile unsigned char *p = (volatile unsigned char *)(0x30000000);
int n;
/* 寫入20Byte數據 */
for( n=0;n<20;n++ )
{
*(p+n) = 0xbb;
}
for( n=0;n<20;n++ )
{
if( 0xbb != *(p+n) )
return 0;
}
return 1;
}
int main(void)
{
SDRAM_Init();
uart0_init();
if( SDRAM_Test() )
puts("OK!!!n");
else
puts("NOT OK!!!n");
return 0;
}
代碼親測可以。
上一篇:S3C2440—9.復制程序到SDRAM中執行
下一篇:S3C2440—7.存儲控制器訪問外設
推薦閱讀
史海拾趣
在競爭激烈的電子行業中,Bias Power公司始終堅持質量至上的原則。公司建立了嚴格的質量控制體系,從原材料采購到生產加工、產品測試等各個環節都進行嚴格把關。此外,公司還引入了先進的生產設備和技術,確保產品的穩定性和可靠性。
由于公司對產品質量的嚴格把控,Bias Power公司的產品在市場上享有很高的聲譽。許多知名企業都選擇與其合作,將其產品應用于關鍵領域和重要項目中。這種信賴和認可為Bias Power公司的發展提供了有力支持。
在電子行業的早期,Bias Power公司憑借其創新的基于開關技術的低功率隔離式AC/DC電源設計,迅速在市場中脫穎而出。當時,傳統的電源設計方案效率低下,成本高昂,難以滿足市場的迫切需求。Bias Power公司憑借其專有設計,實現了電源的高效率、高密度和成本效益,贏得了眾多客戶的青睞。
隨著技術的不斷進步,Bias Power公司不斷推出新產品,滿足市場的多樣化需求。其偏置電源產品線日益豐富,包括提供低于5W功率的AC/DC電源模塊,這些模塊成為分立電源設計的理想替代方案,幫助設計工程師節省時間和金錢。
隨著產品質量的不斷提升和市場份額的逐步擴大,ACCUTEK公司開始將目光投向國際市場。公司積極參加國際電子展會和技術交流活動,與全球多家知名企業建立了合作關系。同時,公司還在海外設立了多個分支機構,以便更好地服務當地客戶。這些舉措不僅提升了公司的國際影響力,也為公司的長遠發展注入了新的活力。
隨著技術的不斷進步,BeagleBoard公司始終保持著對創新的追求。他們不斷研發新的技術,優化產品設計,推出了一系列具有創新性的產品。其中,BeagleBone Black是該公司的一款明星產品,它集成了高性能處理器、豐富的外設接口和強大的擴展能力,為開發者提供了更加便捷的開發體驗。此外,公司還推出了工業寬溫應用的變體,以滿足不同領域的需求。
CET Technology一直以來都高度重視產品質量和技術研發。為了保障產品的品質和可靠性,公司建立了完善的實驗室體系,包括電磁兼容實驗室、電氣綜合實驗室等多個專業實驗室。這些實驗室配備了先進的實驗儀器設備,為公司研發高品質產品提供了有力保障。近期,CET的實驗室成功獲得了CNAS實驗室能力認證,這是對公司技術實力和質量管理水平的高度認可。此次認證將進一步提升CET在國際市場上的競爭力,為公司未來的發展奠定了堅實基礎。
以上就是關于CET Technology公司在電子行業中的5個發展故事。這些故事展示了CET在技術創新、業務拓展、智慧化轉型和品質保障等方面的努力和成果,也體現了公司在電子行業中的領先地位和影響力。
后天就要復試了,因為以前都沒有做過界面,有個模塊做不出來,是這樣的: 我用VS2008創建了一個MFC智能設備程序(基于對話框) 接下來: 我的類名是:CMyDlg 我要在工程彈出的默認對話框中, 再動態創建一個BUTTON1(創建按鈕的同時要設置它的字體+顏色, ...… 查看全部問答∨ |
|
根據http://www.cnblogs.com/walzer/archive/2008/11/01/713880.html的第一步新建立的一個模擬器,Build OS->Sysgen時報錯,不能生成image。 但是,如果在New Platform的過程中不選擇EMULATOR:X86,而選擇SamSung:2410就能順利地生成image,并且 ...… 查看全部問答∨ |
|
請問如何將sys + inf形式的文件打包成可執行的exe驅動文件? 我試過將inf ->system32.inf sys->system32.driver 此路不通. 求解 謝… 查看全部問答∨ |
除了生成Flash的.s19格式,或.hex的文件外,怎么樣才能生成EEPRM的燒些文件呢,定義了EEPROM段的變量,在map文件里查看 ...… 查看全部問答∨ |
哪位大俠有SY-EVM2407A(V2.0)評估版的測試程序哪位大俠有啊,可否給小弟發送一份doublesan@163.com。小弟初涉DSP行業,在校學生,當不勝感激,謝謝好心人了,急求!!!… 查看全部問答∨ |
首先貼出文件內容官方文件為slac490.zip,下面是下載頁面連接地址http://www.ti.com/tool/430boost-sense1結合slau337a.pdf 可完成初步開發,論壇已有上傳,給出連接,不再重復上傳http://bbs.eeworld.com.cn/thread-307218-1-1.html最后附上s ...… 查看全部問答∨ |
LM3S9B96學習(三)-----#ifndef,#define #end專題 LM3S9B96學習(三)-----#ifndef,#define #end專題有網友問到對頭文件中防止重復定義的宏不是很清楚,例如#ifndef __SYSCTL_H__#define __SYSCTL_H__......#endif現在我就專對這個宏講一下我的理解(如果我有的地方講的不對,請網友指正。共同學習) ...… 查看全部問答∨ |