mipi 调试经验
以下是最近幾個(gè)月在調(diào)試?MIPI DSI / CSI?的一些經(jīng)驗(yàn)總結(jié),因?yàn)閰f(xié)議有專門(mén)的文檔,所以這里就記錄一些常用知識(shí)點(diǎn):
一、D-PHY
1、傳輸模式
LP(Low-Power) 模式:用于傳輸控制信號(hào),最高速率 10 MHz
HS(High-Speed)模式:用于高速傳輸數(shù)據(jù),速率范圍 [80 Mbps, 1Gbps] per Lane
傳輸?shù)淖钚卧獮?1 個(gè)字節(jié),采用小端的方式及 LSB first,MSB last。
2、Lane States
* ?LP mode 有 4 種狀態(tài): LP00、LP01(0)、LP10(1)、LP11 (Dp、Dn)
* HS mode 有 2 種狀態(tài): HS-0、HS-1
HS 發(fā)送器發(fā)送的數(shù)據(jù) LP 接收器看到的都是 LP00,
3、Lane Levels
* LP: 0 ~ 1.2V
* HS: 100 ~ 300mV,HS common level = 200mV,swing = 200 mv
4、操作模式
在數(shù)據(jù)線上有 3 種可能的操作模式:Escape mode, High-Speed (Burst) mode and Control mode,下面是從停止?fàn)顟B(tài)進(jìn)入相應(yīng)模式需要的時(shí)序:
* Escape mode 進(jìn)入時(shí)序:LP11→LP10→LP00→LP01→LP00,退出時(shí)序:LP10→LP11
當(dāng)進(jìn)入 Escape mode 需要發(fā)送 8-bit entry command 表明請(qǐng)求的動(dòng)作,比如要進(jìn)行低速數(shù)據(jù)傳輸則需要發(fā)送 cmd: 0x87,進(jìn)入超低功耗模式則發(fā)送 cmd: 0x78。在 DSI 中 LP 通訊只用 Data Lane 0。
* High-Speed mode 進(jìn)入時(shí)序:LP11→LP01→LP00→SoT(0001_1101),退出時(shí)序:EoT→LP11,時(shí)序圖如下:
* Turnaround 進(jìn)入時(shí)序:LP11→LP10→LP00→LP10→LP00,退出時(shí)序:LP00→LP10→LP11
這是開(kāi)啟 BTA 的時(shí)序,一般用于從 slave 返回?cái)?shù)據(jù)如 ACK: 0x84。
5、時(shí)序要求
在調(diào)試 DSI 或者 CSI 的時(shí)候, HS mode 下的幾個(gè)時(shí)序非常重要:T_LPX,T_HS-SETTLE ≈?T_HS-PREPARE + T_HS-ZERO,T_HS-TRAIL,一般遵循的原則為:Host 端的 T_HS-SETTLE > Slave 端的 T_HS-SETTLE。
二、DSI
1、線路構(gòu)成
在 DSI 中需要 1 根時(shí)鐘線以及 1 ~ 4 根數(shù)據(jù)線。
2、兩種接口的 LCD
* Command mode(對(duì)應(yīng) MPU 接口)
* Video mode(對(duì)應(yīng) RGB 接口)
該模式下視頻數(shù)據(jù)只能通過(guò) HS mode 傳輸。
3、數(shù)據(jù)包類型
?短包:4 bytes,由 3 部分組成:
* Data Identifier (DI) * 1byte: Contains the Virtual Channel[7:6] and Data Type[5:0].
* Packet Data * 2byte:Length is fixed at two bytes
* Error Correction Code (ECC) * 1byte:allows single-bit errors to be corrected and 2-bit errors to be detected.
長(zhǎng)包:6 ~ 65541 bytes,同樣由 3 部分組成:
* Packet Header(4 bytes) - 包頭
Data Identifier (DI) * 1byte:Contains the Virtual Channel[7:6] and Data Type[5:0].
Word Count (WC) * 2byte:defines the number of bytes in the Data Payload.
Error Correction Code (ECC) * 1byte:allows single-bit errors to be corrected and 2-bit errors to be detected.
* Data Payload(0~65535 bytes) - 有效數(shù)據(jù)
Length = WC × bytes
* Packet Footer(2 bytes):Checksum - 包尾
If the payload has length 0, then the Checksum calculation results in FFFFh
If the Checksum isn’t calculated, the Checksum value is 0000h
4、從控制器到外設(shè)發(fā)送的包類型
? ??
如果希望從外設(shè)讀取數(shù)據(jù)或者狀態(tài),則在處理器發(fā)送完讀取命令后還需要發(fā)送?BTA 命令,非讀取命令在外設(shè)接收成功后會(huì)返回?trigger message 0x84。
5、從外設(shè)到處理器數(shù)據(jù)包類型
? ??
返回的數(shù)據(jù)一般分為 4 個(gè)類型:
* Tearing Effect (TE):trigger message (BAh)
* Acknowledge:trigger message (84h)
* Acknowledge and Error Report:short packet (Data Type is 02h)
* Response to Read Request:short packet or long packet
Generic Read Response、DCS Read Response(1byte, 2byte, multi byte)
讀取數(shù)據(jù)返回值解析示例如下:
[cpp]?view plain?copy?? ??
* Non-Burst Mode with Sync Pulses
* Non-Burst Mode with Sync Events
* Burst Mode
* 調(diào)試記錄
? ? ? ? LCD半邊閃屏問(wèn)題,原廠給的信息:分析了系統(tǒng)板送出的 video mode timing,資訊摘要如下
? ? ? ? HSCLK: 160MHz?
? ? ? ? Per lane bit-rate: 320Mbps (UI=3.125ns)?
? ? ? ? HS SoT HS-prepare + HS-zero 約 155ns ??
? ? ? ? 由上述的 timing 懷疑與現(xiàn)象是因?yàn)?IC HS data settle timing 搭配不當(dāng)所導(dǎo)致
? ? ? ? 看來(lái)是我們輸出的mipi信號(hào) HS-prepare + HS-zero 比 LCD 默認(rèn)設(shè)置短引起的。還有隨機(jī)整屏閃動(dòng)的問(wèn)題通過(guò)調(diào)節(jié) VFP 和 VBP 的值調(diào)到了理想狀態(tài)。另外 LCD 的 VCC 在使用 mos 管控制后休眠后會(huì)有 2.0V 的懸浮電壓,通過(guò) RC 電路將電壓放掉,將 C78 換成了 10K 電阻。
? ? ? ? LCD電路上有幾個(gè)比較重要的電壓: AVDD、VCC、VGH、VGL、HAVDD、VCOM(由AVDD通過(guò)電阻分壓得到)
* 喚醒慢的問(wèn)題
在最初調(diào)試的幾款 LCD 里面初始化 cmd 都比較少,后來(lái)在調(diào)試一款 IPS 屏的時(shí)候發(fā)現(xiàn)喚醒需要 3 秒左右,這款 LCD 初始化 cmd 有100多條,之前在調(diào)試一款 LCD 的時(shí)候每條 cmd 發(fā)送之后需要 delay 10ms 再發(fā)下一條 cmd,所以在這款 LCD 這里不能有 delay,并且經(jīng)過(guò)調(diào)試在確保發(fā)送成功的情況下將 LP 的傳輸速度提高了 3 倍(這里需要讀取每條 cmd 的返回值 0x84 確認(rèn)命令是否發(fā)送成功),優(yōu)化后喚醒時(shí)間不到 1 秒。
* LCD 參數(shù)理解更正
才發(fā)現(xiàn)之前一直對(duì) LCD 的幾個(gè)參數(shù) HFP、HBP、VFP、VBP 理解有錯(cuò)誤,正確的應(yīng)該是以同步信號(hào)(HSYNC、VSYNC)為基準(zhǔn),在同步信號(hào)之前的稱為 Front,在同步信號(hào)之后的稱為 Back,而不是之前理解的以有效像素為基準(zhǔn)。
* LCD 顯示呈鋸齒狀問(wèn)題
這兩天(12.11)還調(diào)試了一款 540 x 960 分辨率的 mipi LCD,在開(kāi)始的時(shí)候一直點(diǎn)不亮,和供應(yīng)商確認(rèn)了好久無(wú)意間才發(fā)現(xiàn)是他們給的初始化代碼是錯(cuò)的,使用正確的初始化代碼就能點(diǎn)亮了,不過(guò)顯示出來(lái)的圖像卻是呈鋸齒狀的,即沒(méi)有對(duì)齊。之前在別的平臺(tái)也遇到過(guò)類似問(wèn)題,也就是分辨率不是 16 的整數(shù)倍,LCD controller 在取數(shù)據(jù)的時(shí)候會(huì)對(duì)不齊。邊研究 Datasheet 邊和 ASIC 同事討論,后來(lái)確定了一個(gè)方案:即在 DSI、LCD 寄存器里面設(shè)置分辨率為 540 x 960 以讓 LCD 正確識(shí)別信號(hào),但 framebuffer 需要設(shè)置為 544 x 960 以對(duì)齊,并且設(shè)置?Source pitch 寄存器為 544,這樣顯示就正常了,相當(dāng)于 framebuffer 里每一行的最后 4 個(gè) pixel 會(huì)被 LCD controller 丟掉。
今天(12.12)在和 ASIC 同事的討論下更正了之前的理解:LCD controller?在計(jì)算取數(shù)據(jù)的時(shí)候,地址是根據(jù)(x,y)坐標(biāo)來(lái)算的,差不多是address = y * pitch + x + base,pitch 就是一行 pixel 在內(nèi)存里的大小,這個(gè)至少是要對(duì)齊到 8byte, 因?yàn)?bus 寬度是 8byte,如 Data sheet 中的描述?”Source pitch for RGB channel, QWORD aligned if linear mode“。之前計(jì)算 pitch 值的公式為:xres / 8 * bits_per_pixel / 8,如果 xres = 540,bits_per_pixel = 32,計(jì)算的結(jié)果因?yàn)槿≌脑驗(yàn)?0x10c,實(shí)際上正確的值應(yīng)該是 0x10e,所以需要將公式改為:xres * (bits_per_pixel / 8) / 8,即在每個(gè)像素占 4byte 的情況下只要 xres 為偶數(shù)就可以滿足對(duì)齊的要求,而不用改為 544。
總結(jié)
- 上一篇: 不同分辨率及其字母简称
- 下一篇: 关于LCD的分屏与切屏 Tearing