前面我们介绍了一些MIPI LCD的基础知识以及LCD初始化序列的配置:
Linux MIPI DSI LCD设备驱动开发调试细节学习笔记(一)
Linux MIPI DSI驱动调试笔记-设备树DCS格式序列之配置LCD初始化代码(二)
要点亮MIPI DSI接口的LCD,我们还有一个非常重要的配置,那就是屏幕的时序,时序就是点屏的基础,大部分LCD提供的数据手册都大同小异;由于没搞过这块驱动的调试,我还很担心怕这个月都搞不定;但是我确实太低估自己的能力了,没想到居然就只用了不到一天时间不到就把一个完全没用过的屏给点起来了!所以我告诉自己,以后要自信点,不要怕,上来就是肝才是正道!
1、LCD屏幕显示原理
与纯 RGB 显示屏同理, MIPI DSI 显示参考下图:
之前有一篇文章也写得很好,结合学习会很有收获:
图解LCD硬件原理 && 调色板与Framebuffer原理
1.1、垂直方向
直接干Datasheet,关于垂直方向,我们只需要关心以下几个参数就可以了:
垂直方向:
- tvd :垂直方向的分辨率
- tv :整个垂直方向的周期
- tvpw :vysnc 脉冲宽度
- tvb :上边黑框 ===> vbp ===> Vertical Back porch ===> 垂直后肩
- tvfp :下边黑框 ===> vfp ===> Vertical Front porch ===> 垂直前肩
1.2、水平方向
直接干Datasheet,关于水平方向,我们只需要关心以下几个参数就可以了:
水平方向:
- thd :水平方向的分辨率
- th : 整个水平方向的周期
- thpw :hsync 脉冲宽度
- thb :左边黑框 ===> hbp ===> Horizontal Back porch ===> 水平后肩
- thfp :右边黑框 ===> hfp ===> Horizontal Front porch===> 水平前肩
2、MIPI DSI 设备树时序配置
接下来我们照着以上的几个参数,结合数据手册里提供的典型参数往设备树里的时序列表里填,最终时序部分如下:
display-timings { native-mode = <&timing0>; timing0: timing0 { clock-frequency = <51200000>; //DCLK hactive = <1024>; //hactive vactive = <600>; //vactive hfront-porch = <160>; //hfp hsync-len = <70>; //hsa hback-porch = <160>; //hbp vfront-porch = <12>; //vfp vsync-len = <10>; //vsa vback-porch = <23>; //vbp hsync-active = <0>; //hync 极性控制 置 1 反转极性 vsync-active = <0>; //vsync 极性控制 置 1 反转极性 de-active = <0>; //DEN 极性控制 pixelclk-active = <0>; //dclk 极性控制 }; };
其中 clock-frequency
即 DCLK
频率,查看以下规格书:
可知, DCLK
频率为 51.2Mhz
,所以这个参数就是51200000。
其中clock-frequency
的计算公式是这样的:
clock-frequency = (h_active + hfp + hbp + h_sync) * (v_active + vfp + vbp + v_sync) * fps
根据以上公式我们还可以计算出fps
:
fps = 51200000 / (1024+160+160+70) * (600+23+12+10) = 51200000 / 912030 = 56Hz
这里的 56Hz
也就是屏幕的刷新率(fps)。
时序一搞定了,那离点屏就差10%了,今天就学习总结到这了,下期会继续分享怎么通过Linux终端确认MIPI DSI是否已经匹配到系统上。
往期精彩
如何添加APP到Buildroot里(以瑞芯微rv1126为例)
瑞芯微RV1109配置GPIO设备树修改笔记(熟悉新平台从点灯大法开始)