LCD

FAQ1 怎么添加一份自己的屏模组(LCD + TP)

  • SDK\customer\peripherals 路径下复制一份 LCD 驱动。

  • 修改复制的驱动文件与 SConscript,适配寄存器、数据接口、CLK 速率、RGB 格式。

  • 修改 SDK\customer\peripherals\Kconfig,添加新驱动宏。

  • 修改 SDK\customer\boards\Kconfig_lcd,添加新屏模组配置。

  • 确认 bsp_pinmux.cbsp_lcd_tp.c 的引脚配置。

  • 确认menuconfig Built-in LCD module driver已选择你添加的驱动。

请参见屏幕模组调试


FAQ2 上电屏幕是黑的如何排查

关键引脚检测:

  • VCC:主供电

  • 背光引脚:背光供电

  • LCD_RST:复位引脚

排查方法

  1. 检查 bsp_pinmux.cbsp_lcd_tp.c 的引脚配置。

  2. 使用 finsh 命令检查软件配置的引脚状态:

    pin status 1   # 检查 PA01 脚
    

    异常状态:

    PIN 1, FUNC=15, VAL=0, ANA_IN, GPIO_MODE_INPUT
    

    正常状态:

    PIN 1, FUNC=0, VAL=1, DIG_IO, GPIO_MODE_OUTPUT
    

    关键差异:

    • FUNC=0(GPIO 模式)

    • VAL=1(输出高电平)

    • DIG_IO(数字 IO 模式)

    • GPIO_MODE_OUTPUT(输出模式)

  3. 使用逻辑分析仪抓取具体上电波形,分析上电时序。


FAQ3 LCD调试常见问题

  • LCD 屏幕右侧绿条纹

  • LCD 显示花屏

  • TFT 屏开机或唤醒时第一帧花屏

  • 初始化读写都正常但不亮屏问题

  • 如何从 Framebuffer 导出来看图像是否正常?

  • LCD 驱动中常见的 Assert 死机

  • 静电放电(ESD)测试时 LCD 花屏和定屏问题

  • 开关机动画或者充电图像显示扭曲问题

  • 屏 QSPI 读不到屏 ID 的问题

  • 屏 QSPI 动态调整读写寄存器 CLK 速率

请参见LCD常见问题


FAQ4 如何导出送屏buf中的数据并恢复成图像

  1. hcpu.map 文件中查询送屏缓冲区的地址,对应为 buf2_1;若项目配置双缓冲区,同步查询 buf2_2

    ../../_images/buf2_addr.png
  2. 从 dump 文件中拷贝 buf2_1/buf2_2 对应的二进制文件(psram.binhcpu_ram.bin),dump 导出方法参见死机分析

  3. 将拷贝的 bin 文件放入 sdk/tools/bin2bmp 目录,参照该目录下 readme 文档内的指令,执行生成图像即可。

    ../../_images/using_buf_addr.png ../../_images/flash_map1.png ../../_images/bin_to_map.png

FAQ5 如何排查屏显画面倾斜扭曲问题

../../_images/disp_distortion.png
  1. 如上图,该现象为像素对齐异常导致,需参考对应 LCD 硬件规格书,确认标准的像素对齐要求。

  2. 根据规格书要求,核对 LCD 注册接口中 pixel_align 对齐参数配置是否符合要求:

    LCD_DRIVER_EXPORT(name, id, init_cfg, dev_ops, ic_max_hor_res, ic_max_ver_res, pixel_align)
    

FAQ6 如何配置合适的TE周期

TE 周期的配置标准、计算方法及适配规则,参见:帧率/ LCD TE 周期


FAQ7 如何配置屏显画面旋转角度(90°/180°/270°)

1. 芯片原生支持能力

  • 56x、58x 系列 LCDC 控制器:支持垂直镜像、水平镜像;

  • 52x 系列 LCDC 控制器:仅支持垂直镜像。

2. 配置方法

  • 优先确认 LCD 硬件是否原生支持镜像,若支持则直接基于对应芯片系列配置,控制指令如下:

    rt_device_control(lcd_device, RTGRAPHIC_CTRL_ROTATE_180, NULL)
    

    ⚠️注意:旋转 180° 等价于水平镜像+垂直镜像

  • 若 LCD 不支持旋转,或芯片镜像方案无法满足需求,可通过 GPU 实现送屏缓冲区旋转,调用以下接口设置旋转角度即可:

    /**
     * @brief  设置屏显画面旋转角度
     * @param  rotate: 旋转角度枚举值,支持90°/180°/270°旋转配置
     * @return rt_err_t: 配置成功返回RT_EOK,失败返回对应错误码
     */
    rt_err_t drv_epic_set_rotation(drv_epic_rotate_t rotate)
    

    ⚠️注意:该方案会占用 GPU 资源,可能导致图像渲染耗时增加,当前仅支持 90°、180°、270° 固定角度旋转。

    ⚠️注意:如果旋转180后出现撕裂,这是由于渲染的顺序没有适配导致,需要另外打补丁修复该问题


FAQ8 如何计算理论帧率

详细的理论帧率推导公式、计算示例、性能评估标准,参见:帧率/LCD送数


FAQ9 如何在应用层设置不休眠

可在应用层直接调用以下接口实现屏幕不休眠功能,接口调用简单无依赖:

/**
 * @brief  应用层屏幕休眠锁使能/关闭 (设置不休眠/恢复休眠)
 * @param  enable  false:禁止休眠(屏幕常亮)  true:恢复自动休眠
 */
void app_screen_lock_enable(bool enable);

FAQ10 如何重置休眠时间

当需要刷新屏幕休眠计时(比如触摸操作、按键响应、数据更新时),调用以下接口重置休眠时间,重新开始倒计时:

/**
 * @brief  手动触发显示屏的活跃状态 (刷新屏幕休眠计时/重置休眠倒计时)
 * @param  disp  显示屏设备句柄指针,传 NULL 则使用默认显示屏
 */
void lv_disp_trig_activity(lv_disp_t * disp);

FAQ11 屏驱如何配置DDR模式送数

  1. 先确认 LCD 屏模组是否支持 DDR 模式,是否需要在初始化时配置特殊寄存器 —— 向屏幕原厂确认或查阅数据手册。

  2. 配置 DDR 模式,软件需做如下修改:

    • LCD 驱动需要在添加对应屏模组 /sdk/customer/boards/Kconfig 时加上 BSP_LCDC_USING_DDR_QADSPI 宏。

    • 确认 bsp_pinmux.c 里有 BSP_LCDC_USING_DDR_QADSPI,需要修改 LCD 相关 IO 口的驱动电流。

    • LCD 驱动代码需要配置 LCDC_INTF_SPI_DCX_DDR_4DATA 模式,修改 LCD 时钟频率(DDR 模式 LCD 时钟最大支持 40MHz),添加 SPI_LCD_FLAG_DDR_DUMMY_CLOCK 配置。

      static const LCDC_InitTypeDef lcdc_int_cfg_spi =
      {
          .lcd_itf = LCDC_INTF_SPI_DCX_DDR_4DATA, // 修改为DDR四线模式
          .freq = 40000000,                      // 修改LCD时钟为40MHz
      #if LV_COLOR_DEPTH == 16
          .color_mode = LCDC_PIXEL_FORMAT_RGB565,
      #else
          .color_mode = LCDC_PIXEL_FORMAT_RGB888,
      #endif
          .cfg = {
              .spi = {
                  .dummy_clock = 1, // 0: QAD-SPI/SPI3   1: SPI4
      #ifdef LCD_FT2308_VSYNC_ENABLE
                  .syn_mode = HAL_LCDC_SYNC_VER,
      #else
                  .syn_mode = HAL_LCDC_SYNC_DISABLE,
      #endif
                  .vsyn_polarity = 1,
                  .vsyn_delay_us = 0,
                  .hsyn_num = 0,
      #ifdef LCDC_SUPPORT_DDR_QSPI
                  .flags = SPI_LCD_FLAG_DDR_DUMMY_CLOCK,  // 添加SPI_LCD_FLAG_DDR_DUMMY_CLOCK配置
      #endif
              },
          },
      };