内存与重定位——X210的SDRAM的初始化(内存的初始化)

以下内容源于朱友鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考博客

s5pv210——初始化SDRAM - biaohc - 博客园

 

一、SDRAM的简介

1、SDRAM的含义

SDRAM是Syncronized Dynamic Ramdam Access Memory的缩写,中文意思是“同步动态随机存储器”。我们常说的DDR,严格来说应该叫DDR SDRAM,它是SDRAM的升级版。

这里说的SDRAM,简单点理解,就是“内存”。

2、SDRAM的特点

(1)容量大、价格低、掉电易失性、随机读写、总线式访问(SDRAM通过地址总线和数据总线接口与SoC通信)。

(2)SDRAM 属于动态内存,需要初始化才能使用;而静态内存 SRAM开机上电后就可以直接运行,不需要初始化。P.s.NorFlash和NandFlash类似于SRAM和SDRAM的区别。

3、SDRAM的数据手册

SDRAM在系统中属于SoC外接设备,即外部外设。随着半导体技术发展,很多东西都逐渐集成到SoC内部,但仍在外部的有Flash、SDRAM、网卡芯片、音频编码模块等等。现在有一些高集成度的芯片也试图把这几个集成进去,做成真正的单芯片解决方案。

SDRAM很标准化,做SDRAM的厂商并不多,比较著名的公司有三星与金士顿。

三星官方的数据手册(指用户手册)没有芯片相关的参数设置信息,都是芯片选型与外观封装方面的信息。其中选型是给产品经理来看的,封装和电压等信息是给硬件工程师看的。我们软件工程师最关注的是工作参数信息,但是数据手册没有。

开发板原理图上使用的SDRAM是K4T1G164QQ。其中K表示三星产品,4表示是DRAM,T表示产品号码,1G表示容量(这里是指1Gb,也就是128MB。X210开发板一共用了4片相同的内存,所以总容量是512MB),16表示单芯片是16位宽的,4表示是4bank。

二、S5PV210的SDRAM介绍

1、原理图中SDRAM的相关部分

(1)X210核心板原理图

X210核心板原理图可知,S5PV210共有2个内存端口,即DRAM0(对应原理图的内存port1)和DRAM1(对应原理图的内存port2)。

(2)X210开发板的内存地址范围

X210开发板最多支持1.5GB的内存。

DRAM0的内存地址范围:0x20000000~0x3FFFFFFF(512MB),对应引脚是Xm1xxxx。

DRAM1的内存地址范围:0x40000000~0x7FFFFFFF(1GB),对应引脚是Xm2xxxx。

实际开发板不需要这么大,比如X210开发板只有512MB内存,在DRAM0端口分布256MB,在DRAM1端口分布256MB。即X210开发板内存的合法地址是0x20000000~0x2FFFFFFF、0x40000000~0x4FFFFFFF。当DDR初始化完成之后,这些地址都可以使用;如果不慎使用不合法地址比0x30004000,则死路一条。

这些地址是可以重新设置的,见博客移植三星官方的uboot到x210开发板的第4部分。

(3)每个DDR端口都由3类总线构成

每个DDR端口都由3类总线构成,即地址总线、控制总线、数据总线。

地址总线是指Xmn_ADDR0~XMnADDR13这14根地址总线。

数据总线是指Xmn_DATA0~XMnDATA31这32根数据线,这说明我们用的是32位的内存。

(4)4片内存芯片

从原理图可以看出整个SDRAM,由4片16位内存芯片组成,每片内存芯片128MB,其中有两片内存芯片并联成32位内存,共256MB内存连接在DMC0,另两个内存芯片也并联成32位内存,共256MB连接在DMC1。

2、数据手册中SDRAM相关部分

下图来自数据手册《NT5TU64M16GG-DDR2-1G-G-R18-Consumer》第10页。

这个框图是128Mb×8结构的,8指的是8bank,每bank128Mbit(16MB),则共128MB。

每个bank内部通过row address(14位)*  column address(10位)的方式来综合寻址,则寻址的范围是:2的14次方*2的10次方 = 2的24次方,对应16MB(128Mbit)内存。

210的DDR端口信号中有BA0~BA2,接在内存芯片的BA0~BA2上,这些引脚就是用来选择bank的。 

三、汇编初始化SDRAM代码详解

1、SDRAM初始化代码

SDRAM的初始化工作,是由汇编函数sdram_asm_init完成的,该函数在sdram_init.S文件中。

该文件是参考九鼎官方的uboot与九鼎裸机教程中对DDR的初始化内容写的。

注意汇编函数的最后,需要使用返回指令“ mov pc, lr ”。

2、27步初始化DDR

DDR的初始化,与SoC中的DDR控制器有关,也与具体的DDR芯片有关,也与开发板设计时DDR的连接方式有关。

X210开发板的内存连接方式是在DRAM0上连接256MB,在DRAM1上连接了256MB,因此初始化DRAM时分为2部分,第一部分初始化DRAM0,第二部分初始化DRAM1。

S5PV210的DDR初始化步骤,在用户数据手册第599页,可见初始化DDR共需27个步骤。

3、设置IO端口驱动强度

DDR芯片和S5PV210芯片是通过一些引脚连接的。DDR芯片工作时需要一定的驱动信号,这个驱动信号需要一定的电平水平才能抗干扰,所以需要设置这些引脚的驱动能力,使DDR正常工作。DRAM控制器对应的引脚设置为驱动强度2X。

4、DRAM port 时钟设置

代码的第128行到154行,对应27步中的第2到第4步。

主要是开启DLL(目的是为了倍频,因为内存的读取时钟由SoC提供,但频率太低,而内存的读写是很快的),然后等待锁存。

5、DMC0_MEMCONTROL

burst length=4,1chip,……对应值是0x00202400。

6、DMC0_MEMCONFIG_0 \ DMC0_MEMCONFIG_1

它们分别是DRAM0通道中memory chip0、memory chip1的参数设置寄存器。

三星设置DRAM0通道,允许接2片256MB的内存,分别叫memory chip0和memory chip1,分别用这两个寄存器来设置它的参数。按照三星的设计,chip0的地址应该是0x20000000到0x2FFFFFFF,然后chip1的地址应该是0x30000000~0x3FFFFFFF。但是X210开发板实际在DRAM0端口只接了256MB的内存,所以只用了chip0,没有使用chip1。按照这个推论,DMC0_MEMCONFIG_0有用,而DMC0_MEMCONFIG_1无用,所以可以直接给它默认值。

7、DMC_DIRECTCMD

这个寄存器是一个命令寄存器,210通过向这个寄存器写值来向DDR芯片发送命令,这些命令应该都是用来配置DDR芯片工作参数。

8、总结

DDR配置比较复杂与细致,需要按照DDR控制器的时序要求来做,其中很多参数要结合DDR芯片本身的参数来定,还有些参数是时序参数,要去详细计算。我们对DDR初始化的态度就是学会这种思路和方法,结合文档和代码能看懂,会算一些常见的参数即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天糊土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值