SDRAM——X210的SDRAM的初始化

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

参考博客:s5pv210——初始化SDRAM - biaohc - 博客园

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

一、SDRAM的简介

1、SDRAM的含义

SDRAM是Syncronized Dynamic Ramdam Access Memory的缩写,中文意思是“同步动态随机存储器”。我们常说的DDR,严格来说应该叫DDR 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芯片工作参数。

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓开发.四大组件.activity.1

安卓开发.四大组件.activity.1 转载于:https://www.cnblogs.com/motadou/p/3534056.html

单独一台机器测试Open×××加密隧道的问题和解决

其实这篇文章和Open的关系倒不是很大,只是通过Open测试时暴露出的问题。这篇文章里面倒是包含了很多IP路由以及conntrack的细节内容。 有时候,为了节省机器,我希望在一台设备上模拟多个设备,当然,使用网络命名空…

SCRT中只换行不回车的问题(阶梯)

转载源:SecureCRT中只换行不回车的问题 - 知乎 在SecureCRT中有时会遇到由于Windows的换行和Unix的换行控制字符不同的问题(\r\n-\n),导致显示如下图所示的“阶梯”,又不想到源码中一个个改控制字符,此时可…

Android Training精要(六)如何防止Bitmap对象出现OOM

1.使用AsyncTask異步加載bitmap圖片避免OOM: class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> { private final WeakReference<ImageView> imageViewReference; private int data 0; public BitmapWorkerTask(ImageView imageView) { // Use a …

iOS会议和组织

全世界有许多iOS会议和组织&#xff0c;如果你没有机会去参加&#xff0c;知道他们的存在和向他们学习对你也是有益的。事实上&#xff0c;他们中有些提供免费的幻灯片、视频&#xff0c;有用资料等&#xff0c;所以你不能够忽视他们。 有一些会议的主题并不仅仅关于iOS的&…

开发板——X210开发板的软开关(供电置锁)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、前言 本章节在裸机课程的SD卡启动部分。 本文讲述如何设置开发板&#xff0c;使得一按下电源键程序运行后即可松手不会断电&#xff0c;即供电置锁。 二、软开关的简介 电路设计一般使用拨码开…

国产Linux软件

为什么80%的码农都做不了架构师&#xff1f;>>> 本页面收集支持deepin/Linux的国产软件&#xff0c;对于每款软件以“日出东方-发行时间较短&#xff1b;正当壮年-时间较长且稳定&#xff1b;每况愈下-你们懂的”评价 软件版本时间评价有道词典 Linux版1.02015-03…

QGLViewer 编译安装步骤

由于工作学习的需要&#xff0c;要用opengl绘制显示些模型动画&#xff0c;原来用的是Qt做UI&#xff0c;直接调用的是QGLWidget类&#xff0c;但这个只是提供了基本的框架&#xff0c;很多交互操作还需添加代码完成&#xff0c;自己偷懒也觉得繁琐&#xff0c;就借用了开源的工…

触摸屏——S5PV210的触摸屏的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有其侵权请告知删除。 一、输入类设备简介 1、input/output 输入输出&#xff0c;是计算机系统中的一个概念。计算机可以看作数据处理器。计算机的主要功能就是从外部获取数据&#xff0c;然后进行计算加工得到输出数据…

搭建nginx流媒体服务器(支持HLS)

环境搭建 &#xff08;一&#xff09;下载源代码 nginx&#xff0c;地址&#xff1a;http://nginx.org/可以选择需要的版本下载 nginx_mod_h264_streaming-2.2.7.tar.gz &#xff0c;支持MP4流&#xff0c;具体的说明在下面的这个网页 http://h264.code-shop.com/trac/wiki/Mod…

Spring中的动态代理

动态代理&#xff1a;指的就是通过一个代理对象来创建需要的业务对象&#xff0c;然后在这个代理对象中统一进行各种需求的处理。 学习完Spring后会发现&#xff0c;Spring中的AOP&#xff08;面向方面编程&#xff1a;Aspect Oriented Programming&#xff09;是个很重要的知识…

LED——S5PV210的LED的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、LED物理特性介绍 LED本身有2个接线点&#xff0c;一个是LED的正极&#xff0c;一个是LED的负极。 LED的功能就是亮或者不亮&#xff0c;只需要给LED的正极加电压即可点亮LED&#xff0c;去掉电压…

“.公司”域名注册总量TOP15:新网问鼎 万网居亚

IDC评述网&#xff08;idcps.com&#xff09;01月16日报道&#xff1a;根据ntldstats.com发布的最新数据显示&#xff0c;截止至01月15日17:00&#xff0c;在“.公司”域名注册总量大战中&#xff0c;新网打败众多国内外域名服务商&#xff0c;成为新晋霸主&#xff0c;其“.公…

Prepare for Mac App Store Submission--为提交到Mac 应用商店做准备

返回 Mac App Store Prepare for Mac App Store Submission 提交到Mac 应用商店之前的准备 Most of your time is spent on coding tasks, but to develop for the Mac App Store, you need to perform a number of administrative tasks, using Xcode and other tools. You’l…

ARM通识——关于ARM的一些认识

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 注意&#xff0c;由于文章的撰写时间过早&#xff0c;很多内容没有更新&#xff0c;这里仅当一个通识了解。 1、ARM发展的里程碑 ARM的前身为艾康电脑&#xff08;Acorn&#xff09;&#xff0c;于…

使用RMAN备份数据库

1.1使用控制文件备份全库 1.1.1配置备份路径 1.1.2 RMAN备份全库 1.2使用catalog数据库备份全库 1.2.1配置到远程数据库的TNS 1.2.2创建表空间及设置用户 1.2.3进入目录数据库并注册 1.2.4 CATALOG方式备份全库 转载于:https://www.cnblogs.com/myrunning/p/4231057.html

PL/SQL Developer连接Oracle 11g在Win8 64位系统下乱码

PL/SQL Developer在64位系统上连接Oracle&#xff0c;需要安装32位Oracle client客户端&#xff0c;使用后&#xff0c;发现操作数据库出现乱码的情况。经过查找资料&#xff0c;解决此问题&#xff0c;方法如下&#xff1a; 需要在系统的环境变量中&#xff0c;加入以下变量&a…

命令模式--command模式

首先来一个命令的接口&#xff1a; package mode.command;/*** * 定义一个命令接口&#xff0c;其中有一个抽象的执行方法&#xff0c;参数人命令接收器* * */ public interface Command {public void execute(CommandReceiver commandReceiver); }定义一个命令接受者的接口&am…

uploadify scriptData参数无法传参的问题

最近需要使用到uploadify&#xff0c;需要向后台传递参数&#xff0c;使用script最多只能够传递一个参数&#xff0c;当然也可以通过合并参数然后再在服务器段拆分参数的方法来传递多个参数&#xff0c;而uploadify插件提供的scriptData却怎么都无法使用&#xff0c;网上查阅了…

安装iproute2

yum install -y gcc bison flex#tar -xzf iproute2-3.17.0.tar.gz#cd iproute2-3.17.0#sed -i /^TARGETS/sarpdg misc/Makefile#make SBINDIR/sbin#make SBINDIR/sbin install参考资料&#xff1a;http://blog.sina.com.cn/s/blog_5f5716580100rvop.htmlhttps://www.kernel.or…