Data Rate,即Data Lane上数据传输速率,在VDO MODE中计算公式如下:
Data Rate = ((height + vsa + vbp + vfp) * (width + hsa + hbp + hfp) *
bits_per_pixel * frames_per_second) / data_lanes
例如:
Data Rate = ((960 + 4 + 16 + 16) * (540 + 4 + 40 + 40) * 24 * 60) / 2 = 418798080
即Data Rate约为420MHz
而dsi在clock的上升沿和下降沿都会采集数据,所以在计算clock时应为Data Rate的一半,对应前面的420MHz,那么clock应设置为210MHz(注意在计算clock时,clock * 2应比Data Rate稍大)。
那么在mtk平台上应该如何设置clock的频率呢?有两种方式,一是通过配置3个参数得到(6582 kk平台),二是直接设置clock频率(推荐第二种)。
第一种方式,通过分频倍频计算:
params->dsi.pll_div1 = 1; /* 配置0,1,2,3时对应的div1_real为1,2,4,4 */
params->dsi.pll_div2 = 1; /* 配置0,1,2,3时对应的div2_real为1,2,4,4 */
params->dsi.fbk_div = 30; /* 范围是0~63 */
那么输出频率计算公式如下:
(26MHz * (fbk_div + 1) * 2) / (div1_real * div2_real) = (26 * 31 * 2) / (2 * 2) = 403。
那么这种方式实际上计算出来是的Data Rate,即mtk手册上所说的BRPL(Bits Rate Per Lane)。
第二种方式:
params->dsi.PLL_CLOCK = 210MHz;
从代码看来,实际上他们最后都是通过设置DSI_PLL_CON0和DSI_PLL_CON2寄存器来实现的。
参考文档:MT6582_LCM_Porting_Guide_DSI_V1.0.pptx.pdf
MTK_on_line_FAQ_SW_ALPS_20141031.pdf