DDR 常见模式的测量判断方法


【简述】

各类型DDR在运行中,有三种模式比较常见,在调试过程中需要特别注意,分别为:

运行模式,自刷新模式( self-refresh )和断电模式(auto power down )。

【方法说明】

通过测量DDR的CKE脚的电平变化状态判断DDR当前的模式,标准如下:

低电平持续时间时间大于7.8us,DDR处于自刷新模式。

DDR3、DDR4低电平持续时间小于或者等于7.8us,LPDDR2、LPDDR3、LPDDR4低电平持续时间小于或者等于3.9us,DDR处于断电模式

CKE为高电平,为正常工作模式

【特别说明】

自刷新模式和断电模式都是省电模式,通常情况DDR是会在模式之间切换,我们会看到CKE的电平出现高低变化,说明DDR在各状态之间切换。

DDR 相关问题排查指南


一般DDR相关问题,主要的表现为死机,重启,通常需要配合串口打印一起进行分析,这里列举常见的DDR 问题的排查思路。

    • 怎么确认是不是DDR问题?

1.   查看串口log

    • 如果串口log是在loader中的DDR初始化部分报错的话一定是DDR问题。
    • 查看loaderDDR初始化部分log中的DDR容量行列bank及颗粒类型位宽信息是否正确,如果信息错误可能引起DDR问题
    • 如果串口log是kernel 部分系统中的panic log的话,可以多尝试几次看多次panic的地址是否一致,如果不一致的话有可能是DDR问题,也可能是电源问题。

2.  看显示是否正常,如果显示异常是DDR问题的概率比较大。 

3.   做排查试验: 

    • arm gpu降频,定频适当抬压,如果有效果的话就不是DDR问题。基本上能确认是电源问题。
    • 关闭DDR变频功能,有效果则DDR变频导致的问题概率比较大。
    • 降低DDR频率到稳妥频率如200M 如果有效果那很大概率是DDR信号质量有问题。

Continue reading "DDR 相关问题排查指南"

rk平台DDR部分打印解析


rk各平台DDR部分打印信息有类似,其中包括loader中的打印和kernel中的打印,其解析分别如下所示:

1. loader中打印的解析如下:

  1. DDR Version 1.05 20170712// DDR 初始化代码的版本信息,用于核对版本。从这行开始,已经进入DDR初始化代码
  2. In
  3. SRX // 有SRX,说明是热重启;没有SRX,说明是冷开机。有的芯片没加这个功能,一直都是没有SRX的
  4. Channel a: DDR3 400MHz // 下面都是DDR容量的详细信息
  5. Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus‐Width=16 Size=1024MB
  6. Channel b: DDR3 400MHz
  7. Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus‐Width=16 Size=1024MB
  8. Memory OK // DDR自测的结果,第一个Memroy OK是Channel a的自测结果
  9. Memory OK // 是Channel b的自测结果。有报错,说明焊接有问题;没报错,说明当前自测没问题,整个DDR是否能稳定工作,还得看后续阶段的运行结果。
  10. OUT // 这行打印之后,就退出了DDR初始化代码

2. kernel 3.0和kernel 3.10中打印的DDR信息:

  1. [ 0.528564] DDR DEBUG: version 1.00 20150126 //版本信息
  2. [ 0.528690] DDR DEBUG: Channel a: //DDR容量详细信息
  3. [ 0.528701] DDR DEBUG: DDR3 Device
  4. [ 0.528716] DDR DEBUG: Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Total Capability=1024MB
  5. [ 0.528727] DDR DEBUG: Channel b:
  6. [ 0.528736] DDR DEBUG: DDR3 Device
  7. [ 0.528750] DDR DEBUG: Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Total Capability=1024MB
  8. //后面还有其他DDR打印信息,可以不用管,是写DDR驱动人员用的
  9. //DDR DEBUG的字样打印结束,就是kernel中DDR初始化完成了

3. kernel 3.10还会有如下打印,是DDR变频模块的输出信息:

  1. [ 1.473637] ddrfreq: verion 1.2 20140526 //DDR变频模块版本
  2. [ 1.473653] ddrfreq: normal 396MHz video_1080p 240MHz video_4k 396MHz dualview 396MHz idle
  3. 0MHz suspend 200MHz reboot 396MHz //DDR各个场景对应的频率,是从dts表格中读取出来的
  4. [ 1.473661] ddrfreq: auto‐freq=1 //负载变频功能是否开启,1表示开启,0表示关闭
  5. [ 1.473667] ddrfreq: auto‐freq‐table[0] 240MHz //负载变频的频率表格
  6. [ 1.473673] ddrfreq: auto‐freq‐table[1] 324MHz
  7. [ 1.473678] ddrfreq: auto‐freq‐table[2] 396MHz
  8. [ 1.473683] ddrfreq: auto‐freq‐table[3] 528MHz
  9. //如果在这段打印过程中系统卡死了,很可能是DDR变频有问题

重点说明:

    • DDR的详细信息,会包含有:DDR类型、DDR频率、通道信息(Channel a\Channel b)、总线数据位宽(buswidth/BW)、行数量(row)、列数量(col/column)bank数量(bank/BK)、片选数量(CS)、单颗颗粒的数据位宽(DieBus width/Die BW)、单个通道的DDR总容量(size/Total Capability)
    • 如果需要整机的总容量,芯片只有一个DDR通道的,整机容量就等于size/Total Capability。芯片有2个通道的,整机容量等于2个通道的size/Total Capability相加。