1 何謂 MIPI DSI1
何謂 MIPI DSIMIPI是Mobile Industry Processor Interface 的縮寫,一般是指MIPI 聯盟,而 MIPI DSI ( MIPI Display Serial Interface ) 是 MIPI 聯盟製定的 顯示串列介面的規範。
https://www.mipi.org/specifications/dsi#
1.1 MIPI DSI 方塊圖
MIPI DSI 的 傳輸方塊圖,如『圖1.1.1』( 註1 )
2 MIPI DSI 傳輸模式
MIPI DSI支援 Command mode,Escape mode 和 Video mode 。
開始使用示波器量測時,要先量測 Clock+/Clock-,還有 D0+/D0-。
如圖 2.1 Low Power電壓為 0~1.2V,此模式下較容易使用示波器或是邏輯分析儀 量到波形而 High Speed 電壓為 100~300mV,頻率為 80M ~ 1Gbps/Lane ( 可先降速度至 80Mhz量測波型,例如超過 200 Mhz 且要測量多 Channel,需要很高規格的示波器 )
(1) Command mode 使用 Lane 0,雙向傳輸模式
(2) Escape mode 算是 Command mode 的特例,在 Low Power,只使用 Lane 0 的D+/ D- 來傳輸命令與資料
(3) Video mode 一般只有在 high speed 才支援,在高速傳輸下,才會區分 Lane 1~ N ( 目前的panel 以 1、 2 Lane 較多 ),只有差分模式的單向傳輸,此模式沒有雙向
3 MIPI DSI 命令模式
MIPI DSI 在初始化時,會先進入 Escape mode ,再 0x87 ( 左端的 bit 為低位元,往右依序為高位元 ) 進入 Low speed mode,頻率為 10Mhz 以下,電壓為 0~ 1.2V 之間的變化,這裡用一個 初始值的波形來說明,如圖 3.1
圖 3.2
Entry Escape mode : LP11->LP10->LP00->LP01->LP00 ( 波型如圖 3.2 )
(示波器波形的黃色為 D0+ ,藍色為 D0- ,所以 LP11 為 D0+ high 且D0- 也為 high)
1110_0001 bit 由左為 low 反過來讀為 1000_0111 => 0x87 ( escape mode header to low speed mode );
1100_0100 bit 由左為 low 反過來讀為 0010_0011 => 0x23 ( Generic Short WRITE, 2 parameters ,用此命令需要 Panel driver 規格書 );
0101_1100 bit 由左為 low 反過來讀為 0011_1010 => 0x3A ( register =>不同的 Panel driver 的 register 也不同 );
1110_1110 bit 由左為 low 反過來讀為 0111_0111 => 0x77 ( DATA );
1111_1000 bit 由左為 low 反過來讀為 0001_1111 => 0x1F ( ECC );
Exit Escape mode : LP10-> LP11;
此波形的第2 bytes 為 Generic Short WRITE 2 parameters 是 DSI 的 data Type ,可參考 MIPI DSI 的規格書,如『圖3.3』( 註2 )
何謂 MIPI DSIMIPI是Mobile Industry Processor Interface 的縮寫,一般是指MIPI 聯盟,而 MIPI DSI ( MIPI Display Serial Interface ) 是 MIPI 聯盟製定的 顯示串列介面的規範。
https://www.mipi.org/specifications/dsi#
1.1 MIPI DSI 方塊圖
MIPI DSI 的 傳輸方塊圖,如『圖1.1.1』( 註1 )
『圖1.1.1』( 註1 )
2 MIPI DSI 傳輸模式
MIPI DSI支援 Command mode,Escape mode 和 Video mode 。
開始使用示波器量測時,要先量測 Clock+/Clock-,還有 D0+/D0-。
如圖 2.1 Low Power電壓為 0~1.2V,此模式下較容易使用示波器或是邏輯分析儀 量到波形而 High Speed 電壓為 100~300mV,頻率為 80M ~ 1Gbps/Lane ( 可先降速度至 80Mhz量測波型,例如超過 200 Mhz 且要測量多 Channel,需要很高規格的示波器 )
(1) Command mode 使用 Lane 0,雙向傳輸模式
(2) Escape mode 算是 Command mode 的特例,在 Low Power,只使用 Lane 0 的D+/ D- 來傳輸命令與資料
(3) Video mode 一般只有在 high speed 才支援,在高速傳輸下,才會區分 Lane 1~ N ( 目前的panel 以 1、 2 Lane 較多 ),只有差分模式的單向傳輸,此模式沒有雙向
圖 2.1
3 MIPI DSI 命令模式
MIPI DSI 在初始化時,會先進入 Escape mode ,再 0x87 ( 左端的 bit 為低位元,往右依序為高位元 ) 進入 Low speed mode,頻率為 10Mhz 以下,電壓為 0~ 1.2V 之間的變化,這裡用一個 初始值的波形來說明,如圖 3.1
圖 3.1
圖 3.2
Entry Escape mode : LP11->LP10->LP00->LP01->LP00 ( 波型如圖 3.2 )
(示波器波形的黃色為 D0+ ,藍色為 D0- ,所以 LP11 為 D0+ high 且D0- 也為 high)
1110_0001 bit 由左為 low 反過來讀為 1000_0111 => 0x87 ( escape mode header to low speed mode );
1100_0100 bit 由左為 low 反過來讀為 0010_0011 => 0x23 ( Generic Short WRITE, 2 parameters ,用此命令需要 Panel driver 規格書 );
0101_1100 bit 由左為 low 反過來讀為 0011_1010 => 0x3A ( register =>不同的 Panel driver 的 register 也不同 );
1110_1110 bit 由左為 low 反過來讀為 0111_0111 => 0x77 ( DATA );
1111_1000 bit 由左為 low 反過來讀為 0001_1111 => 0x1F ( ECC );
Exit Escape mode : LP10-> LP11;
此波形的第2 bytes 為 Generic Short WRITE 2 parameters 是 DSI 的 data Type ,可參考 MIPI DSI 的規格書,如『圖3.3』( 註2 )
『圖3.3』( 註2 )
若是無法確認 Panel Driver 的 命令是否正確,也可以先使用 0x05,0x15 的 DCS ( Display Command Set ),這些命令是所有的 MIPI DSI panel 都是相同的,可以參考 MIPI DCS 的規格書,如『圖3.4~3.5』( 註3 ),
有些 MIPI DSI panel 廠商給的 初始化,是不包含 DSC 命令的,這時候就最好能再自行加上exit_sleep_mode 的 0x11 和 set_display_on 的 0x29,以 圖 3.4~3.5 ( 註3 ) 來說,exit_sleep_mode 的參數為0 ,所以DSC 的命令下法 =>
Entry Escape mode > 0x87( Entry Low power mode ) > 0x05 ( DSC no parameter )> 0x11 ( exit_sleep_mode ) > 0x00 ( no parameter always 0 ) > 0x36 ( ECC ) > Exit Escape mode
Entry Escape mode > 0x87( Entry Low power mode ) > 0x05 ( DSC no parameter )> 0x29 ( set_display_on ) > 0x00 ( no parameter always 0 ) > 0x1C ( ECC ) > Exit Escape mode
『圖3.4』( 註3 )
『圖3.5』( 註3 )
4 MIPI DSI ECC 的算法ECC 是由 data type ,register 和 data 總共 24 bit 算出來的,從左邊開始是 D0 ,依序至右至 D23 ,如圖 3.1的波形所示,
所以 0x87,0x23, 0x3A , 0x77 的 24 bit 為=> 0x77 3A 23 => 0111 0111 0011 1010 0010 0011,
P7~P0 為 ECC 的bit 公式
P7=0
P6=0
P5=D10^D11^D12^D13^D14^D15^D16^D17^D18^D19^D21^D22^D23
P4=D4^D5^D6^D7^D8^D9^D16^D17^D18^D19^D20^D22^D23
P3=D1^D2^D3^D7^D8^D9^D13^D14^D15^D19^D20^D21^D23
P2=D0^D2^D3^D5^D6^D9^D11^D12^D15^D18^D20^D21^D22
P1=D0^D1^D3^D4^D6^D8^D10^D12^D14^D17^D20^D21^D22^D23
P0=D0^D1^D2^D4^D5^D7^D10^D11^D13^D16^D20^D21^D22^D23
P5 = 0111 0111 0011 1010 0010 0011 = 0 ( 雙個1)
P4 = 0111 0111 0011 1010 0010 0011 = 1 ( 單個1 )
P3 = 0111 0111 0011 1010 0010 0011 = 1
P2 = 0111 0111 0011 1010 0010 0011 = 1
P1 = 0111 0111 0011 1010 0010 0011 = 1
P0 = 0111 0111 0011 1010 0010 0011 = 1
ECC =P7~P0 = 00011111 = 0x1F => 算出的值與波形一致
若是其中1個 bit 出錯,例如 D0 出錯 變成了 0x77 3A 22
P5 = 0111 0111 0011 1010 0010 0010 = 0 ( 雙個1)
P4 = 0111 0111 0011 1010 0010 0010 = 1 ( 單個1 )
P3 = 0111 0111 0011 1010 0010 0010 = 1
P2 = 0111 0111 0011 1010 0010 0010 = 0
P1 = 0111 0111 0011 1010 0010 0010 = 0
P0 = 0111 0111 0011 1010 0010 0010 = 0
P7~P0 XOR ECC = 0x18 XOR 0x1F ( ECC ) = 0x07=> 在 P2 , P1 , P0 同時存在的 Bit 為 D0 所以D0有誤,需從 0 改 1
24bit 的錯誤資料 0x77 3A 22 經由 ECC 修正之後為=> 0x77 3A 23
5 參考資料
註1 : 作者: NXP 原廠;出處 : https://www.nxp.com/docs/zh/application-note/AN12940.pdf
註2 : 作者: MIPI Alliance, Inc;出處 : https://www.mipi.org/specifications/dsi
註3 : 作者: MIPI Alliance, Inc;出處 : https://www.mipi.org/specifications/display-command-set