20250912在荣品RD-RK3588-MID开发板的Android13系统下拿掉卡迪屏的reset引脚的下拉复位波形
20250912在荣品RD-RK3588-MID开发板的Android13系统下拿掉卡迪屏的reset引脚的下拉复位波形
2025/9/12 14:07
缘起:在调试卡迪的屏的时候,和卡迪的人带来的治具进行对比测试。
由于治具的reset时序没有拉低的信号,屏厂的软件工程师让我屏蔽掉拉低的信号。
开干!
Z:\rk-android13-20250818RD-RK3588-MID\u-boot\drivers\video\drm\rockchip_panel.c
【加了10s延迟,最终定位到这里了,复位引脚的dm_gpio_set_value置位1竟然是拉低复位!神奇】
static void panel_simple_prepare(struct rockchip_panel *panel)
{
mdelay(1000);
printf("++++ 2025/9/11 19:02 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
// 2025/9/11 19:32 wenyuanbo add reset gpio low????
//if (dm_gpio_is_valid(&priv->reset_gpio))
// dm_gpio_set_value(&priv->reset_gpio, 1);
//mdelay(1000);
//printf("++++ 2025/9/11 19:19 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
}
@Ling?0、治具使用地面站的背光【不停】。关闭治具之后马上打开治具,治具的屏幕不抖动。
1、测试全部时序 改成和测试架相同的200ms延迟 无效
2、复位拉高之后不要拉低! 无效
3、generate write更换为DCS写
4、MIPI 5组并联上ESD器件
5、软件的其它问题。
6、将问题反馈到 FT敦泰原厂?
7、【让敦泰原厂】想办法把 LCD屏的初始化代码固化到FT8206里面,或者 使用比如DEBUG模式等等之类的方式。不需要RK3588来初始化LCD屏,以便 排除 初始化LCD屏的时候/阶段 被干扰这种可能性。?@古风
测试架 下电/背光不断电。有残影 大概5s+小时。
测试架 下电,马上上电。5s后出图。不闪
治具的上电时序 蓝色 VDDI 黄色 AVDD
治具的上电时序 黄色 AVDD 蓝色AVEE。几乎没有时差
治具的上电时序 黄色 AVDD 蓝色RST。 RST没有 电平的跳变。只有从低到高。
治具 上电的时候 每一路电压 都有大概180-200ms的延迟
板子正常显示时MIPI D0P脚初始化波形
地面站 配置 黄色 VDDI 蓝色AVDD。领先大概200ms
客户的AVDD和AVEE由同一引脚控制,只能同步输出,规格书中需要一定的时间差
跟这个关系不大 因为等10秒后 在开机 就正常 这组电源也是一个IO控制
客户的AVDD和AVEE由同一引脚控制
测试架的AVDD和AVEE也几乎是 0时延[破涕为笑]
治具的上电时序 黄色 AVDD 蓝色AVEE。几乎没有时差
Z:\rk-android13-20250818RD-RK3588-MID\u-boot\drivers\video\drm\rockchip_panel.c
static void panel_simple_prepare(struct rockchip_panel *panel)
{
struct rockchip_panel_plat *plat = dev_get_platdata(panel->dev);
struct rockchip_panel_priv *priv = dev_get_priv(panel->dev);
struct mipi_dsi_device *dsi = dev_get_parent_platdata(panel->dev);
int ret;
u8 mode;
printf("****************wap %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
if (priv->prepared)
return;
if (priv->power_supply)
regulator_set_enable(priv->power_supply, !plat->power_invert);
if (dm_gpio_is_valid(&priv->enable_gpio))
dm_gpio_set_value(&priv->enable_gpio, 1);
if (plat->delay.prepare)
mdelay(plat->delay.prepare);
mdelay(1000);
printf("++++ 2025/9/11 19:02 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
// 2025/9/11 19:32 wenyuanbo add reset gpio low????
//if (dm_gpio_is_valid(&priv->reset_gpio))
// dm_gpio_set_value(&priv->reset_gpio, 1);
//mdelay(1000);
//printf("++++ 2025/9/11 19:19 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:19 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:19 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:19 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:19 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:19 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:19 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
if (plat->delay.reset)
mdelay(plat->delay.reset);
if (dm_gpio_is_valid(&priv->reset_gpio))
dm_gpio_set_value(&priv->reset_gpio, 0);
//mdelay(1000);
//printf("++++ 2025/9/11 19:20 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:20 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:20 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:20 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:20 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:20 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
gpio_direction_output(118, 1); //GPIO3C6 reset ft8206 32*3+8*2+6=118
mdelay(10);
printf("++++ wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//mdelay(1000);
//printf("++++ 2025/9/11 19:03 wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
//gpio_direction_output(150, 1);//GPIO4C6 LCD RESET HIGH
//mdelay(8);
//gpio_direction_output(150, 0);//GPIO4C6 LCD RESET LOW
gpio_direction_output(128, 1); //open backlight
mdelay(10);
gpio_free(128); //open backlight
gpio_free(118); //GPIO3C6 reset ft8206 32*3+8*2+6=118
printf("&&&& wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
if (plat->delay.init)
mdelay(plat->delay.init);
mipi_dsi_dcs_get_power_mode(dsi, &mode);
printf("===>mode1: 0x%x\n", mode);
printf("#### wyb %s %s %d ************** ===>mode1: 0x%x\n", __FILE__, __FUNCTION__, __LINE__, mode);
mdelay(1200);
//printf("#### qingshuiyu %s %s %d ************** ===>mode1: 0x%x\n", __FILE__, __FUNCTION__, __LINE__, mode);
printf("&&&& qingshuiyu %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
if (plat->on_cmds) {
if (priv->cmd_type == CMD_TYPE_SPI)
ret = rockchip_panel_send_spi_cmds(panel, panel->state,
plat->on_cmds);
else if (priv->cmd_type == CMD_TYPE_MCU)
ret = rockchip_panel_send_mcu_cmds(panel, panel->state,
plat->on_cmds);
else
ret = rockchip_panel_send_dsi_cmds(dsi, plat->on_cmds);
if (ret)
printf("failed to send on cmds: %d\n", ret);
}
mipi_dsi_dcs_get_power_mode(dsi, &mode);
printf("===>mode2: 0x%x\n", mode);
printf("#### wyb %s %s %d ************** ===>mode2: 0x%x\n", __FILE__, __FUNCTION__, __LINE__, mode);
priv->prepared = true;
printf("---- wyb %s %s %d **************\n", __FILE__, __FUNCTION__, __LINE__);
}
黄色AVDD 蓝色reset 定位地面站拉低复位的地方