我們先來看一個公式:
Mipiclock = [ (width+hsync+hfp+hbp) x (height+vsync+vfp+vbp) ] x(bus_width) x fps/ (lane_num)/2
即mipi 屏的傳輸時鐘頻率(CLKN,CLKP)等於(屏幕分辨率寬width+hsync+hfp+hbp)x ( 屏幕分辨率高height+vsync+vfp+vbp) x(RGB顯示數據寬度) x 幀率/ (lane_num)/2
簡單解釋下:
一幀畫面需要的數據量為(單位bit):FRAME_BIT = (屏幕有效顯示寬度+hsync+hfp+hbp) x ( 屏幕有效顯示高度+vsync+vfp+vbp) x(RGB顯示數據寬度24)
一秒鐘內需要傳輸的數據量為(單位bps):FRAME_BIT x fps(幀率)。
那為何要除以lane_num----因為mipi通訊協議中,一個CLOCK幾個lane是可以同時傳輸數據的。
為何又要除以2----因為根據mipi通訊協議,CLK_N、CLK_P這兩根時鐘線的上升沿/下降沿可以獲取到數據。
因此我們可以得出如下結論:
1.在相同的時鐘頻率下,lane數越多,則單位時間內可以傳輸的數據越多。若顯示幀率固定不變,則可以支持的更大的分辨率;而分辨率固定不變的情況下,則我們可以考慮支持更高的幀率顯示。
2.在lane數固定的情況下,提高傳輸的時鐘頻率,則單位時間內也可以傳輸更多的顯示數據。進而我們可以考慮是提高幀率還是提高分辨率,或兩者做出平衡。
那麼我們是否可以任意無限制的提高mipi的傳輸時鐘頻率及lane數目呢?mipi通訊協議對此進行了限制,一組CLOCK最高只能支持4組lane,一組lane的傳輸速度最高只能支持到1 Gbps。也就是說一組CLOCK最高只能支持到4 Gbps速度傳輸。
此時就引出了一個新問題:4Gbps速度傳輸,是滿足不了現在市場上推出的4K電視的帶寬要求的,怎麼辦?答案是使用8組lane,使用兩組clock來傳輸。
下面我們以展訊7731平臺下EK79023這款LCD 驅動IC的配置參數進行實例說明:
<code>static struct timing_rgb lcd_ek79023_mipi_timing = {
.hfp = 100, /* unit: pixel */
.hbp = 60,
.hsync = 24,
.vfp = 22, /*unit:line*/
.vbp = 10,
.vsync = 2,
};
static struct info_mipi lcd_ek79023_mipi_info = {
.work_mode = SPRDFB_MIPI_MODE_VIDEO,
.video_bus_width =24, /*18,16*/
.lan_number = 2,
.phy_feq=660*1000,
.h_sync_pol =SPRDFB_POLARITY_POS,
.v_sync_pol = SPRDFB_POLARITY_POS,
.de_pol =SPRDFB_POLARITY_POS,
.te_pol =SPRDFB_POLARITY_POS,
.color_mode_pol =SPRDFB_POLARITY_NEG,
.shut_down_pol =SPRDFB_POLARITY_NEG,
.timing =&lcd_ek79023_mipi_timing,
.ops = NULL,
};
struct panel_spec lcd_ek79023_mipi_spec = {
.width = 600,
.height = 1024,
.fps =57,//62,//67,//52,//57,//60,
.type =LCD_MODE_DSI,
.direction =LCD_DIRECT_NORMAL,
.info = {
.mipi =&lcd_ek79023_mipi_info
},
.ops =&lcd_ek79023_mipi_operations,
};
/<code>
從中可知,該LCD的分辨率為600 x 1024,幀率為57 HZ。
一幀圖像的數據量為:FRAME_BIT=(600+24+100+60) x (1024+2+22+10) x(24)=19907328 bit
一秒鐘的數據量為:19907328 x 57 = 1134.717696 Mbps
所需的mipi時鐘頻率為:1134717696/2(lane)/2= 283.679424 Mhz
一組lane的傳輸速度是:283.679424 x 2= 576.358848 Mbps
閱讀更多 linux內核 的文章