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相加。

rockchip 平台 LCD dtsi 格式转化工具


在rk平台调试时候,经常遇到 LCD 厂商提供的参数格式不是我们需要的格式,这时候需要转换格式需要额外多做很多工作,如下格式为常见格式:

  1. Resolution:800x1280
  2. External system porch setting: VS=4 ,VBP=8 ,VFP=24 ,HS=18 ,HBP=18 ,HFP=18
  3. Frame rate:60HZ
  4. MIPI CLK:405Mbps
  5. Power:VCI=3.3, IOVCC=1.8
  6. LCD_nReset=1;
  7. Delayms(5);
  8. LCD_nReset=0;
  9. Delayms(10);
  10. LCD_nReset=1;
  11. Delayms(120);
  12. //========== JD9365 B0E10.1 initial setting ==========//
  13. //Page0
  14. SSD_Single(0xE0,0x00);
  15. //--- PASSWORD  ----//
  16. SSD_Single(0xE1,0x93);
  17. SSD_Single(0xE2,0x65);
  18. SSD_Single(0xE3,0xF8);
  19. //Lane select by internal reg  4 lanes
  20. SSD_Single(0xE0,0x04);
  21. SSD_Single(0x2D,0x03);//defult 0x01
  22. SSD_Single(0xE0,0x00);
  23. SSD_Single(0x80,0x03);
  24. //--- Sequence Ctrl  ----//
  25. SSD_Single(0x70,0x02);  //DC0,DC1
  26. SSD_Single(0x71,0x23);  //DC2,DC3
  27. SSD_Single(0x72,0x06);  //DC7
  28. ... // 省略部分代码
  29. //DISP ON
  30. SSD_Number(0x01);
  31. SSD_CMD(0x29);      // DSPON
  32. Delayms(5);
  33. //--- TE----//
  34. SSD_Single(0x35,0x00);

几百行转化成rk认可的格式如下:

Continue reading "rockchip 平台 LCD dtsi 格式转化工具"

rk平台emmc压力测试方法


rockchip平台emmc压力测试可以使用如下脚本进行测试,具体步骤如下:

  1. 在文章最后的代码复制到文件中,命名为 emmc_stress_test.sh,选择编码为unix utf-8格式,拷贝到机器的/sdcard 目录。
  2. 在sdcard 目录新建三个文件夹:src_test_data ,md5_data ,des_test_data
  3. 将一个约500M左右的文件拷贝到 src_test_data 目录。
  4. 在cmd界面启动adb,在adb界面输入: busybox nohup sh emmc_stress_test.sh & //启动后台测试
  5. 输入exit 退出adb,然后再输入exit退出cmd界面。
  6. 测试过程不关闭窗口,会打印测试次数,也可以 cat /sdcard/test_log.txt 查看测试结果。

注:此方法也可以用在其他平台,不过需要根据平台修改对应的脚本。

Continue reading "rk平台emmc压力测试方法"

rk平台开启SN号写入的功能


需求:

可以写入SN号,写入的SN号可以作用于adb devices显示和setting显示

方法:

1. 修改drmservice.c,路径如下:

system/core/drmservice/drmservice.c

内容如下:

#define SERIALNO_FROM_IDB 1  //if 1 read sn from idb3;  if 0 generate sn auto

2. 若还是无效,可对应修改 init.rk30board.rc,diff如下:

 # set ro.serialno
 on property:sys.serialno=*
-    setprop ro.serialno ${sys.serialno}
+    setprop ro.serialno ${ro.boot.serialno}

Continue reading "rk平台开启SN号写入的功能"