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