展锐平台屏调试
概览
根据展锐LCD配置相关文档,Display模块包括3大块:DPU、DSI、DPHY。
- 核心模块DPU(Display Processing Unit)与显示相关,主要负责图层合成、图像变换、刷新屏幕等。
- DSI(Display Serial Interface)和 DPHY 与通讯有关,负责打包和传送数据。 上层程序将需要显示的图像绘制好并写到DDR的buffer中,然后DPU从buffer中取数据进行合成后送往DSI中进行打包,DPHY将打包好的数据通过mipi总线送往PANEL进行显示
所以数据传输分为三步:
- 上层程序将需要显示的图像绘制好并写到DDR的缓冲区中
- DPU从缓冲区中取数据进行合成后送往DSI中进行打包
- DPHY将打包好的数据通过MIPI(Mobile Industry Process Interface,移动产业处理器接口)总线送往PANEL进行显示。
屏的驱动调试就需要配置上面说到的2)和3)两步的速率,即pixel-clk(或bit-clock)和mipi phy clock
相关参数
如下uboot(或lk)中的初始化数据格式
在初始化话函数中,会将init_data强制转化为dsi_cmd_des结构体,然后以dcs或generic方式发送出去(相关概念可以参考链接)
显示相关基础知识可以参考如下链接:
相关clock的计算
展锐屏涉及到的clock有两个,pixel-clock和 phy_freq(其他平台可能叫mipi clock)
pixel-clock = (hsync + hfp + hbp + hactive)x (vsync + vfp +vbp + vactive) x fps
pixel clock是像素时钟,所以一秒钟传输的总的数据量为:
bit-clock = pixel-clock * 3 * 8
(一个像素包括R,G,B,这里假设为rgb888,每个分量占8bit)
mipi以4lan输出到屏所以
phy_freq = bit-clock *1.2 / 4
这里乘以1.2是考虑到mipi在组包的过程中加上SOF/EOF以及其他的一些额外信息,所以我们尽量稍微大于总的图像的数据量
计算示例:
使用展讯的clock计算工具
pixel_clk = W * H * fps = 1132 * 1948 * 60 = 132,308,160
由于展讯的pixel_clock的时钟源只有几个,可能有些时钟达不到
代码中pixel_clk是从dpi_clk_src分频出来的,所以必须要被dpi_clk_src整除,我们计算出的60帧的pixel-clk为132308160不能分频出来,所以稍微降低帧率,将pixel-clk设置为128M
总的的数据量为12800000038
所以phy_clk = 12800000038 * 1.2 / 4lane = 921,600,000
至此我们就已经算出pixel_clk和phy_clk