DDR2初始化代码分析[s5pv210, K4T1G164QQ]

本文详细介绍了DDR2内存初始化的过程,包括设置PHY控制、内存控制、时序参数等步骤,并提供了具体的寄存器配置,确保DDR2颗粒正确工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下流程基本为简单翻译(原文参考s5pv210的数据手册1.2.1.3章节)
1. DMC及DDR2颗粒上电, 且电压稳定
2. DMC保持CKE为低电平
3. SOC提供时钟(XDDR2SEL保持高电平以保持CKE为低)
4. 根据实际工作时钟频率设置phyControl0.ctrl_start_point和PhyControl0.ctrl_inc
ldr r0, =APB_DMC_0_BASE @ 0xF000_0000
ldr r1, =0x00101000 @ ctrl_start_point: bit[15:8], ctrl_inc: bit[23:16], 按手册建议,这两位都设置为0x10
str r1, [r0, #DMC_PHYCONTROL0] @ 0xF000_0018
5. 设置PhyControl0.ctrl_dll_on为”1”, 以使能PHY DLL
ldr r1, =0x00101002 @ctrl_dll_on: bit[1]
str r1, [r0, #DMC_PHYCONTROL0] @ 0xF000_0018
6. DQS Cleaning: 根据实际工作时钟频率和tAC设置PhyControl1.ctrl_shiftc和PhyControl1.ctrl_offsetc (可以和第7步互换顺序)
ldr r1, =0x00000086 @ ctrl_shiftc: bit[2:0], 手册建议设置为6 (DDR2); ctrl_offsetc: bit[14:8], 这里设置为”0”, ctrl_ref: bit[7:4], 默认值为0x4; 所以, 这里应该设置为0x00000046系统也能工作, 设置为”86”可能是原代码作者的错误
str r1, [r0, #DMC_PHYCONTROL1] @ 0xF000_001C
7. 置位PhyControl0.ctrl_start以启动DLL
ldr r1, =0x00101003 @ ctrl_start: bit[0]
str r1, [r0, #DMC_PHYCONTROL0] @ 0xF000_0018
8. 设置ConControl, 注意此时需要保证auto refresh counter off
ldr r1, =0x0FFF2010 @ default time out cycles: FFF; Read data fetch cycles: 2 (CL后再过2个周期latch数据), disable adaptive QoS, disable DQ swap, disable PHY driving (bi-directional pin拉低以省电, enable是不是更好?), disable read cycle gap for 2 different chips (应该是enable),auto refresh counter off, enable out of order scheduling, revise后的设置为(待测试):0x0FFF23D0
str r1, [r0, #DMC_CONCONTROL] @ 0xF000_0000
9. 设置MemControl, 所有power down mode要关掉
ldr r1, =0x00202400 @ MemControl BL=4, 2 chip, 位宽x32 (是指通道位宽), DDR2 type, no additional latency for PALL, disable dynamic self refresh, disable timeout p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值