MIPI-DSI 三種 Video Mode 理解
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就不會發,不過這個只用於這種模式下有效。
相關文章
- expdp五種mode
- 巨集 ACC_MODE(x) 的理解
- 理解兩種變數模型和三種傳參模式變數模型模式
- 深入理解Java的三種工廠模式Java模式
- 深入理解hibernate的三種狀態
- 深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
- 表的三種連線方式官方解釋及個人理解
- ASP.NET中Session的sessionState 4種mode模式ASP.NETSession模式
- 深入理解javascript系列(一):從三種資料結構開始JavaScript資料結構
- 理解VMware虛擬機器下網路連線的三種模式虛擬機模式
- BOM的兩種理解
- 通過CaaS理解雲服務三種模式的區別:IaaS,PaaS,SaaS模式
- Window mode
- consistent mode和current mode的區別
- 一個簡單的例子理解Kubernetes的三種IP地址型別型別
- CTMediator 原理解析(三)
- 三層架構理解架構
- 三種快速排序排序
- UIImageView三種方式UIView
- Docker Swarm modeDockerSwarm
- oracle time modeOracle
- javascript strict modeJavaScript
- TM LOCK MODE
- sql_modeSQL
- Windws XP Mode
- Dataguard mode switch
- 更改Archive ModeHive
- Undo Mode (30)
- Python|讀、寫Excel檔案(三種模組三種方式)PythonExcel
- 多執行緒程式設計1-定義理解與三種實現方式執行緒程式設計
- ftp命令 binary mode與ascii mode的區別FTPASCII
- 這種死鎖怎麼理解
- EA VideoIDE
- 三張圖理解JavaScript原型鏈JavaScript原型
- Java三大特性再理解Java
- 理解三層轉發原理
- “用資料說話,從埋點開始”-帶你理解前端的三種埋點前端
- 三種繼承方式繼承