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 配置(已配置)
NV3041A 配置(已配置)
主要功能
显示图片功能 (用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
申请一块临时 bufferbuf1
(可选项, 若图片存储与 Flash 才需要, 因为 DMA 不能直接访问 Flash )调用
wm_drv_tft_lcd_draw_bitmap
在此函数所设定的 窗口 中发送buf1
中的图片内容 到 TFT LCD 的GRAM
结果:
TFT LCD屏上显示画面
注意事项
buf1
为可选项, 若图片存储与 Flash 才需要, 因为 DMA 不能直接访问 Flashbuf1
受限于硬件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
申请一块临时 bufferbuf1
(可选项, 若图片存储与 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 不能直接访问 Flashbuf1
受限于硬件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请参考: