s5pv210——SDRAM的初始化
以下內(nèi)容源于朱友鵬《物聯(lián)網(wǎng)大講壇》課程的學(xué)習(xí),以及博客http://www.cnblogs.com/biaohc/p/6346949.html的學(xué)習(xí)整理,如有侵權(quán),請告知刪除。
一、SDRAM引入
1、SDRAM(Syncronized Dynamic Ramdam Access Memory,同步動態(tài)隨機存儲器)
- DDR:嚴格來說應(yīng)該叫DDR SDRAM((DDR:double data rate,雙倍速度的SDRAM)),它是SDRAM的升級版。
- DDR有好多代:DDR1,DDR2,DDR3,DDR4,LPDDR;
2、SDRAM的特性
- 容量大、價格低、掉電易失性、隨機讀寫、總線式訪問;
- SDRAM / DDR都屬于動態(tài)內(nèi)存(相對于靜態(tài)內(nèi)存SRAM),都需要先運行一段初始化代碼來初始化才能使用,而SRAM開機上電后就可以直接運行;
- NorFlash和NandFlash(硬盤)類似于SDRAM和SRAM的區(qū)別。
- 由于硬件特性的限制,啟動代碼比較復(fù)雜。研究裸機是為了研究uboot,在uboot中充分利用了硬件的各種特性,處理了硬件復(fù)雜性。
3、SDRAM數(shù)據(jù)手冊帶讀
(1)SDRAM在系統(tǒng)中屬于SoC外接設(shè)備
- 外部外設(shè);
- 隨著半導(dǎo)體技術(shù)發(fā)展,很多東西都逐漸集成到SoC內(nèi)部。但仍在外部的有:Flash、SDRAM/DDR、網(wǎng)卡芯片如DM9000、音頻Codec。
(2)SDRAM通過地址總線和數(shù)據(jù)總線接口(總線接口)與SoC通信。
(3)SDRAM很標準化,做SDRAM的廠商并不多(三星,金士頓等)。
(4)三星官方的數(shù)據(jù)手冊上沒有芯片相關(guān)的參數(shù)設(shè)置信息,都是芯片選型與外觀封裝方面的信息。
- 選型是給產(chǎn)品經(jīng)理來看的;
- 封裝和電壓等信息是給硬件工程師看的;
- 軟件工程師最關(guān)注的是工作參數(shù)信息,但是數(shù)據(jù)手冊沒有。
- K表示三星產(chǎn)品;
- 4表示是DRAM;
- T表示產(chǎn)品號碼;
- 1G表示容量(1Gb,等于128MB。X210開發(fā)板上一共用了4片相同的內(nèi)存,所以總?cè)萘渴?28×4=512MB);
- 16表示單芯片是16位寬的;
- 4表示是4bank;
二、s5pv210的SDRAM介紹
1、原理圖中SDRAM相關(guān)部分
(1)S5PV210共有2個內(nèi)存端口,分別叫DRAM0(對應(yīng)原理圖的內(nèi)存port1)和DRAM1(對應(yīng)原理圖的內(nèi)存port2):
- DRAM0 ? 內(nèi)存地址范圍:0x20000000~0x3FFFFFFF(512MB),對應(yīng)引腳是Xm1xxxx
- DRAM1 ? 內(nèi)存地址范圍:0x40000000~0x7FFFFFFF(1024MB),對應(yīng)引腳是Xm2xxxx
(2)結(jié)論
- 210最多支持內(nèi)存為1.5GB,如果給210更多的內(nèi)存CPU就無法識別。
- 實際開發(fā)板不一定要這么多,譬如我們X210開發(fā)板就只有512MB內(nèi)存,連接方法是在DRAM0端口分布256MB,在DRAM1端口分布了256MB。
- 210開發(fā)板上內(nèi)存合法地址是:0x20000000~0x2FFFFFFF(256MB) + 0x40000000~0x4FFFFFFF(256MB)。當(dāng)板子上DDR初始化完成之后,這些地址都是可以使用的;如果使用了其他地址譬如0x30004000就是死路一條。但這些地址是可以重新設(shè)置的,見博客http://blog.csdn.net/oqqhutu12345678/article/details/70196133的第4部分。
(3)原理圖中每個DDR端口都由3類總線構(gòu)成
- 地址總線(Xmn_ADDR0~XMnADDR13共14根地址總線);
- 控制總線;
- ?數(shù)據(jù)總線(Xmn_DATA0~XMnDATA31共32根數(shù)據(jù)線);
- 分析:從數(shù)據(jù)總線的位數(shù)可以看出,我們用的是32位的(物理)內(nèi)存。
- X210開發(fā)板共使用4片內(nèi)存(每片1Gb=128MB,共512MB);
- 每片內(nèi)存的數(shù)據(jù)總線都是16位的(單芯片是16位內(nèi)存);
- 如何由16位內(nèi)存得到32位內(nèi)存呢?可以使用并聯(lián)方法。在原理圖上橫向的2顆內(nèi)存芯片就是并聯(lián)連接的。并聯(lián)時地址總線接法一樣,但是數(shù)據(jù)總線要加起來。這樣連接相當(dāng)于在邏輯上可以把這2顆內(nèi)存芯片看成是一個(這一個芯片是32位的,接在Xm1端口上)。
- 從原理圖可以看出整個SDRAM,由4對16位內(nèi)存芯片組成,每個內(nèi)存芯片128MB,其中有兩個內(nèi)存芯片并聯(lián)成32位內(nèi)存,共256MB內(nèi)存連接在DMC0,另兩個內(nèi)存芯片也并聯(lián)成32位內(nèi)存,共256MB連接在DMC1。
2、數(shù)據(jù)手冊中SDRAM相關(guān)部分
(1)上圖來自數(shù)據(jù)手冊《NT5TU64M16GG-DDR2-1G-G-R18-Consumer》第10頁的block diagram。
(2)圖解:
- 這個框圖是128Mb×8結(jié)構(gòu)的。這里的8指的是8bank,每bank128Mbit(16MB),則共16MB*8=128MB。
- 210的DDR端口信號中有BA0~BA2,接在內(nèi)存芯片的BA0~BA2上,這些引腳就是用來選擇bank的。
- 每個bank內(nèi)部有128Mb,通過row address(14位)* ?column address(10位)的方式來綜合尋址(像二維坐標),則一共能尋址的范圍是:2的14次方*2的10次方 = 2的24次方,對應(yīng)16MB(128Mbit)內(nèi)存。
三、匯編初始化SDRAM詳解1
1、初始化代碼框架介紹
- SDRAM的初始化,實際是調(diào)用一個函數(shù)sdram_asm_init。
- 函數(shù)在sdram_init.S文件中實現(xiàn),是一個匯編函數(shù)。
- 調(diào)用匯編實現(xiàn)的函數(shù)在返回時,需要明確使用返回指令(mov pc, lr)。
2、27步初始化DDR2
(1)DDR初始化和SoC(準確說是和SoC中的DDR控制器)有關(guān),也和開發(fā)板使用的DDR芯片有關(guān),和開發(fā)板設(shè)計時DDR的連接方式也有關(guān)。
(2)S5PV210的DDR初始化步驟在SoC數(shù)據(jù)手冊:1.2.1.3 DDR2這個章節(jié)。P599
- 初始化DDR共需27個步驟。
(3)X210的內(nèi)存連接方式是:在DRAM0上連接256MB,在DRAM1上連接了256MB。
- 初始化DRAM時分為2部分,第一部分初始化DRAM0,第二部分初始化DRAM1。
(4)初始化代碼來源sdram_init.S文件
- 第一,九鼎官方的uboot中;
- 第二,參考九鼎的裸機教程中對DDR的初始化;
- 第三,有些參數(shù)可以根據(jù)自己理解修改過。
3、設(shè)置IO端口驅(qū)動強度
- DDR芯片和S5PV210芯片是通過一些引腳連接的。
- DDR芯片工作時需要一定的驅(qū)動信號,這個驅(qū)動信號需要一定的電平水平才能抗干擾,所以需要設(shè)置這些引腳的驅(qū)動能力,使DDR正常工作。
- DRAM控制器對應(yīng)的引腳設(shè)置為驅(qū)動強度2X。
4、DRAM port 時鐘設(shè)置
- 從代碼第128行到154行。主要是開啟DLL(DRAM PLLl)(目的是為了倍頻,因為內(nèi)存的讀取時鐘由SoC提供,但太低,而內(nèi)存的讀寫是很快的),然后等待鎖存。
- 這段代碼對應(yīng)27步中的第2到第4步。
四、匯編初始化SDRAM詳解2
1、DMC0_MEMCONTROL
burst length=4,1chip,……對應(yīng)值是0x00202400
2、DMC0_MEMCONFIG_0
DRAM0通道中memory chip0的參數(shù)設(shè)置寄存器
3、DMC0_MEMCONFIG_1
DRAM0通道中memory chip1的參數(shù)設(shè)置寄存器
總結(jié):
- 三星設(shè)置DRAM0通道,允許我們接2片256MB的內(nèi)存,分別叫memory chip0和memory chip1,分別用這兩個寄存器來設(shè)置它的參數(shù)。按照三星的設(shè)計,chip0的地址應(yīng)該是0x20000000到0x2FFFFFFF,然后chip1的地址應(yīng)該是0x30000000~0x3FFFFFFF.各自256MB。
- 但是X210開發(fā)板實際在DRAM0端口只接了256MB的內(nèi)存,所以只用了chip0,沒有使用chip1。按照這個推論,DMC0_MEMCONFIG_0有用,而DMC0_MEMCONFIG_1無用,所以可以直接給它默認值。
4、DMC_DIRECTCMD
這個寄存器是個命令寄存器,210通過向這個寄存器寫值來向DDR芯片發(fā)送命令(通過命令總線),這些命令應(yīng)該都是用來配置DDR芯片工作參數(shù)。
總結(jié):
- DDR配置過程比較復(fù)雜,基本上是按照DDR控制器的時序要求來做的,其中很多參數(shù)要結(jié)合DDR芯片本身的參數(shù)來定,還有些參數(shù)是時序參數(shù),要去詳細計算。所以DDR配置非常繁瑣、細致、專業(yè)。
- 我們對DDR初始化的態(tài)度就是:學(xué)會這種思路和方法,結(jié)合文檔和代碼能看懂,會算一些常見的參數(shù)即可。
5、重定位代碼到SDRAM中
DRAM初始化之后,實際上重定位代碼過程和之前重定位到SRAM中完全相同,只是鏈接地址不一樣。
假如我們通過usb下載到0xD002_0010,那么運行地址就是0xD002_0010,而在SRAM中重定位是指鏈接地址在SRAM的地址空間內(nèi),重定位到SDRAM中是指鏈接地址寫成SDRAM的地址范圍內(nèi)的一個地址值。
見博客http://blog.csdn.net/oqqhutu12345678/article/details/70135880
總結(jié)
以上是生活随笔為你收集整理的s5pv210——SDRAM的初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中小企业信息化建设管理方案规划设计1
- 下一篇: c++远征之继承篇——继承方式