uboot源码学习(9)DDR初始化程序分析
2022/1/15 1:05:14
本文主要是介绍uboot源码学习(9)DDR初始化程序分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文分析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源码学习(9)DDR初始化程序分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南