这是最新(主)开发分支的文档。如果您正在查找以前版本的文档,使用左侧的下拉菜单选择所需的版本。

TFT_LCD

简介

薄膜晶体管液晶显示器 (Thin-Film Transistor Liquid Crystal Display,简称 TFT-LCD) 是一种利用液晶材料的电光效应来显示图像的显示器。 TFT-LCD 技术是目前广泛应用于电视、电脑显示器、手机、平板电脑等设备中的显示技术。

TFT-LCD 显示器由多层结构组成,包括背光层、偏振层、彩色滤光片、液晶层、薄膜晶体管阵列以及前面板等。其工作原理是,背光层发出光线,通过偏振层后,光线的偏振方向被改变。 液晶层中的液晶分子在电场的作用下改变排列,进而改变光线的偏振状态。薄膜晶体管阵列控制每个像素点上的电压,从而控制液晶分子的排列,实现图像的显示。

功能列表

联盛德的 Display 模块分为4个层次的功能:

应用层 (用户基于中间层,或直接基于驱动层 开发的应用) 中间层 (集成 LVGL 实现点,线等功能) 驱动层 (用于各屏的 设备驱动实现) 通信层 (如 SDIO, SPI, I2C 等, W80X 不支持 RGB,I80,MIPI 接口)

驱动层 功能列表

  • 支持 LCD 参数配置 (主要通过 Device Table 进行,包含 SPI Freqrency, 屏的分辨率 和 Pixel Format 等)

  • 支持画图功能 (包含绘图窗口位置 及 图片数据传送)

  • 支持画图内容的 异步 和 同步 发送

  • 支持屏幕旋转功能 (单纯控制屏的 x,y 轴顺序);

  • 支持屏幕配置参数获取功能 (主要从 Device Table 中获取)。

  • 支持屏幕的 命令发送

  • 支持屏幕的 背光控制

功能概述

该模块主要在型号为 NV3041A TFT LCD 屏上显示 满屏图片。

硬件配置

HW Interface 配置(已配置)

通过修改 DT 进行配置, 比如 SDIO Controller。

NV3041A 配置(已配置)

通过修改 DT 进行配置。

主要功能

显示图片功能 (用CPU Polling传输)

起始条件:

  • 使用硬件连线 参考 example 的 readme 配置好

  • 使用的 device table 配置好, 包含 SDIO Controller 和 TFT LCD 的设备表

相关时序 API:

  • 调用 wm_drv_sdh_spi_init 来初始化 SDIO Controller Driver

  • 调用 wm_drv_tft_lcd_init 来初始化 TFT LCD Device Driver

  • 调用 wm_drv_tft_lcd_set_backlight 打开TFT LCD的背光

  • 调用 malloc 申请一块临时 buffer buf1 (可选项, 若图片存储与 Flash 才需要, 因为 DMA 不能直接访问 Flash )

  • 调用 wm_drv_tft_lcd_draw_bitmap 在此函数所设定的 窗口 中发送 buf1 中的图片内容 到 TFT LCD 的GRAM

结果:

  • TFT LCD屏上显示画面

注意事项

  • buf1 为可选项, 若图片存储与 Flash 才需要, 因为 DMA 不能直接访问 Flash

  • buf1 受限于硬件SRAM大小, 可能暂存不了一整张图片, 此时可以切多块存储 和传输 如 480 x 272 分辨率的图片, 若采用 RGB565 Pixel Format, 其数据量为 480 x 272 x 2 = 261120 字节 此场景 可将图片切成4块, 应用层申请 buf1 大小为 65280 字节 逐块的缓存和发送

  • 所使用的图片格式 应该要与 device table 中预设的 pixel-format 保持一致

显示图片功能 (用DMA传输)

起始条件:

  • 使用硬件连线 参考 example 的 readme 配置好

  • 使用的 device table 配置好, 包含 SDIO Controller 和 TFT LCD 的设备表

  • 应用程序需要创建一个 sempahore lcd_demo_sem

相关时序 API:

  • 调用 wm_drv_sdh_spi_init 来初始化 SDIO Controller Driver

  • 调用 wm_drv_tft_lcd_init 来初始化 TFT LCD Device Driver

  • 调用 wm_drv_tft_lcd_set_backlight 打开TFT LCD的背光

  • 调用 malloc 申请一块临时 buffer buf1 (可选项, 若图片存储与 Flash 才需要, 因为 DMA 不能直接访问 Flash )

  • 调用 wm_drv_tft_lcd_register_tx_callback 注册 tx done callback, 在上次数据传输完成后 释放 lcd_demo_sem

  • 调用 xSemaphoreTake 去获取 lcd_demo_sem, 未获取到时,当前 task 会进入阻塞状态

  • 调用 wm_drv_tft_lcd_draw_bitmap 在此函数所设定的 窗口 中发送 buf1 中的图片内容 到 TFT LCD 的GRAM

结果:

  • TFT LCD屏上显示画面

注意事项

  • buf1 为可选项, 若图片存储与 Flash 才需要, 因为 DMA 不能直接访问 Flash

  • buf1 受限于硬件SRAM大小, 可能暂存不了一整张图片, 此时可以切多块存储 和传输 如 480x272 分辨率的图片, 若采用 RGB565 Pixel Format, 其数据量为 480 x 272 x 2 = 261120 字节 此场景 可将图片切成4块, 应用层申请 buf1 大小为 65280 字节 逐块的缓存和发送

  • 所使用的图片格式 应该要与 device table 中预设的 pixel-format 保持一致

  • 此DMA显示方案 相较于CPU Polling方式, 可以提高CPU利用率

  • 当注册了tx done callback, wm_drv_tft_lcd_draw_bitmap 内部会默认考虑走DMA发送,但也有例外 1: 发送数据总长度 小于 32 Byte, 因为此长度用DMA 发送效率提升不大 2: 发送数据的 起始地址 非 4byte alignment地址,也即非4的整数倍 3: 发送数据的总长度 非 4byte alignment地址,也即非4的整数倍

  • 遇到 2,3 例外的情况, wm_drv_tft_lcd_draw_bitmap 内部会把此段数据进行分段发送, 满足4 Byte align的数据段用DMA发送,剩余的用CPU Polling方式发送

应用实例

API 参考

查找 TFT LCD 相关API请参考:

TFT_LCD API 参考