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,转载请注明原文链接:https://www.cnblogs.com/xjxcxjx/p/18909546,谢绝CSDN转载!
浙公网安备 33010602011771号