MIPI-DSI 三種 Video Mode 理解

茫茫大士發表於2020-12-25

FROM:https://blog.csdn.net/eliot_shao/article/details/52474348

D- PHY的物理層支援HS(High Speed)和LP(Low Power)兩種工作模式

  • HS模式:低壓查分訊號 功耗大 高速率(80M -1Gbps) 訊號幅值(100mv-300mv)
  • LP模式:單端訊號 功耗小,速率低(< 10Mbps) 訊號幅值(0-1.2V)

在高速模式下,通道狀態是差分的0或1,定義P比N高時定義為1,P比N低時定義為0,此時線上典型電壓為差分200mv

在LP模式下,只用lane0傳輸資料和時鐘,雙向資料傳輸。

鏈路層的模式分為: Command模式Video模式

  • 鏈路層選擇Command模式時,物理層可以為HS模式,也可以為LP模式;
  • 鏈路層選擇Video模式時,物理層只能選擇HS模式。

 

 

Video模式時,物理層只能選擇HS模式,下面是video模式下傳遞一個些圖片畫素資料包(長包)。

和command模式不同的是Data Type,這裡的Data Type是3Eh,下面有一張Data Type的表。

 

 

 

 

下面介紹一下qualcomm平臺dtsi配置檔案中關於對video模式配置說明:

qcom,mdss-dsi-panel-type = " dsi_video_mode";

qcom,mdss-dsi-on-command = [29 01 00 00 00 00 04 B9 FF 83 94

29 01 00 00 00 00 02 C6 EF

05 01 00 00 78 00 02 11 00

05 01 00 00 14 00 02 29 00];

qcom,mdss-dsi-off-command = [05 01 00 00 32 00 02 28 00

05 01 00 00 78 00 02 10 00];

qcom,mdss-dsi-on-command-state = "dsi_lp_mode";

qcom,mdss-dsi-off-command-state = "dsi_hs_mode";

qcom,mdss-dsi-on-command 是在Mdss_dsi_panel.c (drivers\video\msm\mdss)的

static int mdss_dsi_panel_on(struct mdss_panel_data *pdata)函式裡用到的,點亮LCM的指令,未來這個函式將會被FB驅動resume裡面呼叫到。

類似的, qcom,mdss-dsi-off-command 同樣在檔案

Mdss_dsi_panel.c (drivers\video\msm\mdss)的static int mdss_dsi_panel_off(struct mdss_panel_data *pdata)用到,未來將會被FB驅動的suspend函式裡呼叫,用於關掉LCM的指令。

 

定義這個panel為" dsi_video_mode",在下發 mdss-dsi-on-command之後會把DSI轉換到video-hs模式下。

 

那麼 mdss-dsi-on-command 和 mdss-dsi-off-command是什麼時候呼叫的呢?

如果按照MTK平臺對LCM處理的思維,大概是這樣的:

LCM_DRIVER nt52021_hd720_dsi_vdo_lcm_drv =

{

.name = "nt52021_hd720_dsi_vdo",

.set_util_funcs = lcm_set_util_funcs,

.get_params = lcm_get_params,

.init = lcm_init,//reset 呼叫DSI發初始化資料

.suspend = lcm_suspend,//呼叫DSI發滅panel資料

.resume = lcm_resume,//reset 呼叫DSI發初始化資料

.compare_id = lcm_compare_id,

#if (LCM_DSI_CMD_MODE)

.update = lcm_update,

#endif

};

而高通平臺是則是在LCM的FB驅動裡面,probe通過呼叫MDP驅動結構體的初始化函式,呼叫DSI驅動想MDPcore註冊的回撥函式,這些回撥函式就是操作DSI傳送不同的資料,而這些資料恰恰就是dtsi裡面需要配置的 mdss-dsi-on-command 和 mdss-dsi-off-command。

 

言歸正傳,前面說明了DSI 在video模式下面傳送一些畫素圖片的資料包內容,但是在實際傳輸這些資料包的時候需要遵守一些時序控制。

Video模式又分三種子模式:

1 Non-burst Mode Sync pulses: 在這種模式下,DSI基於各種不同的同步資料包來做資料同步。這種資料包括:重構,時間校準等。更具體的請參考DSI協議標準。

2 Non-burst Mode Sync event: 這種模式和第一種模式很像,但是這種模式不會發重構和時間校準的資料包,它們只傳送一種叫做”Sync event”的包。

3 Burst mode: 在horizontal 的時序是一樣的情況下DSI會把連線的速度提升到Panel支援的最大速度。在這種模式下傳送RGB資料包的時間被壓縮,以留出更多的時間用來傳送其他的資料。

為了使能Video模式Host需要傳送各種不同的包到panel用來設定開始和結束的Porch.以下是Video模式中用到的資料包:

• VSS:  DSI Sync Event Packet: V Sync Start

• VSE:  DSI Sync Event Packet: V Sync End

• BLLP: DSI Packet: Arbitrary sequence of non-restricted DSI packets or Low Power Mode incluing optional BTA.

• HSS:  DSI Sync Event Packet: H Sync Start

• HAS:  DSI Blanking Packet: Horizontal Sync Active or Low Power Mode, No Data

• HSE:  DSI Sync Event Packet: H Sync End

• HFP:  DSI Blanking Packet: Horizontal Front Porch or Low Power Mode

• HBP:  DSI Blanking Packet: Horizontal Back Porch or Low Power Mode

• RGB:  DSI Packet: Arbitrary sequence of pixel stream and Null Packets

• LPM:  Low Power Mode incuding optional BTA

 

 

上圖頂部有圓弧的代表資料包,長方形的代表時序的狀態。

那麼MIPI host如何輸入一幀的資料呢,下面分別是三種video mode下的資料傳輸時序圖:

 

 

 

 

 

 

 

 

結合屏的物理結構才看得動上面時序圖的含義:

 

 

 

以BURST mode為例 :

首先會傳送VSPW行(VSA lines)的空資料包,在傳送VBP lines的空資料包,接著傳送VACT lines(屏寬)的有效RGB資料,其中每一行資料都包含HSS 行開始訊號+HBP資料包+RGB+HFP資料包。最後就是傳送VFP lines的空資料包。這樣就刷滿了一整屏,也就是一幀的資料。

 

那麼這三種video模式的區別就是傳遞的數序和資料包位置的不同,至於最終在dtsi配置哪一個模式就要根據實際的panel IC所支援video 模式來。

dtsi對應項:

qcom,mdss-dsi-traffic-mode = "non_burst_sync_event";

 

另外說明一下dtsi 裡面qcom,mdss-dsi-h-sync-pulse 的含義

在kernel/Documentation/devicetree/bindings/fb/mdss-dsi-panel.txt:196中說明了:

 

 

這裡所說的pulse mode就是 Non-burst Mode Sync pulses模式。

根據時序圖,如果這個值為1就會發圖中紅色圈圈的部分,如果為0就不會發,不過這個只用於這種模式下有效。

 

相關文章