ARM_DDR初始化

测试的硬件平台为天嵌公司的TQ210。

TQ210采用的处理器解决方案是集成了ARM Cortex-A8 core的S5PV210芯片,S5PV210有2个独立的DRAM控制器和端口(引脚):DMC0和DMC1。DMC0最大支持512MB,DMC1最大支持1GB,两个控制器必须使用相同类型的内存。

TQ210开发板使用了8片K4T1G084QQ ,每片128MB,共计1GB。其中4片挂接在DMC0,使用相同的地址线xm1ADDR[13:0],串联使用数据线xmlDATA[31:0],数据位宽32位;另外4片挂接在挂接在DMC1,使用相同的地址线xm2ADDR[13:0],串联使用数据线xm2DATA[31:0],数据位宽32位;

	/* DMC0 */
	DMC0_PHYCONTROL0 = 0x00101000;
	DMC0_PHYCONTROL0 = 0x00101002;			/* DLL on */
	DMC0_PHYCONTROL1 = 0x00000086;
	DMC0_PHYCONTROL0 = 0x00101003;			/* DLL start */

	while ((DMC0_PHYSTATUS & 0x7) != 0x7);	/* wait DLL locked */

	DMC0_CONCONTROL = 0x0FFF2350;			/* Auto Refresh Counter should be off */
	DMC0_MEMCONTROL = 0x00202430;			/* Dynamic power down should be off */
	DMC0_MEMCONFIG0 = 0x20E01323;

	DMC0_PRECHCONFIG = 0xFF000000;
	DMC0_PWRDNCONFIG = 0xFFFF00FF;

	DMC0_TIMINGAREF = 0x00000618;			/* 7.8us * 200MHz = 1560 = 0x618  */
	DMC0_TIMINGROW = 0x19233309;
	DMC0_TIMINGDATA = 0x23240204;
	DMC0_TIMINGPOWER = 0x09C80232;

	DMC0_DIRECTCMD = 0x07000000;			/* NOP */
	DMC0_DIRECTCMD = 0x01000000;			/* PALL */
	DMC0_DIRECTCMD = 0x00020000;			/* EMRS2 */
	DMC0_DIRECTCMD = 0x00030000;			/* EMRS3 */
	DMC0_DIRECTCMD = 0x00010400;			/* EMRS enable DLL */
	DMC0_DIRECTCMD = 0x00000542;			/* DLL reset */
	DMC0_DIRECTCMD = 0x01000000; 			/* PALL */
	DMC0_DIRECTCMD = 0x05000000;			/* auto refresh */
	DMC0_DIRECTCMD = 0x05000000;			/* auto refresh */
	DMC0_DIRECTCMD = 0x00000442;			/* DLL unreset */
	DMC0_DIRECTCMD = 0x00010780;			/* OCD default */
	DMC0_DIRECTCMD = 0x00010400;			/* OCD exit */

	DMC0_CONCONTROL = 0x0FF02030;			/* auto refresh on */
	DMC0_PWRDNCONFIG = 0xFFFF00FF;
	DMC0_MEMCONTROL = 0x00202400;</span>


K4T1G084QQ芯片手册得知该芯片具有8个BANK,需要3根BANK选择线,具有14根地址线(其中14跟行地址和10根列地址复用)。每个芯片的存储容量为128M,每个芯片内部的BANK的存储容量为16MB(地址位宽为24, 2^24 = 16M)。地址线配置如下图1所示。


图1 K4T1G084QQ地址线配置

关键寄存器配置说明(DMC0和DMC1的配置完全一样,除了AXI BASE Address)。

分析第一条语句 DMC0_PHYCONTROL0 = 0x00101000;

查询手册S5PV210_UM_REV1.1.pdf,见图2。0x00101000的每一位都是根据手册来确定的。


图2 PHY Control0 Register

第1行到第15行的语句都是简单地通过查询手册得到的,下面这一段代码是根据自己的时钟配置情况计算得到的。

DMC0_TIMINGAREF = 0x00000618;/* 7.8us * 200MHz = 1560 = 0x618  */
DMC0_TIMINGROW = 0x19233309;
DMC0_TIMINGDATA = 0x23240204;
DMC0_TIMINGPOWER = 0x09C80232;


拿这行分析 DMC0_TIMINGAREF = 0x00000618;
查询手册S5PV210_UM_REV1.1.pdf,见图2。
因为配置的T(mclk)=1/MSYS=1/200MHZ=5ns,7.8us * 200MHz = 1560 = 0x618


图3 TIMINGRAEF配置

分析此行DMC0_TIMINGROW = 0x19233309;

查询手册S5PV210_UM_REV1.1.pdf,见图4查询K4T1G084QQ-HCE6.pdf,见图5至图7。计算过程:t_rfc = tRFC/T(mclk) = 127.5/5 = 25.5=0x19,其他参数的计算同t_rfc。


图4 TIMINGROW配置



图5 K4T1G044QQ-HC(L)E6分类



图6 DDR2-667 5-5-5的时间参数1



图7 DDR2-667 5-5-5的时间参数2

接着分析ddr的直接命令。

如 DMC0_DIRECTCMD = 0x07000000;/* NOP */

将0x07000000赋值给DMC0_DIRECTCMD,DDR自动执行空指令,没有经过CPU执行,所以叫DDR的直接命令。

DDR的直接命令表见图8。


图8 DDR的DIRECTCMD

至此,DDR的配置全部完成。

参考文献

qq:809205580.嵌入式Linux学习笔记(基于S5PV210、TQ210)



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值