日期:2015.01.14
一、开篇说明
这几天都在调试MTK平台下的LCD屏,它们都是采用MIPI接口方式去连接的。而我在修改它们的驱动时,注意到有时候它们需要设置一些上肩、下肩、左肩、右肩等等的东西,但有时候又不需要去设置这些东西。由于刚开始接触这一方面的东西,不是十分清楚。
以前用到的都是需要设置上下肩的,现在遇到有些不需要设置,就觉得很奇怪。这个时候就需要去看个究竟了。
二、查阅相关资料得到以下信息
1,LCD屏的接口一般有三种:DBI、DPI及DSI。
DBI:也就是通常所讲的MCU接口,俗称80 system接口。DBI接口又分为串行和并行两种,模型如下:
2,DPI接口
也就是通常所说的RGB接口,采用普通的同步、时钟、信号线来传输特定数据,采用SPI等控制线完成命令控制。某种程度上,DPI与DBI的最大差别是,
DPI的数据线和控制线分离,而DBI是复用的。
3,DSI接口
DSI,是一种串行传输方式,包括数据、指令、其他信息。连接方式如下图:
由于DSI的数据是封包处理的,不像DBI接口那样可以明显知道原始的传输内容,所以在一些问题的解决方法是不同的。
1) DSI的线路构成:在DSI中需要 1 根时钟线以及 1 ~ 4根数据线。
2) DSI 有两种接口的LCD
第一种:Comman mode(对应 MPU 接口)
第二种:Video mode(对应RGB接口)
三、解惑
我去比对了一下要设置上、下肩的LCD驱动和不需要设置上下肩的驱动代码。发现了如果是DSI的模式为Comman mode 接口的话,就不用设置
那些上下肩的东西,如果是用了DSI的 Video mode 的话,就需要去设置上、下肩的时序。
例1:
params->dsi.mode = SYNC_PULSE_VDO_MODE;
params->dsi.vertical_sync_active = 3;
params->dsi.vertical_backporch = 12;
params->dsi.vertical_frontporch = 2;
params->dsi.vertical_active_line = FRAME_HEIGHT;
params->dsi.horizontal_sync_active = 10;
params->dsi.horizontal_backporch = 50;
params->dsi.horizontal_frontporch = 50;
params->dsi.horizontal_active_pixel = FRAME_WIDTH;
params->dsi.PLL_CLOCK = 116; //dsi clock customization: should config clock value directly
例2:
params->dsi.mode = CMD_MODE;
params->dsi.pll_div1 =1; // div1=0,1,2,3;div1_real=1,2,4,4
params->dsi.pll_div2 =0; // div2=0,1,2,3;div2_real=1,2,4,4
params->dsi.fbk_div =17; // fref=26MHz, fvco=fref*(fbk_div+1)*2/(div1_real*div2_real)
// if fbk_div = 17; fvco = 432MHz ==================chen=================
MIPI video mode 和 command mode 的区别
DSI(Video Mode)视频模式.
这种工作模式与传统RGB接口相似,主机需要持续刷新显示器。由于不使用专用的数据信号传输同步信息,控制信号和RGB数据是以报文的形式通过MIPI总线传输的。
因为主机需要定期刷新显示器,显示器就不需要帧缓冲器。这才MX LCD不需要RAM的关键原因。
DCS(Command mode)命令模式
MIPI总线控制器使用显示命令报文来向显示器发送像素数据流。显示器应该有一个全帧长的帧缓冲器来存储所有的像素数据。一旦数据被放在显示器的帧缓冲器中,
MIPI总线控制器使用显示命令报文来向显示器发送像素数据流。显示器应该有一个全帧长的帧缓冲器来存储所有的像素数据。一旦数据被放在显示器的帧缓冲器中,
定时控制器就从帧缓冲器中取出数据,并自动把它们显示在屏幕上。MIPI总线控制器不需要定期刷新显示器。