您好,
,我正在使用 Variscite SOM VAR-SOM-MX8M-PLUS(您可以通过谷歌搜索该 SOM 型号找到他们的网站),该 SOM 使用 LVDS,用于 640x480 60Hz LCD。在使用规格表中的显示时序参数时,我无法获得稳定的 LCD 图像。
synthesys_0-1779842178027.png
我的设备树发生了变化:
#include "imx8mp-var-som-symphony.dts" / { panel { compatible = "panel-lvds"; backlight = <&backlight>; width-mm = <211>; height-mm = <158>; label = "640x480"; data-mapping = "jeida-24"; status = "okay"; panel-timing { clock-frequency = <25175000>; hactive = <640>; vactive = <480>; hback-porch = <40>; hfront-porch = <8>; vback-porch = <25>; vfront-porch = <2>; hsync-len = <96>; vsync-len = <2>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; }; port { panel_in: endpoint { remote-endpoint = <&lvds_out>; }; }; }; }; &clk { assigned-clock-rates = <0>, <0>, <1000000000>, <800000000>, <500000000>, <400000000>, <800000000>, <393216000>, <361267200>, <352450000>; }; &media_blk_ctrl { assigned-clock-rates = <500000000>, <200000000>, <0>, <0>, <352450000>; }; &ldb { status = "okay"; lvds-channel@0 { fsl,data-mapping = "jeida"; fsl,data-width = <24>; status = "okay"; port@1 { reg = <1>; lvds_out: endpoint { remote-endpoint = <&panel_in>; }; }; }; };
我更新了 PLL 时钟,以反映 25.175 MHz 的像素时钟(25.175 * 14 = 352.450MHz)。 352.450 MHz)。我还添加了其他时钟,以防有不同的乘数(不仅仅是 14)。
static const struct imx_pll14xx_rate_table imx_pll1443x_tbl[] = { PLL_1443X_RATE(1039500000U, 173, 2, 1, 16384), /* 74.25 MHz */ PLL_1443X_RATE(910000000U, 455, 3, 2, 0), /* 65 MHz */ PLL_1443X_RATE(1040000000U, 208, 3, 1, 0), /* 65 MHz */ PLL_1443X_RATE(455000000U, 379, 5, 2, 10923), /* 65 MHz */ PLL_1443X_RATE(650000000U, 325, 3, 2, 0), PLL_1443X_RATE(594000000U, 198, 2, 2, 0), PLL_1443X_RATE(519750000U, 173, 2, 2, 16384), /* 37.125 MHz */ /*PLL_1443X_RATE(420000000U, 175, 5, 1, 0),*/ /* 30 MHz */ PLL_1443X_RATE(393216000U, 262, 2, 3, 9437), /*PLL_1443X_RATE(378000000U, 126, 4, 1, 0),*/ /* 27 MHz */ PLL_1443X_RATE(361267200U, 361, 3, 3, 17511), PLL_1443X_RATE(352450000U, 220, 15, 0, 18432), /* 25.175 MHz */ PLL_1443X_RATE(400000000U, 200, 3, 2, 0), /* 25 MHz */ PLL_1443X_RATE(700000000U, 175, 3, 1, 0), /* 25 MHz */ PLL_1443X_RATE(350000000U, 175, 6, 1, 0), /* 25 MHz */ PLL_1443X_RATE(245760000U, 328, 4, 3, 0xae15), PLL_1443X_RATE(225792000U, 226, 3, 3, 0xcac1), PLL_1443X_RATE(122880000U, 328, 4, 4, 0xae15), PLL_1443X_RATE(112896000U, 226, 3, 4, 0xcac1), PLL_1443X_RATE(61440000U, 328, 4, 5, 0xae15), PLL_1443X_RATE(56448000U, 226, 3, 5, 0xcac1), PLL_1443X_RATE(49152000U, 393, 3, 6, 0x374c), PLL_1443X_RATE(45158400U, 241, 2, 6, 0xd845), PLL_1443X_RATE(40960000U, 109, 1, 6, 0x3a07), };
我已经注释掉了 imx8mp-ldb.c 中的硬编码时钟
/* * Due to limited video PLL frequency points on i.MX8mp, * we do mode fixup here in case any mode is unsupported. */ /*if (ldb->dual) mode->clock = mode->clock > 100000 ? 148500 : 74250; else mode->clock = 74250;*/ return 0;
已验证板载 PLL 时钟:
root @imx8mp-var-dart:~# cat /sys/kernel/debug/clk/
video_pll1/clk_pll1/clk_rate 352450000 照片看起来像这样
synthesys_1-1779843340131.png
请就下一步的尝试提出建议。
谢谢,
Jon
请参阅面板规格,您似乎没有设置正确的时序,h_total 是 800,v_total 是 525,请仔细检查。
我更新了计时,总时长等于 800 小时,总 vtotal 等于 525 vtotal。照片出来的效果是一样的。
我在示波器上测量了时钟,像素时钟的频率为 25MHz,但垂直和水平同步不稳定。
IMX8MP 能否支持 640x480?为什么 h/v 同步时序不会不稳定?
我们有同样的 imx6solox 液晶显示屏,没有任何问题(内核 4.9),设备树中的面板设置很简单,很简单,可以立即使用。
您好@synthesys
,能否分享您当前的时序设置?
,
Zhiming。
你好,以下是当前的时间安排。
panel {
compatible = "panel-lvds";
backlight = <&backlight>;
width-mm = <211>;
height-mm = <158>;
label = "640x480";
data-mapping = "jeida-24";
status = "okay";
panel-timing {
clock-frequency = <25175000>;
hactive = <640>;
vactive = <480>;
hback-porch = <46>;
hfront-porch = <8>;
vback-porch = <38>;
vfront-porch = <4>;
hsync-len = <106>;
vsync-len = <3>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
};
port {
panel_in: endpoint {
remote-endpoint = <&lvds_out>;
};
};
};我附上了液晶显示器的数据表和时序的具体页面。我们有一块液晶显示板可以将 LVDS 转换为并行 RGB。正如我之前提到的,同样的 LCD 在 IMX6SoloX 上也能正常工作。
由于某些原因,12.5MHz 的图像看起来很棒,但刷新率只有 30Hz。我想使用的规格是 25MHz @ 60 Hz 刷新率。
Zhiming,
我尝试了新的定时,图像仍然很差,与我在原帖中发布的图片相似。我想解决办法可能不是改变这些面板的时序。
设备树或者内核中还有其他需要的东西才能启用此功能吗?
我试着更改 PLL(像素时钟 x 7 或像素时钟 x 14),问题依然如故。
还有其他建议吗?
感谢您一直以来对这个问题的支持。
乔恩
我检查了数据表和您的 dts 中的定时参数。
数据表:
在 Linux 中,htotal = hactive + hfront_porch + hsync_len + hback_porch
您使用的是 hsync-active=0,这意味着hsync_len + hback_porch = THS = 144 、 hsync_len = TWH = 30 根据数据手册,所以
hback_porch = 144 - 30 = 114
垂直方向也类似,因此我建议您尝试以下参数。
panel-timing {
clock-frequency = <25175000>;
hactive = <640>;
vactive = <480>;
hfront-porch = <16>;
hsync-len = <30>;
hback-porch = <114>;
vfront-porch = <10>;
vsync-len = <3>;
vback-porch = <32>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
};
致敬,
Zhiming
您好 @synthesys
您可以尝试将 imx8mp-ldb.c 中的以下部分修改为所需的 `mclock` 值,而不是使用注解。
对 `mclock` 的这一修改对我来说确实有效。
你好@刘志明还有其他建议吗?更改 PLL 或驱动程序代码?
@Zhiming_Liu@JESON@joanxie
大家好,看来问题出在硬件上。我们需要在几条 LVDS 线上添加电阻。我们可以关闭此工单。感谢大家的建议。