rk3288 mipi 調試步驟

https://blog.csdn.net/dearsq/article/details/52354593(參考:CSDN博客)
https://www.2cto.com/kf/201708/670726.html(參考:CSDN博客)
https://www.cnblogs.com/lialong1st/p/9952077.html(參考:CSDN博客)
// lcd-xxx-mipi.dtsi 中的 屏參

disp_timings: display-timings {
        native-mode = <&timing0>;
        compatible = "rockchip,display-timings";
        timing0: timing0 {
            screen-type = <SCREEN_MIPI>;        //單mipi SCREEN_MIPI 雙mipi SCREEN_DUAL_MIPI
            lvds-format = <LVDS_8BIT_2>;        //不用配置
            out-face    = <OUT_P888>;       //屏的接線格式 
            //配置顏色,可爲OUT_P888(24位)、OUT_P666(18位)或者OUT_P565(16位)
            clock-frequency = <120000000>;      //dclk頻率,看規格書,或者 H×V×fps
            hactive = <540>;            //水平有效像素
            vactive = <960>;            //垂直有效像素
            hback-porch = <80>;         //水平同步信號
            hfront-porch = <81>;          //水平同步信號
            vback-porch = <21>;
            vfront-porch = <21>;            
            hsync-len = <10>;           //水平同步信號
            vsync-len = <3>;
            hsync-active = <0>;         //hync 極性控制 置 1 反轉極性
            vsync-active = <0>;
            de-active = <0>;            //DEN 極性控制
            pixelclk-active = <0>;          //dclk 極性控制
            swap-rb = <0>;              //設 1 反轉顏色
            swap-rg = <0>;
            swap-gb = <0>;

clock-frequency:

即DCLK(dotc clock), PCLK(pixel clock).
clock-frequency = (h_active + hfp + hbp + h_sync) * (v_active + vfp + vbp + v_sync) * fps
廠商給的參考值是58.2MHz, 那麼fps就是:
fps = 58200000 / (480 + 160 + 160 +24) * (1280 + 12 + 10 + 2) = 54Hz

這裏需要說明的一點是,Android 的最高刷新頻率爲 60fps,所以我們最好保證
LCDC 的刷新頻率也爲 60fps,根據文檔第一部分介紹的 LCDC 的刷新頻率計算公式可以知道,LCDC 的刷新頻率和 DCLK 成正比,和水平方向與垂直方向參數之和的乘積成反比。根據屏幕的 datasheet 我們可以看出,對於一款屏幕 H_VD/V_VD 對應屏幕的分辨率,值是固定的不能修改,BP、FP、PW 的值都有一個最大值和最小值的取值範圍,所以當我們的 DCLK 分配不到想要的頻率的時候,可以適當的調整 BP、FP、PW是的 LCDC的刷新率儘可能的接近 60FPS。

LCD之mipi DSI接口驅動調試流程
https://blog.csdn.net/liwei16611/article/details/68146912

一、屏的基本參數說明
水平分辨率:hactive 垂直分辨率:vactive
水平前尖:hfront-porch(HFP) 垂直前尖:vfront-porch(VFP)
水平後尖:hback-porch(HBP) 垂直後尖:vback-porch(VBP)
水平消隱信號:hsync-len(HS) 垂直消隱信號:vsync-len(VS)
1.lane-rate= clk(時鐘頻率) * RGB(3) * BIT(6或8) / lane_num ,lane_num表示差分時鐘通道數,具體數值要根據實際情況修改。注:以上公式的值計算出來後,rk3288裏面需要*1.25,因爲配置會比實際輸出會低一點
2…clock-frequency=(水平分辨率+HS+HBP+HFP)(垂直分辨率+VS+VBP=VFP)*fps(幀頻率);
3.dsi,format表示RGB三原色用多少位表示,如六位:dsi.format=<MIPI_DSI_FMT_RGB666>;八位:dsi.format=<MIPI_DSI_FMT_RGB888>,lane-rate計算公式中的RGB與BIT值根據format參數得出;
二、通過時序圖分析水平和垂直各個參數:
下圖是行同步信號:HS 裏面的864=16+32+800+16,我們可以看到在DE 爲高電平時,HS 爲低電平的時候就是有效的數據,即屏的水平像素爲800。在HS 爲高電平時,DE 是低電平,意思就是這個時候不需要顯示數據,需要去消隱,就是hsync。在往後的32 個像素,就是屏真正的信號出來前的無效信號長度,因爲如果我們直接出來,很可能會丟數據和出現雜波,多這32 個像素是爲了防止這種情況,就是上面提到的HBP 參數,最後的16 像素,也是同理。所以一個完整的行信號是=hsync+hbp+hactive+hfp。

下圖是場同步信號,其他的和行同步信號是一致,只不過這個裏面在DE 爲高電平時裏面就是1280 個行同步信號。可能有點繞口,但是我們一定要理解,以這個800x1280 的屏爲例,就是說屏幕上有800x1280 的dot,如果一個點一個點的在屏幕上顯示,當水平顯示800 個dot 後,就會有一個行同步信號,也就是800x1,然後轉到第二行繼續顯示800 個然後出一個行同步信號,就是800x2,以此類推一直到800x1280,這個時候就會出一個場信號,告訴屏我一幀的畫面已經畫完了,現在要開始下一幀了。

在這裏插入圖片描述
在這裏插入圖片描述
三、基本步驟
1.先查看屏的規格說明書,確認屏的類型以及屏的具體型號,這很重要,確定之後,才能確定需要修改那個dts文件;

2.把全部代碼編譯一遍,使用AndroidTools工具將所有img文件下載到板子上,看能否發現ADB設備,能發現ADB設備表示代碼可以跑起來;

4.修改dts文件,在autobuild.sh文件中修改編譯規則,根據修改的dts文件編譯相應的鏡像文件

屏參先按規格說明書給出的標準參數填,如下圖所示:

如果標準參數的點不亮,再嘗試最大和最小,如果都點不亮,則需要慢慢修改參數調試;

CLK如果不準確 可以按照20MHZ增大或減小的邏輯調,如原來是150MHZ,可減小或增大20MHXZ,相應的,lane-rate值也要根據公式做出相應的改變,注意,如果一直都點不亮,可查看屏幕排線有沒有接好,或者可能是硬件部分有問題。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
初始化代碼解析(MIPI必須有初始化代碼才能點亮,這個有原廠提供):

panel-init-sequence = [
     39 00 06 f0 55 aa 52 08 00
     ..................................................
     05 96 01 29
   ];

說明:前 3 個字節(16 進制),分別代表 Data Type,Delay,Payload Length。
從第四個字節開始的數據代表長度爲 Length 的實際有效 Payload。

第一條命令的解析如下:39 00 06 f0 55 aa 52 08 00
Data Type:0x39 (DCS Long Write)
Delay:0x00 (0 ms)
Payload Length:0x06 (4 Bytes)
Payload:f0 55 aa 52 08 00
最後一條命令的解析如下:
05 96 01 29
Data Type:0x05 (DCS Short Write, no parameters)
Delay:0x96 (150 ms)
Payload Length:0x01 (1 Bytes)
Payload:0x29

命令的前面三個字節分別表示命令類型、延時和命令淨荷長度。從第四個字節開始表示命令的有效 payload。這個字節數需要與第三個字節一致。
命令的類型有三種 : 0x05/0x15/0x39.
其中0x05命令類型是帶1個參數,如:
05 96 01 11

0x15命令類型是帶2個參數,如:
15 00 02 36 0A

0x39命令類型是帶多個參數,即大於兩個參數,如:
39 00 0A D4 00 37 52 17 01 04 70 45 05

其中,這些命令就需要根據屏的數據手冊去尋找,比如我的屏的數據手冊中的命令如圖:
在這裏插入圖片描述
與我這幾個命令相符
15 00 02 36 0A
39 00 03 B3 0A 7F
15 00 02 B4 00
39 00 06 B5 4C 14 14 00 20

這些參數配置完了之後編譯燒錄屏就能顯示了.
遇到問題:
1.背光不能亮
檢查硬件電路,或者enable腳是否配置正確.
2.可以顯示,但是屏幕花屏
調節rockchip,lane-rate以及timings參數.
3.水平左邊有黑邊
調節前肩後肩就可以
4.字體,圖片有抖屏的現象
解決辦法有兩種辦法
1>屏蔽rockchip,lane-rate
&dsi0 {
status = “okay”;
//rockchip,lane-rate = <450>;
pinctrl-names = “default”;
pinctrl-0 = <&bl_en>, <&userled_en>;

因爲rk doc文檔有說:
Optional properties

  • clocks, clock-names:
    phandle to the SNPS-PHY config clock, name should be “phy_cfg”.
    phandle to the SNPS-PHY PLL reference clock, name should be “ref”.
    phandle to the Non-SNPS PHY high speed clock, name should be “hs_clk”.
    phandle to the h2p bridge clock, name should be “h2p”.
  • phys: phandle to Non-SNPS PHY node
  • phy-names: the string “mipi_dphy” when is found in a node, along with “phys”
    attribute, provides phandle to MIPI PHY node
  • rockchip,dual-channel: for dual-channel panel, if not, don’t configure
  • rockchip,lane-rate: manually configure lane-rate, not necessary.
    文檔路徑:
    kernel\Documentation\devicetree\bindings\display\rockchip\dw_mipi_dsi_rockchip.txt
    2>根據公式計算大概值:
    lane_rate = clock-frequency* RGB(3) * BIT(6或8) / 4;
    一般來說在3288裏面需要*1.25,因爲配置會比實際輸出會低一點

RK3326\kernel\Documentation\devicetree\bindings\display\rockchip路徑下有幫助文檔,介紹dts
原文鏈接:https://blog.csdn.net/Shushan1/article/details/87858434

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章