Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83
首先我想感谢下Rockchip闭工和Toshiba林工在技术上的大力支持,没有他们帮忙,调试周期将会拉更长。
背景:
产品需要接一块LVDS屏幕,rk3399并没有带LVDS接口,因此使用东芝的DSI->LVDS芯片TC358775来输出LVDS信号。
因此驱动里配置的就是MIPI DSI了。
原理图:
参考原理图设计使用的是TC358772, TC358775引脚和前者Pin To Pin兼容。
图中外部晶振并没有贴,EXTCLK直接通过电阻接地。
由于屏是1366*768的分辨率,计算得出使用TC358775的单8位就可以了,也就是LVDS屏幕连接LVTX1通道。
关于LVDS单双8位,可参考: LVDS接口分类,时序,输出格式
屏幕数据:
屏幕主要关注它的时钟和时序就可以了。
这些参数在两个地方会被用到:
- TC358775配置init cmd时需要。
- 平台配置timing以及计算clock时需要。
移植步骤:
- 打上kernel针对dsi的patch。这里先调试kernel,所以uboot显示(对应route_dsi节点)功能先关闭。
- 配置TC358775和panel对应的reset和enable gpio。
- 根据屏幕配置panel timing。
- 配置dsi init command。command一定要根据屏幕来做配置,虽然东芝有提供一个配置表可以自行配置,但是最好请厂商调好,避免掉坑。
- 关闭其他display通道,选择从dsi输出,即配置VOP。
调试步骤:
这次屏幕调试不太顺利,如下记录下调试的过程。
- 修改dts中的dsi flags。
默认的配置是burst mode:
dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
而东芝给的命令是基于video event mode。
其实这个不用去动它,rockchip针对不同的模式已经做好了调试和修改。 - 测量GPIO配置是否正确。
- 给的patch中对reset gpio是设置的低->高->低,而reset默认低有效,因此只要低->高就可以了。
- 下图中的C155本来是用于RES没有GPIO控制的时候利用充放电原理来模拟RES上电时序。由于代码中有通过GPIO控制,因此可以移除此电容。
加了C155的波形会有个慢慢上升过程,如下图绿色部分:
- 测量各个电源是否正确。
I2C输出的电压要和TC358775的VDDIO保持一致。
- 测量平台DSI的上电时序是否满足TC358775数据手册要求。
数据手册上电时序如下:
实际测试时序除了STBY是固定和VDDIO同时上电之外,其他的都是符合要求,测量的数据如下:
VDDIO -> VDD_LVDS_18: 75us
VDDIO -> VDD_MIPI_12 : 250us
VDDIO -> STBY: 一起触发,因为STBY引脚直接接的3.3V
VDDIO -> RESX: 6.2ms
VDDIO -> DSI_LP11: 6.5 ms
VDDIO -> DSI_HS: 8.5 ms
注意的是DSI clock上先要输出LP11然后再进入HS mode后TC358775才能工作。
LP11时是1.2V,HS mode时dsi clock是200mV。
vddio->dsi clock时序:
LP11高电平部分超出显示范围,这里没看到。
resx -> dsi clock时序:
- 测量DSI clock是否符合计算要求。
dsi clock = (1560*806*60*24)/4/2 = 226MHz
实际测量到是270MHz, 这是由于默认驱动计算出来的HS clock不满足需求。
此问题可以通过在dts中直接指定bps来解决。
&dsi {
...
snps,bit-rate-per-lane = <452000000>; // 452Mbps,DSI是DDR,因此最终输出频率和bitrate差一倍。
...
};
另外,kernel log中有Mbps字样可以得知和你配置以及测量的是否一样,如果测量不一致,那么就要看下驱动的PLL分频算法有没有问题。
- 通过I2C去读取判断init cmd是否有设置成功。
TC385775有提供I2C和MIPI DSI command的方式去设置寄存器。 - 当不能正常显示时可以通过I2C的方式读取寄存器配置。
- 如果仅仅是判断I2C是否连通,那么可以利用rk3399平台提供的i2c_detect工具来探测成功与否。
- I2C的电源和上拉记得检查。
- 东芝技术支持有提及dsi clock满足LP11 -> HS mode的行为才可以使用I2C。
- I2C的读取和mipi command的使用两者并不冲突。
- 地址是0xf。
- 多使用几块板子测量验证
由于时间关系,我们的第一批板子上TC358775是手工焊接,连续验证了4块板子后终于可以正常开机显示。
后面不能显示板子拿去照x-ray确实是不良。
这也是导致调试了那么久的原因☹
参考:
LVDS应用详细说明_V1.0.pdf
DV185WHM-NM1 Product Specification_Rev.0.pdf
Rockchip_DRM_Panel_Porting_Guide_V1.5_20180830.pdf