RK3576屏幕最底下一行刷新異常調試
屏幕是RGB565的屏幕,而RK3576用的MIPI接口,因此使用了ICN6211作為RGB轉接板轉發MIPI信號為RGB信號給屏幕。
轉接板是實習生調試的,最終的效果是最下面一行還有閃爍未解決。
通過跑LVGL的benckmark時候的結果頁面發現,最下面一行其實刷新的是第一行的內容。這樣問題就很明顯了,就是垂直信號刷快了,把垂直前后沿的值調大就行了。
屏幕的DTS配置如下:
1 &dsi_panel{ 2 status = "okay"; 3 compatible = "simple-panel-dsi"; 4 reg = <0>; 5 backlight = <&backlight>; 6 power-supply = <&vcc_lcd>;//指定了LCD面板的電源供應器。 7 8 enable-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;//啟用顯示面板的GPIO引腳 9 reset-gpios = <&gpio0 RK_PB0 GPIO_ACTIVE_LOW>;//重置顯示面板的GPIO引腳。 10 11 //指定了各種操作(重置、啟用、準備、取消準備、禁用、初始化)之間的延遲時間。 12 reset-delay-ms = <200>; 13 enable-delay-ms = <300>; 14 prepare-delay-ms = <200>; 15 unprepare-delay-ms = <300>; 16 disable-delay-ms = <300>; 17 init-delay-ms = <600>; 18 //指定面板的物理尺寸。 19 //width-mm = <71>; 20 //height-mm = <105>; 21 //指定了DSI接口的一些模式標志,包括視頻模式、視頻突發模式、低功耗模式和不使用EOT包。 22 //dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>; 23 //dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET)>; 24 dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM)>; 25 dsi,format = <MIPI_DSI_FMT_RGB565>;//DSI接口傳輸的像素格式,這里是24位RGB。 26 dsi,lanes = <2>;//DSI接口使用的數據線數量。 27 //15 00 02 B1 38 28 //定義一個數組,數組中包含了初始化面板時發送的命令序列。 29 panel-init-sequence = [ 30 23 00 02 7A C1 31 23 00 02 20 20 32 23 00 02 21 E0 33 23 00 02 22 13 34 23 00 02 23 37 35 23 00 02 24 04 36 23 00 02 25 55 37 23 00 02 26 00 38 23 00 02 27 08 39 23 00 02 28 04 40 23 00 02 29 1F 41 23 00 02 34 80 42 23 00 02 36 37 43 23 00 02 86 29 44 23 00 02 B5 A0 45 23 00 02 5C FF 46 23 00 02 2A 01 47 23 00 02 56 92 48 23 00 02 6B 72 49 23 00 02 69 24 50 23 00 02 10 40 51 23 00 02 11 88 52 23 00 02 B6 20 53 23 00 02 51 20 54 23 00 02 09 10 55 //05 78 01 11 56 //05 64 01 29 57 //05 78 01 11 58 //05 1E 01 29 59 ]; 60 61 panel-exit-sequence = []; 62 pinctrl-names = "default"; 63 pinctrl-0 = <&asclcdm0_stbyb>, <&asclcdm0_rst>; 64 65 disp_timings: display-timings { 66 native-mode = <&dsi_timing0>; 67 //面板的默認顯示模式。 68 dsi_timing0: timing0 { 69 clock-frequency = <25000000>; 70 hactive = <800>; 71 vactive = <480>; 72 hsync-len = <4>; 73 hback-porch = <85>; 74 hfront-porch = <55>; 75 vsync-len = <4>; 76 vback-porch = <31>; 77 vfront-porch = <8>; 78 hsync-active = <0>; 79 vsync-active = <0>; 80 de-active = <0>; 81 pixelclk-active = <0>; 82 }; 83 }; 84 85 ports { 86 #address-cells = <1>; 87 #size-cells = <0>; 88 89 port@0 { 90 reg = <0>; 91 panel_in_dsi: endpoint { 92 remote-endpoint = <&dsi_out_panel>; 93 }; 94 }; 95 }; 96 97 98 };
修改vback-porch & vfront-porch發現不起作用。問了deep seek也是給的這個建議。
然后想起來同事以前說過,轉接板需要調初始化序列來控制,使用廠家給的工具來生成初始化序列控制命令
ICN6211 Config.exe
同時繼續問deep seek的意見。




1已經試了沒用。使用2試了下也沒改變。3看著有用,先加上。
同步使用ICN6211 Config.exe生成初始化序列控制命令發現,
VFP = 27
VBP = 29
上面deep seek給的調22/23當然沒用。
最終調節的值如下時終于解決了此問題
1 23 00 02 27 58 //VFP 2 23 00 02 28 04 3 23 00 02 29 3F //VBP
下一步排除無用項
首先就是刪除flags
MIPI_DSI_MODE_VIDEO_SYNC_PULSE // 啟用同步脈沖
第一次刪除的時候是能解決此問題的,但是等在刪除這項后調整VFP & VBP的值的時候發現失效了。即使 將
VFP & VBP再修改回58 & 3F,也沒用了。再加回MIPI_DSI_MODE_VIDEO_SYNC_PULSE 才恢復。
最終鎖定方案就是
MIPI_DSI_MODE_VIDEO_SYNC_PULSE + VFP & VBP
1 &dsi_panel{ 2 status = "okay"; 3 compatible = "simple-panel-dsi"; 4 reg = <0>; 5 backlight = <&backlight>; 6 power-supply = <&vcc_lcd>;//指定了LCD面板的電源供應器。 7 8 enable-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;//啟用顯示面板的GPIO引腳 9 reset-gpios = <&gpio0 RK_PB0 GPIO_ACTIVE_LOW>;//重置顯示面板的GPIO引腳。 10 11 //指定了各種操作(重置、啟用、準備、取消準備、禁用、初始化)之間的延遲時間。 12 reset-delay-ms = <200>; 13 enable-delay-ms = <300>; 14 prepare-delay-ms = <200>; 15 unprepare-delay-ms = <300>; 16 disable-delay-ms = <300>; 17 init-delay-ms = <600>; 18 //指定面板的物理尺寸。 19 //width-mm = <71>; 20 //height-mm = <105>; 21 //指定了DSI接口的一些模式標志,包括視頻模式、視頻突發模式、低功耗模式和不使用EOT包。 22 //dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>; 23 //dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET)>; 24 dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_VIDEO_SYNC_PULSE)>; 25 dsi,format = <MIPI_DSI_FMT_RGB565>;//DSI接口傳輸的像素格式,這里是24位RGB。 26 dsi,lanes = <2>;//DSI接口使用的數據線數量。 27 //15 00 02 B1 38 28 //定義一個數組,數組中包含了初始化面板時發送的命令序列。 29 panel-init-sequence = [ 30 23 00 02 7A C1 31 23 00 02 20 20 32 23 00 02 21 E0 33 23 00 02 22 13 34 23 00 02 23 37 35 23 00 02 24 04 36 23 00 02 25 55 37 23 00 02 26 00 38 23 00 02 27 58 //VFP 39 23 00 02 28 04 40 23 00 02 29 3F //VBP 41 23 00 02 34 80 42 23 00 02 36 37 43 23 00 02 86 29 44 23 00 02 B5 A0 45 23 00 02 5C FF 46 23 00 02 2A 01 47 23 00 02 56 92 48 23 00 02 6B 72 49 23 00 02 69 24 50 23 00 02 10 40 51 23 00 02 11 88 52 23 00 02 B6 20 53 23 00 02 51 20 54 23 00 02 09 10 55 //05 78 01 11 56 //05 64 01 29 57 //05 78 01 11 58 //05 1E 01 29 59 ]; 60 61 panel-exit-sequence = []; 62 pinctrl-names = "default"; 63 pinctrl-0 = <&asclcdm0_stbyb>, <&asclcdm0_rst>; 64 65 disp_timings: display-timings { 66 native-mode = <&dsi_timing0>; 67 //面板的默認顯示模式。 68 dsi_timing0: timing0 { 69 clock-frequency = <25000000>; 70 hactive = <800>; 71 vactive = <480>; 72 hsync-len = <4>; 73 hback-porch = <85>; 74 hfront-porch = <55>; 75 vsync-len = <4>; 76 vback-porch = <63>; 77 vfront-porch = <88>; 78 hsync-active = <0>; 79 vsync-active = <0>; 80 de-active = <0>; 81 pixelclk-active = <0>; 82 }; 83 }; 84 85 ports { 86 #address-cells = <1>; 87 #size-cells = <0>; 88 89 port@0 { 90 reg = <0>; 91 panel_in_dsi: endpoint { 92 remote-endpoint = <&dsi_out_panel>; 93 }; 94 }; 95 }; 96 97 98 };
本文來自博客園,作者:xjxcxjx,轉載請注明原文鏈接:http://www.rzrgm.cn/xjxcxjx/p/18909546,謝絕CSDN轉載!
浙公網安備 33010602011771號