平台:RK3399 Ubuntu20.04
屏幕:LVDS 1280*800,HDMI 1920*1080,其中LVDS是通过GM8775C转dsi0转出来的
问题:HDMI不显示,插上以后一直报错
[ 129.133762] dw-mipi-dsi ff960000.dsi: An overflow occurs in the DPI pixel payload FIFO
[ 129.141756] dw-mipi-dsi ff960000.dsi: Host reports that the configured timeout counter for the high-speed transmission has expired
[ 129.153495] dw-mipi-dsi ff960000.dsi: An overflow occurs in the DPI pixel payload FIFO
[ 129.161489] dw-mipi-dsi ff960000.dsi: Host reports that the configured timeout counter for the high-speed transmission has expired
[ 129.173221] dw-mipi-dsi ff960000.dsi: An overflow occurs in the DPI pixel payload FIFO
[ 129.181215] dw-mipi-dsi ff960000.dsi: Host reports that the configured timeout counter for the high-speed transmission has expired
[ 129.192947] dw-mipi-dsi ff960000.dsi: An overflow occurs in the DPI pixel payload FIFO
[ 129.200935] dw-mipi-dsi ff960000.dsi: Host reports that the configured timeout counter for the high-speed transmission has expired
[ 129.212667] dw-mipi-dsi ff960000.dsi: An overflow occurs in the DPI pixel payload FIFO
[ 129.220670] dw-mipi-dsi ff960000.dsi: Host reports that the configured timeout counter for the high-speed transmission has expired
似乎是DPI像素负载FIFO发生溢出,还没有深入了解。
解决办法:原本给dsi用的是vopb,HDMI是vopl
&dsi_in_vopl {
status = "disabled";
};
&dsi_in_vopb {
status = "okay";
};
&route_dsi {
status = "okay";
connect = <&vopb_out_dsi>;
};
&hdmi {
status = "okay";
rockchip,phy-table =
<74250000 0x8009 0x0004 0x0272>,
<165000000 0x802b 0x0004 0x0209>,
<297000000 0x8039 0x0005 0x028d>,
<594000000 0x8039 0x0000 0x019d>,
<000000000 0x0000 0x0000 0x0000>;
};
&hdmi_sound {
status = "okay";
};
&route_hdmi {
status = "okay";
};
&hdmi_in_vopl{
status = "okay";
};
&hdmi_in_vopb{
status = "disabled";
};
然后尝试将他们对调,让dsi用vopl,HDMI用vopb,HDMI就有显示了
&dsi_in_vopl {
status = "okay";
};
&dsi_in_vopb {
status = "disabled";
};
&route_dsi {
status = "okay";
connect = <&vopl_out_dsi>;
};
&hdmi {
status = "okay";
rockchip,phy-table =
<74250000 0x8009 0x0004 0x0272>,
<165000000 0x802b 0x0004 0x0209>,
<297000000 0x8039 0x0005 0x028d>,
<594000000 0x8039 0x0000 0x019d>,
<000000000 0x0000 0x0000 0x0000>;
};
&hdmi_sound {
status = "okay";
};
&route_hdmi {
status = "okay";
};
&hdmi_in_vopl{
status = "disabled";
};
&hdmi_in_vopb{
status = "okay";
};
解决了这个问题,又出现了新的问题,因为两个屏幕分辨率不一样,副屏HDMI显示有问题
找了半天,发现可以通过命令解决,可以先xrandr查看一下自己的显示屏信息,这个命令就是让HDMI的分辨率跟随DSI的1280*800
xrandr --output DSI-1 --auto --output HDMI-1 --mode 1280x800 --same-as DSI-1
但是如果这个命令直接放/etc/rc.local里面没用,加延时也没用,于是将搞了一个脚本文件xrandr_hdmi.sh,把指令放里面,然后在/etc/rc.local加命令去执行这个脚本
sleep 4
sudo su - root -c "/usr/bin/xrandr_hdmi.sh&"
期间还遇到两个小问题,一是sleep 3不行,4才可以,应该是DSI-1 和HDMI-1没有加载出来,需要sleep久一点,二是第一次写脚本是在本地写的,拷贝到开发板上发现不行,会报错
root@lubuntu:~# sudo su - root -c "/usr/bin/xrandr_hdmi.sh&"
"randr: cannot find output "DSI-1
最后直接在板子上touch一个脚本操作了,问题就解决了。
不过这种办法还是会有不足之处,就是每次开机去设置HDMI的分辨率,一旦开机之前没有插上HDMI或者开机后HDMI断开的话,就又要重启了,暂时还没去想永久解决这个问题的办法。