IMX6Q的DDR3初始化配置

处理器:IMX6Q5EYM10ADDDR3时钟频率400MHz、528MHz

DDR3:NT5CB128M16BP-CG16位667MHz时钟频率1333MHz数据频率

相比于Exynos4412的内存,飞思卡尔IMX6的内存比较麻烦,耗费了比较多的时间调试才稳定,当然这也是因为我无缘无故改掉了内存拓扑结构和换了内存芯片型号的原因。

飞思卡尔的方案里提供了两种很合适的拓扑方案,这两种方案适用于四片内存芯片的情况。第一种方案自然是采用fly-by拓扑,fly-by是DDR3的推荐使用拓扑结构,使用fly-by拓扑需要注意内存芯片是否有Write Leveling功能,没有该功能的芯片不能使用fly-by拓扑。虽然fly-by拓扑处理高频信号效果 优于星型拓扑,但需要在八层以上的板子上使用,才能很好的体现出这种拓扑的优势,对于一般的六层甚至四层板,可以考虑方案二。第二种方案采用星型拓扑,为了避免分支走线过长引起的分支信号反射和容性干扰,将四块内存芯片分为两组分别放在TOP层和BOTTOM层,这样降低分支长度提高星型拓扑的应用范围。

硬件设计参照天嵌的E9开发板设计,令人遗憾的是设计之初没有找到飞思卡尔提供的设计手册,也没有完全按照E9的方案设计,在6层板上使用了菊花链的拓扑结构,可想而知地址线的走线能有多长,达到了4个inch的长度,硬件设计上就存在比较大的缺陷,所幸的是时钟信号与数据信号的长度差并没有太大,于是寄希望于DDR3地址线自动时间补偿和逆天的Write Leveling补上硬件设计上的漏洞。。

如果参数配置不对系统运行不稳定,甚至会无法启动,下面介绍的内容均是根据我个人在调试中遇到的问题得出的经验,仅供参考交流。

IMX6Q的内存初始化程序放在uboot的board/freescale/mx6q_sabresd/flash_header.S文件中,E9提供的源码中没有这个文件,只有一个编译结果flash_header.module,可以通过反汇编指令:arm-linux-objdump -S -EB flash_header.module,获取该模块中的内容并自己写一个flash_header.S文件。

flash_header.S文件起始部分配置CPU内存引脚电气特性,如IO驱动电阻的值。驱动电阻值的大小需要根据PCB板中相应引脚走线阻抗设置。有些引脚引出来之后在TOP层或BOTTOM层走线,表层走线为微带线,微带线的阻抗一般是75ohm,对于这些引脚其驱动电阻值应设置在80ohm;有些引脚通过过孔直接引导内部走线层,带状线的阻抗一般为50ohm,这些引脚的驱动电阻值应设置在48ohm。IO驱动电阻的值必须仔细认真设置,特别是数据信号线和时钟信号线,因为它俩的频率最高。设置好IO驱动电阻值使信号在CPU端具有良好的阻抗特性,保证信号有良好的电气特性和质量,这是后期一切配置的基础条件,即时时序在匹配信号完整性受到干扰,内存仍然不能稳定运行。

IMX6Q的DDR控制和时序寄存器主要是0x021b0000~0x021b0040(0x021b4000~0x021b4040)。控制寄存器如MMDC1_MDCTL(0x021b0000)比较直观,设置起来不难,这里主要讲时序配置方法和一些重要时序参数。由于处理器端时钟频率(528MHz)和DDR3运行时钟频率(667MHz)不同,处理器时序配置不能简单按照528MHz或667MHz的标准配置,也就是不能照抄DDR的数据手册进行配置。外频与内频不一致时,通常以频率主动方为设置单位,根据被动方的时钟要求设置主动方周期数。内存时序参数时以IMX6Q内存时钟周期1.894ns为基本单位,如667MHz的DDR3要求列地址选通脉冲时延CL=13.125ns,则MMDC0_MDCFG0(0x021b000c)寄存器的tCL设置为13.125ns/1.894ns=7cycles(MMDC0_MDCFG0[3:0]=4),这里如果简单粗暴直接使用DDR3时序参数CL=9cycles是不正确的。其他时序参数也要用类似方法计算获得。时序配置方面IMX6Q提供了时序计算工具I.MX6DQSDL
DDR3 Script Aid V0.10,在该excel表格的Register Configuration项填好相应参数,会自动生成IMX6Q寄存器的配置,简化时序计算的过程。

虽然飞思卡尔提供了时序配置计算工具,但有几个重要的时序参数需要注意。在处理器端配置处理器寄存器中tCL=tRCD=tRP=7cycles,那么通过0x021b001c寄存器去配置内存芯片寄存器的时候,要求内存tCL=7cycles与处理器参数相同,即MR0[6:4,2]=6。处理器时序参数与内存时序参数不一致的时候,处理器将无法启动。Write Leveling、DQS
Gating和数据读写校准这几个参数会影响系统稳定性,不合适的参数使系统启动的时候就出现内存错误,飞思卡尔提供DDR_Stress_Tester工具用于获取这些校准参数,但个人经验觉得这个工具得到的结果并不理想,沿用原本的参数会更稳定一些。

时间: 2024-07-31 14:46:15

IMX6Q的DDR3初始化配置的相关文章

ddr3调试经验分享(一)——KC705上的ddr3初始化不成功

最近在玩KC705上的ddr3.开始信誓旦旦的说要自己写controller. 于是开始读datasheet,在镁光的官网上弄了一个ddr3 的module的仿真模型,仿真读写有效的之后就屁颠屁颠的跑的群里问大家这个clock怎么匹配.然后才知道有PHY这个东西,不用PHY就玩ddr,秀逗了! 下面的过程以及结论也许对于有些人也有些秀逗,但是对于我这个初玩ddr的人来说,它还真的卡了我一个星期了. 先用MIG 玩通ddr3,再想着怎么玩MIG生成的PHY吧. 一,按照XTP196上的步骤step

Jenkins安装和初始化配置

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. 所以安装Jenkins包含安装相应的jdk环境和Jenkins工具. 1.下载Jenkins最新版本 到官网https://jenkins.io/download/下载相应的版本,本次安装选择的是最新的2.62版本,选择适用于fedora系统 2.下载JDK8最新版本 到官网http://www.oracle.com/technetwork/j

zabbix docker - 安装和初始化配置

zabbix docker - 安装和初始化配置 安装zabbix server docker-mysql版本 zabbix server支持不同的数据库(详见zabbix的docker hub),这里选择mysql作为底层数据库, $ docker pull zabbix/zabbix-server-mysql 安装mysql docker $ docker pull mysql 设置和启动mysql数据库 $ docker run --name zabbix -v /var/docker_d

Linux - CentOS6.5服务器搭建与初始化配置详解(下)

传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 输入root和之前配置的密码 第一步先把防火墙给光了 iptables -F  命令用于清空规则 这里插一条命令(这个命令我忘记打上去了) /etc/init.d/iptables save  用于保存当前被清空的规则 chkconfig  iptables  stop  开机不允许启动防火墙 c

用MacBook对交换机进行初始化配置

用MacBook对交换机进行初始化配置 小王是一家系统集成商的设备安装工程师,日常工作经常要安装.调试各种工控机和交换机,平日里陪伴他的一台古董级的IBM T23笔记本,升级过硬件可还是又沉又慢,安装得是WindowsXP系统.留着它的原因只有一个有比较全面的接口,一直都没有舍得淘汰. 要是遇上编写文档方案查资料等事情,他还得换一台笔记本来操作. 像小王这种经常要跟串口通讯打交道的工程师最希望笔记本自带串口,可由于COM口通讯速度慢体积大等原因,目前的笔记本几乎都取消了这个接口.一些工程师只有配

OV7725初始化配置

所有的结局都是好的,不好,是因为你还有坚持到最好. OV7725摄像头的初始化配置,需要SCCB总线即IIC接口配置.先发送配置数据到OV7725中,然后通过随机读取对应地址的数据来验证数据是否写进去,基本思路是这样. 第一次测试读数据,是地址0X1C,读出来的数据是0X45,理论上应该是0X7F.可想而知,我的读操作有问题,如下图1所示. 图1 为什么会这样呢?多次调试后,还是没发现问题,后来和群友交流,发现问题了.经过验证后,正确结果如图2所示. 图2 分析问题: bit_cnt=='d9对

SCCM2012 R2实战系列之四:初始化配置

在之前的文章中,我们已经完成了SCCM 2012 R2 独立主站点的部署.为了客户端代理软件的顺利安装和OSD操作系统的分发,我们需要配置组策略及DHCP服务.在本系列的第四部分,跟大家一起分享下如何去实现SCCM的初始化配置. 1. 针对计算机OU的重定向 默认情况下,所有加域的计算机会自动存放到名为"computer"的容器中,为了方便对计算机的管理,我们需要重定向,让加域的计算机自动存放在名为"CMP"的OU中. 打开Active Directory用户和计算

开源框架ImageLoader初始化配置

android图片异步加载开源框架Android-Universal-Image-Loader 是一个被广泛应用的框架,Github上的下载路径为:https://github.com/nostra13/Android-Universal-Image-Loader ,用这个框架来帮助我们实现网络图片下载,不用担心OOM等问题,使用方便,我们简单讲下其它初始化配置. 一般而言我们是要全局使用ImageLoader,所以我们可以选择在Application中初始化设置该类.初始化ImageLoade

虚拟化桌面初始化配置处理

1.   以下进行用户首次登录软件第一次设置(初始化设置)制作工作: 使用到Defprof.exe工具,将其拷贝到C:\Temp\Tools目录下: 1)新建一个本地管理员账号defprof用来制作软件初始化配置默认文件, 2)使用defporf登录系统进行软件安装: 然后运行Win7模板里各软件,将需要做的初始化设置.提示都操作一遍,让其记录到defprof的用户配置文件里. 例如输入法设置,设置成只保留搜狗拼音.五笔.qq拼音.qq五笔等: 3)切换回另一管理员帐户ctxadmin(本地管理