本文轉載自:http://www.voidcn.com/blog/LoongEmbedded/article/p-6109759.htmlhtml
1. MIPI DSIapp
DSI:displayserial interface,顯示串行接口。一個時鐘lane,一個或多個數據laneide
DSI分層結構:優化
圖1code
2. MIPI DSI協議介紹的數據包格式htm
分爲短包和長包,短包4個字節,長包6~65541個字節,無論短包仍是長包,DI(data identifer數據標識符)都是第1個字節。blog
2.1 長包格式接口
圖2ci
長包由幾部分組成get
(1) 一個32位的包頭(PH:packet Header)
由一個8位的DI、一個16位的字數(WC:word count)和一個8位的ECC。其中DI由數據的VC(virtualchannel)和具體應用的負荷數據DT(data type數據累類型)組成。WC指定datapayload中在包頭和包尾之間的字節數,不包括包頭也不包含包尾。ECC(錯誤校驗碼Error Correction Code)能夠校驗包頭中DI與WC一個位錯誤的狀況和能夠發現2位錯位的狀況。
在包頭的結尾,接收器接着讀取data payload block中data payload(WC個字節數的數據)。
(2) an application-specific datapayload with a variable number of bytes一個字節數可變的,且與具體應用工相關的數據負
(3) 一個16位的包尾(packet footer)
包腳只有一個16位的校驗和(checksum)
接收器讀了Data Payload後,會接着讀取在包尾中的Checksum。Checksum
由主處理器(host processor)計算和傳輸。須要注意的是若是Data Payload爲0字節,那麼計算出來的Checksum爲0xFFFF,若是不計算Checksum,那麼包尾由0x0000(2個字節)組成。
2.2 短包格式
圖3
短包由3部分組成:
(1) 一個8位的Data ID
(2) 兩個(命令或是數據)字節
(3) 一個8位的ECC
沒有包尾,短包固定是4個字節長度。
2.3 共同的包元素
2.3.1 數據標識符字節(data identifierbyte)
任何包的第1個字節是DI字節,它由VC和DT組成,以下圖:
圖4
(1) VC對應DI[7:6]
VC指定虛擬數據通道,最多表示4個。一個處理器最大可爲4個外設(這裏指顯示屏IC)服務,使用VC,可定位到不一樣的外設。雖然這個MIPI DSI協議容許和多個外設通信,但此協議只能用於一個主處理器到一個外設的通信。
(2) DT對應DI[5:0]
指定數據類型,好比0x06,是指DCS READ, no parameters。指定這個包是長包仍是短包和包格式,DT結合WC高通接受器這是個多少字節的長包。這是必要的,由於沒有具體包開始和結束的同步碼來指示包的開始和結束,這容許包傳輸任意數據,但仍是須要包頭來顯示指定包的長度。
當接收邏輯倒計時到包尾時,接收器假設下個數據是一個新包的包頭或是傳輸結束。
(3) 指定數據類型
2.3.2 ECC(Error Correction code)
ECC能夠校驗包頭中DI與WC一個位錯誤的狀況和能夠發現2位錯位的狀況,主處理器負責計算和傳輸一個ECC字節,外設支持正向和方向通信的ECC。
(1) ECC的規則
圖5
第一個24數據位D0~D23包含了完整的DSI包頭,因此校驗位計算可優化爲:
圖6
(2) 發送器的ECC產生
圖7
(3) 接收器的ECC產生
圖8
2.3.3
2.4 長包Payload的checksum產生
長包的包頭由一個字節的ECC保護,爲了檢測長包傳輸的錯誤,checksum基於數據包的payload部分來計算,須要注意,一個零字節長度payload的長包,其checksuam爲0xFFFF。
Checksuam只能指示payload一個或多個錯誤的出現,不像ECC,checksum不能修復錯誤。因此,checksum計算對單方向的DSI實現沒有做用,由於外設沒辦法報告錯誤給主處理器。
主處理器強制產生和發送checksum
(1) Checksum的發送
圖9
(2) Checksum的產生
圖10
(3) Checksum產生的例子
圖11
圖12