适用平台:所有
芯片(包括28系列、29系列、30系列、31系列、32系列、33系列、PX系列、1108A)所有
内核版本。
一、怎么确认是不是DDR问题
1. 查看
串口log
-如果串口log是在loader中的DDR初始化部分报错的话一定是DDR问题。
-查看loader中DDR初始化部分log中的DDR容量行列bank及颗粒类型位宽信息是否正确。如果信息错误可能引起DDR问题。
-如果串口log是系统中的paniclog的话,可以多尝试几次看多次panic的地址是否一致,如果一致的话基本上不可能是DDR问题,如果不一致的话有可能是DDR问题,也可能是
电源问题。
2. 看显示是否正常。如果显示异常是DDR问题的概率比较大。
3. 做排查试验:
-
arm GPU降频,定频适当抬压,如果有效果的话就不是DDR问题。基本上能确认是电源问题。
-关闭DDR变频功能,有效果则DDR变频导致的问题概率比较大。
-降低DDR频率到稳妥频率如200M 如果有效果那很大概率是DDR
信号质量有问题。
二、引起DDR问题的几个主要原因
1. 电源问题:
●
layout上电容不够,电容摆放位置里芯片太远,电容分布不合理
●电源feedback回路没按要求从末端引回到PMU/
DC-DC端
●敷铜有没有按照RK的layout规则处理导致电源路径太窄
●LQFP封装的芯片正下方的GND需要堆锡保证良好接地,否则会影响芯片内部电源质量以及散热。
2. 信号质量问题
●不等长的走线。RK平台是不带各种eye training的, 不等长的走线会直接牺牲DDR 的setup/holdtime。
●过窄的线间距。过窄的线间距将会导致严重的串扰问题。
●T型拓扑结构分支不等长。不等长的分支会恶化信号边沿,使边沿形成抬价。
●信号参考层回路上的不完整。在敷铜时间隙设置过大导致过孔直接隔断参考层会导致信号质量下降引起兼容性问题。
3. 颗粒问题
●白牌颗粒,由于没经过测试甚至一些可能是原厂测试淘汰下来的颗粒良率上无法保证。
●一些特殊渠道的颗粒,可能存在驱动强度偏弱等问题。
●hynix 个别型号
LPDDR3颗粒存在bug,不能够
enable write odt。
●hynix 4Gb C die DDR3,如H5TQ4G63CFR 在早期平台上会导致颗粒位宽识别异常,需要打补丁解决。
三、解决DDR问题的一些手段
解决DDR问题总的办法就是找规律,尝试是否能找到死机的规律,如都在某个频率下死机,休眠唤醒死机的是否是
和休眠时间多久有关等。尝试各种方法如定频,尝试不同频率,抬压,改驱动强度等逐个排查可能性缩小问题范
围。
1. 对于在DDR初始化中报错的问题
●如果有"rd addr 0x... = 0x..."的报错基本上是焊接问题。在DDR初始化完成之后会往将所有地址线扫描一遍,将物理地址写入对应的地址中再读出比较,如果不一致将结果打印出来。例如:log"rd addr 0x40000000 = 0x0“ 表示原来地址0x40000000写入的值是”0x40000000“但是读出来的却是”0“。这表明
CPU看到的地址bit30 可能短路到地。而这个bit30 具体对应到DDR地址线上的哪个bit可以查看我们
TRM中interconnect那一章 d
DRConf的配置表查询到。
●如果报”16bit error!!!“,”W FF != R“的话表明DDR基本的读写都是错误的。这种情况焊接问题概率比较大。
●打印"unknow
device"说明颗粒基本的读写都不对,无法探测到dram类型。此时应该检查焊接问题。
●对于个别容量不是2的n次幂的颗粒,如768MB,1.5GB,3GB 等特殊颗粒有些版本的代码可能没做好兼容工作,如果有异常的话可以联系DDR相关工程师分析。
●文档”DDR遇到的问题记录”中“概率性出现颗粒类型,颗粒位宽探测出错”章节解决的问题也会引起DDR初始化时报错。具体可参考”DDR遇到的问题记录“更新到相应版本的loader解决该问题。 对于DDR loader中报错的问题,大部分会是焊接问题,可以尝试使用ddr测试工具焊接专项选择对应容量的测试项测试分析。
2. 查看loader中DDR初始化部分log中的DDR容量行列bank及颗粒类型位宽信息是否正确。如果信息错误可能引起DDR问题。
如下图第一行为DDR版本号,第3行DDR频率,第4行DDR类型,第五行从左到右分别为系统的位宽数,列数,bank数,行数,片选数,颗粒的位宽数和总容量。第7行“OUT"打印出来后表面DDR初始化成功并退出,再下面就是usbplug或者miniloader 打印的log。这中间Die Bus-Width比实际的大不会有问题,但是比实际的小会引起死机。
更多详细内容请下载附件查看