ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

uboot源码学习(9)DDR初始化程序分析

2022-01-14 23:30:35  阅读:351  来源: 互联网

标签:uboot r1 ctrl DDR DLL ldr 源码 str r0


本文分析S5PV210板的DDR初始化程序。
一、IO部分配置。从下图管脚定义表来看,Xm1管脚只有单个功能Func0,所以不用配置管脚复用功能。
在这里插入图片描述
memory.S文件,20行-40行

mem_init:
	//1、设置DMC0 Drive Strength (Setting 2X)
	ldr r0,=ELFIN_GPIO_BASE
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_0DRV_SR_OFFSET]
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_1DRV_SR_OFFSET]
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_2DRV_SR_OFFSET]
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_3DRV_SR_OFFSET]
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_4DRV_SR_OFFSET]
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_5DRV_SR_OFFSET]
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_6DRV_SR_OFFSET]
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_7DRV_SR_OFFSET]
	ldr r1,0x0000AAAA
	str r1,[r0,#MP1_8DRV_SR_OFFSET]

其中,宏定义都在s5pv210.h文件中:

#defineELFIN_GPIO_BASE 0xE020_0000
#defineELFIN_GPIO_BASE 0x3CC

将DMC0的驱动能力设置为2X。

二、从此开始,按照手册的27步开始配置:
**step1:**To provide stable power for controller and memory device, the controller must assert and hold CKE to a logic high level. Then apply stable clock. Note: XDDR2SEL should be Low level to hold CKE to high.
为了提供稳定的电源给控制器和内存设备,控制器必须确保CKE维持低电平,提供一个稳定的时钟。
在这里插入图片描述
step2:Set the PhyControl0.ctrl_start_point and PhyControl0.ctrl_inc bit-fields to correct value according to clock frequency. Set the PhyControl0.ctrl_dll_on bit-field to ‘1’ to activate the PHY DLL.

此步配置DMC端DLL。

DMC端DLL的作用是将DQS信号相移90°,以消减从DDR数据总线有数据时到数据传送到CPU的延时(rd_fetch)。
在这里插入图片描述
在这里插入图片描述
rd_fetch计算公式如下:
在这里插入图片描述
配置代码:

//2、初始化PHY DLL
ldr r0,=APB_DMC_0_BASE 
//step3:PhyControl0 parameter setting,manual 0x00101000
ldr r1,= 0x00101000
str r1,[r0,#DMC_PYHCONTROL0]
//PhyControl1 parameter setting,LPDDR/LPDDR2 Case
ldr r1,= 0x00000086
str r1,[r0,#DMC_PYHCONTROL1 ]
#define APB_DMC_0_BASE 0xF000000
#define DMC_PYHCONTROL0 0x18
#define DMC_PYHCONTROL1 0x1C

在这里插入图片描述
上图中:ctrl_inc,表示DLL从0到90°相移过程中,每次相移的度数。推荐值为0x10;
ctrl_start_point:表示DLL从0到90°相移过程中,起点位置,推荐值为0x10;
ctrl_dll_on:DLL总开关;此时先配置为0,在后面的步骤中再打开。
ctrl_start:DLL待机开关。先打开ctrl_dll_on,再打开ctrl_start。
ctrl_dfdqs:DQS差分或者单端选择信号;
ctrl_half:DLL低速或告诉选择信号。此处配置为0。
在这里插入图片描述
step3:DQS Cleaning: Set the PhyControl1.ctrl_shiftc and PhyControl1.ctrl_offsetc bit-fields to the correct value according to clock frequency and memory tAC parameters.
在这里插入图片描述
其中,ctrl_shiftc是DQS Cleaning 相移粗调,在DDR2@200MHz时推荐是0x6(T/2)。
ctrl_offsetc是DQS Cleaning相移精调。

DQS Cleaning示意图如下:
在这里插入图片描述
DQS Cleaning就是在DMC中将DQS的信号延时标记出来,如PCB布线、焊点等的延时。

标签:uboot,r1,ctrl,DDR,DLL,ldr,源码,str,r0
来源: https://blog.csdn.net/weixin_44837631/article/details/122501070

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有