Edit online

MIPI DSI 接口屏

图像显示错位或颜色异常

可能原因:

  • Timing 时序参数或 video mode 需要调整
  • LCD reset 引脚或 IOVCC 未达到有效电平下限

排查方向:

  1. 遍历所有 video mode,找到最佳显示效果:

    • video pulse / video event / video burst
    • 推荐 burst mode,驱动支持更完善
  2. 调整 Timing 参数:

    • 重点调整 hbp/hfp 等消隐区参数,增大消隐区让显示接口有更多反应时间
    • 提高 pixelclock 频率,确保有足够的刷新帧率
  3. 确认 LCD reset 引脚和 IOVCC 有效电平是 3.3V 还是 1.8V

背光亮但屏幕无显示

可能原因:

  • 板卡存在物料虚焊
  • LCD reset 引脚未上拉或电平不对(3.3V 只有 1.8V)
  • LCD IOVCC 电压或上电时序未达到屏幕要求
  • 初始化命令错误,资料与屏幕不匹配
  • 初始化命令适配错误
  • DSI 通道配置有误导致初始化失败
  • 屏幕对 video mode 信号有特定要求,比如:时钟非连续,禁用 EOTP,不同的 DPHY 配置

排查方向:

  1. 检查板卡物料焊接情况,必要时加焊物料

  2. 万用表测量 reset 引脚电平,确认电平达到屏幕要求:

    • 检查工程 pinmux 文件已配置 reset 引脚,并在屏幕驱动中控制
    • 与屏厂确认 reset 的有效电平
  3. 通过屏幕规格书确定 IOVCC 电压标准和上电时序要求。

    检查 panel 初始化过程和板卡 LCD 相关电源是否达到要求

  4. 核对原理图和板卡走线,确认 Data0 通道的顺序和极性:

    • 通过 disp_conf.h 配置 Data0 通道的顺序和极性:
      #define LANE_ASSIGNMENTS 0x3210
      #define LANE_POLARITIES  0b0000
  5. 与屏厂确认资料是否匹配当前模组,可读取屏幕 ID 进行甄别(按 4.6 现象六 进行调试)

  6. 检查 panel 初始化命令转换是否正确:

    • 屏厂提供的初始化数组一般由三部分构成:command, count of data, data。只需提取 command 和 data
    • 默认使用 DCS 发送命令,除非资料出现明确的 GEN 标识
      panel_dsi_dcs_send_seq()
      panel_dsi_generic_send_seq()
  7. 使用自测指令测试屏幕 Data0 通道(按 4.3 现象三4.4 现象四 进行调试)

  8. 无自测指令时读取屏幕 ID 测试 Data0 通道(按 4.6 现象六 进行调试)

  9. 在 panel 驱动中使能时钟非连续模式测试:

    struct panel_dsi dsi = {
        .mode = DSI_MOD_VID_BURST | DSI_CLOCK_NON_CONTINUOUS,
        ...
    };
  10. 在 panel 驱动中禁用 EOTP 测试:

    struct panel_dsi dsi = {
       .mode = DSI_MOD_VID_BURST | DSI_MOD_NO_EOT_PACKET,
       ...
    };
  11. 时钟非连续模式和禁用 EOTP 可同时使能:

    struct panel_dsi dsi = {
        .mode = DSI_MOD_VID_BURST | DSI_CLOCK_NON_CONTINUOUS | DSI_MOD_NO_EOT_PACKET,
        ...
    };
  12. 更换 MIPI-DPHY 配置,使用旧版参数,部分大分辨率 mipi 屏幕对旧版参数更兼容

    Board options  --->
    [*] Using Display Engine (DE)
        Display Parameter  --->
        select Display interface (Display MIPI-DSI interface)  --->
        [*] enable MIPI-DSI legacy packet config

屏幕自测模式无响应

可能原因:

  • 板卡存在物料虚焊
  • LCD reset 引脚未上拉或电平不对(3.3V 只有 1.8V)
  • LCD IOVCC 电压或上电时序未达到屏幕要求
  • LP Data0 通道接线或极性不对
  • LCD 屏幕对 EOTP 包有要求

排查方向:

  1. 检查板卡物料焊接情况,必要时加焊物料

  2. 万用表测量 reset 引脚电平,确认电平达到屏幕要求:

    • 检查工程 pinmux 文件已配置 reset 引脚,并在屏幕驱动中控制
    • 与屏厂确认 reset 的有效电平
  3. 核对原理图和板卡走线,确认 Data0 通道的顺序和极性:

    • 通过 disp_conf.h 配置 Data0 通道的顺序和极性:
      #define LANE_ASSIGNMENTS 0x3210
      #define LANE_POLARITIES  0b0000
  4. Luban-Lite V1.2.1 之前的旧版本未支持 EOTP,更新 SDK 版本解决

屏幕自测模式正常但无法显示图像

可能原因:

  • 屏幕需要时钟非连续模式
  • 板卡差分信号走线未严格等长
  • 通道 lane num 配置有误

排查方向:

  1. 在屏幕驱动中启用时钟非连续模式:

    struct panel_dsi dsi = {
        .mode = DSI_MOD_VID_BURST | DSI_CLOCK_NON_CONTINUOUS,
        ...
    };
  2. 检查板卡走线是否严格等长(不仅差分组内要等长,差分组间也需要等长)

  3. 确认 LCD 屏幕的 lane 数量,在驱动中配置 lane_num(lane_num 出错会导致时钟倍频不对):

    struct panel_dsi dsi = {
        .lane_num = 4,
        ...
    };

读屏幕 ID 无应答

可能原因:

  • LP Data0 通道接线或极性不对
  • 板卡存在物料虚焊
  • LCD 屏幕 reset 引脚未上拉
  • LCD 相关电源或上电时序未符合屏幕要求
  • D21x 平台 LP 速度需要大于屏幕应答速度
  • LCD 屏幕 0x4 寄存器默认值为 0,或者不存在 0x4 寄存器

排查方向:

  1. 核对原理图和板卡走线,确认 Data0 通道的顺序和极性:

    • 通过 disp_conf.h 配置 Data0 通道的顺序和极性:
      #define LANE_ASSIGNMENTS 0x3210
      #define LANE_POLARITIES  0b0000
  2. 检查板卡物料焊接情况,必要时加焊物料

  3. 万用表测量 reset 引脚电平,确认电平达到屏幕要求:

    • 检查工程 pinmux 文件已配置 reset 引脚,并在屏幕驱动中控制
    • 与屏厂确认 reset 的有效电平
  4. 通过屏幕规格书确认控制引脚是否正常:

    • 确认 reset 和 IOVCC 等引脚电平要求(3.3V 还是 1.8V)
    • 确认驱动的上电时序是否符合屏幕要求
  5. D21x 平台在读操作中需要更高的 LP 速率(其他芯片平台无此要求):

    • 通过 disp_conf.h 配置 LP 速率
    • D21x 读操作情况下推荐设置为 18M
      #define MIPI_DSI_LP_RATE    (18 * 1000 * 1000)
  6. 读 ID 操作默认读取 0x4 寄存器,通过屏驱动 IC 规格书确认 0x4 寄存器是否存在,默认值是多少

读屏幕寄存器未返回全部 byte

可能原因:

  • 屏幕默认应答的 byte 数有限。例如:一个寄存器最多能返回 3 个 byte,但未全部发出

解决方法:

使用 data type 0x37 (MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE) 设置返回包的大小:

panel_dsi_set_maximum_return_packet_size(struct aic_panel *panel, u16 value)

启动时屏幕概率性不亮

可能原因:

  • LCD reset 引脚未控制或拉低时间不足
  • 上电时序未严格满足 LCD 屏幕要求
  • LCD 屏幕需要时钟非连续模式
  • Timing 参数需要调整

排查方向:

  1. 通过屏幕规格书确认 reset 控制引脚和上电时序要求

  2. 在 panel 驱动中使能时钟非连续模式:

    struct panel_dsi dsi = {
        .mode = DSI_MOD_VID_BURST | DSI_CLOCK_NON_CONTINUOUS,
        ...
    };
  3. 调整 Timing 参数查看是否会影响不亮的概率:

    • 若影响概率,则与 Timing 相关
    • 需要调整到一套稳定能亮的 Timing

升级 V1.2.1 以后版本 MIPI 屏幕显示模糊

可能原因:

DPHY 配置和 EOTP 影响

Luban-Lite SDK V1.2.1 优化了 MIPI-DPHY 和 CMU 的分频配置,新配置会改善消隐区参数与屏厂差别较大的问题。Bringup 新 MIPI-DSI 屏幕不再需要花费大量精力调整消隐区参数。但部分已调试好的旧 MIPI-DSI 屏幕可能会受新配置影响。

Luban-Lite SDK 预留了兼容开关,允许 MIPI-DSI 屏幕使用旧的 MIPI 接口配置。

解决方法:

使用 SDK 预留开关恢复旧版本 SDK MIPI-DSI 接口 PHY 配置:

  1. 通过 menuconfig 使能旧的 MIPI 接口配置:

    Board options  --->
        Display Parameter  --->
            [*] enable MIPI-DSI legacy packet config
  2. 在 panel 驱动文件中使用宏定义 DSI_MOD_NO_EOT_PACKET 禁用 EOTP:

    struct panel_dsi dsi = {
        .mode = DSI_MOD_VID_BURST | DSI_MOD_NO_EOT_PACKET,
        .format = DSI_FMT_RGB888,
        .lane_num = 4,
    };

建议:

  • 新 MIPI-DSI 屏幕推荐使用 Luban-Lite V1.2.1 及以后版本调试,提高效率,无需再花费大量精力调整消隐区参数

  • 已调试好的 MIPI-DSI 屏幕通过兼容开关可以继续使用