这几天在测试一款新屏幕,ST7701S MIPI接口 480*480,显示颜色和位置正常,但是屏幕会一直抖动,视频如下
测试MIPI CLK时钟时,发现频率有点奇怪,只有4MHz来着,按配置的参数,应该要去到100MHz吧
dsi clk = Bitclk / 2 = H-total x V-total x fps x 位深 / lane number / 2 = 528*501*60*24/2/2 = 95,230,080
有进行过几个排查方法:
root@TinaLinux:/# cat /sys/class/disp/disp/attr/sys
screen 0:
de_rate 300000000 hz, ref_fps:60
mgr0: 480x480 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] iommu[1]
dmabuf: cache[0] cache max[0] umap skip[0] umap skip max[66]
lcd output backlight( 50) fps:61.3 480x 480
err:0 skip:116 irq:7828 vsync:0 vsync_skip:0
BUF enable ch[1] lyr[0] z[16] prem[N] a[pixel 255] fmt[ 0] fb[ 480, 480; 480, 480; 480, 480] crop[ 0, 0, 480, 480] frame[ 0, 0, 480, 480] addr[ 0, 0, 0] flags[0x 0] trd[0,0]
硬件部分,因为有点亮过其它分辨率的屏幕,所以可以排除硬件原因。
各位大佬,能否给点建议呢?
DTS配置如下:
&lcd0 {
lcd_used = <1>; //# 启用lcd
lcd_driver_name = "st7701s"; //# 使用 default_lcd 驱动
lcd_backlight = <50>;
lcd_if = <4>; //# 0:rgb 4:dsi
lcd_dsi_if = <0>;
lcd_dsi_lane = <2>;
pinctrl-0 = <&dsi2lane_pins_a>;
pinctrl-1 = <&dsi2lane_pins_b>;
lcd_x = <480>; //# 宽度
lcd_y = <480>; //# 高度
lcd_width = <72>; //# 屏幕物理宽度,单位 mm
lcd_height = <72>; //# 屏幕物理高度,单位 mm
lcd_dclk_freq = <16>; //屏幕时钟 MHz
lcd_hbp = <28>; //hbp+hspw
lcd_ht = <528>; //lcd_x+hs+hbp+hspw
lcd_hspw = <8>; //hspw
lcd_vbp = <16>; //vbp+vspw
lcd_vt = <501>; //lcd_y+vs+vbp+vspw
lcd_vspw = <3>; //vspw
lcd_pwm_used = <1>; //# 启用背光 PWM
lcd_pwm_ch = <7>; //# 使用 PWM 通道 9
lcd_pwm_freq = <10000>; //# PWM 频率,单位 Hz
lcd_pwm_pol = <0>; //# 背光 PWM 的极性
lcd_pwm_max_limit = <255>;
lcd_dsi_format = <0>;
lcd_dsi_te = <0>;
lcd_frm = <0>;
lcd_gamma_en = <0>;
lcd_cmap_en = <0>;
lcd_gpio_0 = <&pio PD 20 GPIO_ACTIVE_HIGH>;
};
屏参如下
static struct LCM_setting_table lcm_initialization_setting[] = {
{0x11, 1, {0x00} },
{REGFLAG_DELAY, 120, {} },
{0xff, 5, {0x77,0x01,0x00,0x00,0x10} },
{0xc0, 2, {0x3B,0x00} }, //NL = (0x3B+1 )* 8 = 480
{0xc1, 2, {0x0D,0x02} }, //VBP=13 vfp=2
{0xc2, 2, {0x31,0x08} },
//Inversion Selection 2 Dot 30-1dot 31-2dot 37-column
//PCLK=512+(RTNI[4:0]x16) = 512+8*16 = 640
{0xb0, 16, {0x00,0x11,0x18,0x0E,0x11,0x06,0x07,0x08,0x07,0x22,0x04,0x12,0x0F,0xAA,0x31,0x18} },
{0xb1, 16, {0x00,0x11,0x19,0x0E,0x12,0x07,0x08,0x08,0x08,0x22,0x04,0x11,0x11,0xA9,0x32,0x18} },
{0xff, 5, {0x77, 0x01, 0x00, 0x00, 0x11} },
{0xb0, 1, {0x60} },
{0xb1, 1, {0x30} },
{0xb2, 1, {0x87} },
{0xb3, 1, {0x80} },
{0xb5, 1, {0x49} },
{0xb7, 1, {0x85} },
{0xb8, 1, {0x21} },
{0xc1, 1, {0x78} },
{0xc2, 1, {0x78} },
{REGFLAG_DELAY, 20, {} },
{0xe0, 3, {0x00, 0x1b, 0x02} },
{0xe1, 11,{0x08,0xA0,0x00,0x00,0x07,0xA0,0x00,0x00,0x00,0x44,0x44} },
{0xe2, 12,{0x11,0x11,0x44,0x44,0xED,0xA0,0x00,0x00,0xEC,0xA0,0x00,0x00} },
{0xe3, 4, {0x00, 0x00, 0x11, 0x11} },
{0xe4, 2, {0x44, 0x44} },
{0xe5, 16,{0x0A,0xE9,0xD8,0xA0,0x0C,0xEB,0xD8,0xA0,0x0E,0xED,0xD8,0xA0,0x10,0xEF,0xD8,0xA0} },
{0xe6, 4, {0x00, 0x00, 0x11, 0x11} },
{0xe7, 2, {0x44, 0x44} },
{0xe8, 16,{0x09,0xE8,0xD8,0xA0,0x0B,0xEA,0xD8,0xA0,0x0D,0xEC,0xD8,0xA0,0x0F,0xEE,0xD8,0xA0} },
{0xeb, 7, {0x02,0x00,0xE4,0xE4,0x88,0x00,0x40} },
{0xec, 2, {0x3c, 0x00} },
{0xed, 16, {0xAB,0x89,0x76,0x54,0x02,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x20,0x45,0x67,0x98,0xBA} },
{0xef, 6, {0x10,0x0D,0x04,0x08,0x3F,0x1F} },
{0xff, 5, {0x77,0x01,0x00,0x00,0x00} },
{0xff, 5, {0x77,0x01,0x00,0x00,0x13} },
{0xe8, 2, {0x00,0x0E} },
{0xff, 5, {0x77,0x01,0x00,0x00,0x00} },
{0x11, 1, {0x00} },
{REGFLAG_DELAY, 120, {} },
{0xff, 5, {0x77,0x01,0x00,0x00,0x13} },
{0xe8, 2, {0x00,0x0C} },
{REGFLAG_DELAY, 10, {} },
{0xe8, 2, {0x00,0x00} },
{0xff, 5, {0x77,0x01,0x00,0x00,0x00} },
{0x3A, 1, {0x66} },
{0x2A, 1, {0x00} },
{0x11, 1, {0x00} },
{REGFLAG_DELAY, 120, {} },
{0x29, 1, {0x00} },
{REGFLAG_DELAY, 20, {} },
{REGFLAG_END_OF_TABLE, 0x00, {} }
};
离线
先关闭下uboot disp2 看看
也尝试过关uboot显示,直接进kernel跑,情况还是一样来着
离线