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板中相应引脚走线阻抗设置。有些引脚引

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值