在RK3568 Androd12.0 上适配一款mipi,出现一种现象:开机启动没有显示,待机后再唤醒就有显示。
问题排查流程:
1. 适应性修改上电时序(delay-ms)及示波器测试波形,发现修改是有效的,但问题没有解决。提供日志及参数给原厂协助分析,并无实质性进展。
2.使用另外一款mipi测试对比,这款屏显示又是正常的,对比内核日志,除分辨率的差异,其他并无区别。
3.跟屏的供应商要屏的规格书----之前只提供了一个屏参文件和结构图文件(这是大忌,一定要规格书,里面有模式、寄存器、时序、通信等相关内容的详细信息)
4.对照规格书,尝试修改屏参里面的寄存器参数,发现是有变化的(待机后唤醒显示正常说明提供的参数应该是没有问题)。
5.从启动流程上分析问题:开启启动是现在加载uboot-logo,再加载kernal-logo,因此要从uboot里面开始查。
6.uboot 显示参数获取及加载代码目录:uboot/video/drm/,加载dts,prepare、enable,init等流程。走读代码并没有发现什么问题,所以在执行写寄存器的方法增加打印确认寄存器及其参数与dts中是否一致(rockchip_panel_send_dsi_cmds)。
7.加了打印,刷机,开机启动就显示正常了。
8.进一步分析:加打印相当于加延迟处理,而且dts中的寄存器参数项是有延迟数据的,问题应该是在dts mipi 寄存器参数中。
9.参照屏的规格书,逐一对寄存器的功能描述、值以及注意事项。最终定位问题是在最后一个寄存器没有休眠,0x29(Display On).
最终分析:发送完 Display On指令后需要等一下,等屏开启完成后才能进行后续操作(发送数据)。