在拿到电路板之前,首先需要硬件工程师确认:
1. 供电、复位、时钟没有问题;
2. usb-otg电路没问题;
3. 启动配置为下载模式;
4. 插入otg线连电脑和开发板,win10设备管理器列表中“人体学输入设备”下会多出一个“符合HID标准的供应商定义设备”。
整个电路板第一个要搞定的外设就是内存,需要告诉内存控制器电路上使用的内存是多少位宽的、用到几个片选、时钟频率、行列地址范围、信号完整性参数等等,这些信息看看芯片datasheet,看看原理图基本上都能获得,但是要把这些复杂的参数配到内存控制器的哪些寄存器的哪几个bit位,对着imx6的datasheet去找的话,会很费时间,而且容易出错。
Nxp论坛里面有贴提供了配置内存的工具(https://community.nxp.com/docs/DOC-94917),根据具体的i.MX芯片系列下载对应的DDR Aid excel文件,帖子里还有一个如何使用这个DDR-Aid工具的说明文档《DRAM接口高阶应用指导》,也可以下载下来看看。

上图为电路板上对应的内存配置,《DRAM接口高阶应用指导》里面对参数如何配置有比较详细的说明,这里只做简要说明。
“Device Information”栏是单颗DDR的参数,这些数据都能从DDR芯片的数据手册中找到。“System Infomation”栏配置的是DDR的组合方式,如上图表示使用了4颗8bits总线宽度的DDR颗粒拼接成64bits位宽的内存结构,4片DDR共用同一个片选。“SI Configuration”配置的是信号完整性相关的的参数,一些重要的DDR信号线对应的阻抗,这个基本上每次用的时候都是用的工具里面默认的参数,没动过,强迫症患者可以和layout沟通下,看怎么填。
配置好后,Ctrl+S保存下。然后在excel的最下面的导航栏中,切换到RealView.inc页面,在该页面可以看到根据上一页面配置生成的内存控制器的寄存器配置,等号左边是对应的寄存器地址,右边对应的是寄存器的设定值。

点击上图红色圈出的A栏,然后Ctrl+A全选,然后Ctrl+C拷贝,新建一个文件,取名mx6q-xr5100.inc, 粘贴到该文件中。这个文件当中有几个寄存器的参数是待校准的,如下图所示的12个寄存器。下一步就是要使用另外一个工具DDR-Stress-Test(https://community.nxp.com/docs/DOC-105652)来获得这一组参数。

i.MX6芯片内部有一段固化的代码叫boot-rom,同时也有片内内存sram,boot-rom的代码在上电的时候会在sram内执行,由于资源有限,所以代码的功能也很简单,会从硬件上读启动配置,判定是从SD、EMMC、NAND启动还是工作于串行下载模式,串行下载模式会在两个地方用到,一个下载烧录系统到SD、EMMC或者NAND的时候,另一个就是现在做DDR-Stress-Test的时候。
DDR-Stress-Test会将mx6q-xr5100.inc对应的寄存器配置通过usb口传输到i.MX6,sram中跑的boot-rom代码会根据配置数据配置内存控制器对应的寄存器,只有在配置好内存控制寄存器的前提下,内存才能正常访问。
但是前面又说有12组寄存器参数是不对的,这些参数不会影响到内存能不能工作,但是会影响到能否正常或者稳定的工作。这几个寄存器具体是干啥的我没研究,但是实际的作用可能是为某几根信号线的传输加一些时间上的延时,已补偿DDR走线不等长或者由于阻抗不匹配导致信号之间不对齐的问题。
DDR-Stress-Test工具校准参数的时候,会持续修改这一组待校准的参数,并以写入、读回内存同一地址的数据是否相同作为评判当前的校准参数是否可靠。
此处应该有图
如上图,载入im6q-xr5100.inc寄存器配置文件,配置好CPU型号、内存大小,连接处于串行下载模式的电路板,点击“Download”开始下载,下载的就是前面说的从.inc文件获取的内存控制寄存器的设定值。(屏蔽inc中的一行?????????/)
下载成功后,此刻内存已经活力四射,等待下一步的校准开始,按照上图配置好DDR频率,i.MX6q最高跑528MHz(DDR-Aid里面可选的最高频率),这里就配置最高,有的芯片如i.MX6dl只能跑400MHz,那就配置400。配置好后点击“calibration”按钮开始校准并等待校准结束。校准结束后点击“save result”保存校准结果到文件。
为了验证这组参数配置下的DDR是否能够稳定可靠的工作,需要做进一步工作,就是Stress Test压力测试,如下图配置压力测试参数,如果是i.MX6dl可以设定起始和终止频率都为400MHz。勾选“Over Night Test”就会一直不停的测试。
此处应该有图
压力测试时候,会反复读写内存不同地址,压力测试时长至少应该以小时为单位,特别是长时间不宕机的产品,应该已天为单位就行压力测试。如果DDR没有抗住压力测试,可以重新做校准,获取新的校准参数,然后继续做压力测试,对参数的可靠性进行验证。如果重复多次都失败,则要考虑是否硬件上有问题了,如果硬件时序上余量不足,再怎么校准也无济于事。
压力测试一定要重视,否则得出的参数不稳定可靠的话,后续的产品在使用过程中有可能出现死机、重启等异常现象。当然首先是要硬件过关,谈校准才有意义。
压力测试ok后,把之前保存的校准结果文件末尾的12个数据拷贝到im6q-xr5100.inc中对应的位置,如下图所示:
此处应该有图
此处应该有图
至此,我们生成成了完整的最终版内存配置参数文件imx6-xr5100.inc,这个文件在下一篇u-boot移植裁剪中会用到。
参数校准小技巧:
1. 做完一段时间压力测试后,芯片温度比较高,可以在这个时候回头重新做参数校准,获得的参数应该会比低温的时候做的参数要好些,简而言之就是最好在最恶劣的环境下做参数校准,获得的参数可靠性会更高;
2. 样板、样机、量产阶段都可以针对性的重新做参数校准,已获得最佳运行参数。甚至还可以不同批次的内存芯片或者ARM都做一个版本的内存参数,保证参数最近,当然这样做软件维护起来也会很麻烦,版本太多,而我之前做的一个项目由于系统容易重启,当时就这么干了!!
可能遇到的问题:
1. usb-otg模式id脚是拉低还是拉高?
2. ddr测试跑不起来
供电 硬件问题
3. fly-by
网友评论