简介
本文档主要介绍先楫使用6800系列通过LVDS协议驱动12.3英寸屏幕的步骤。
测试使用的硬件平台有先楫HPM6800EVK开发板、屏幕为群创光电DJ123IA-01B。使用的SDK版本为sdk_env_v1.4.0。
LVDS 接口协议驱动原理说明
LVDS 显示接口协议功能需要LVB 和 MIPI_DSI_PHY 相互配合。LVB 接收来自两个 LCDC 的输出数据,并将其转化为 LVDS 显示接口协议数据,在 PHY 中完成并串转换。
一般来说,LVDS有四种接口模式:
单路6bit LVDS:单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。也称18位或18bit LVDS接口。
双路6bit LVDS:双路方式传输,每个基色信号采用6位数据,其中奇路数据为18位,偶路数据为18位,共36位RGB数据,也称36位或36bit LVDS接口。
单路8bit LVDS:单路方式传输,每个基色信号采用8位数据,共24位RGB数据,也称24位或24bit LVDS接口。
双路8bit LVDS:双路方式传输,每个基色信号采用8位数据,其中奇路数据为24位,偶路数据为24位,共48位RGB数据,也称48位或48bit LVDS接口
就算是同一种输出格式不同屏幕的接口线序也可能也不一样。本文使用的群创屏接口为双八格式。50PIN,也就是3组一共6根信号线,2组一共4根时钟线。对应的LVDS应该选用split 模式(LVB 的两个通道共同传输同一像素源,一个通道传输奇数像素点,一个通道传输偶数像素点)。此时lcdc_pixel_clk应该为pixel_clock_khz即屏幕速率的两倍。通过查阅DJ123IA的datasheet我们可以知道屏幕的时钟频率为44.1MHz,也就是说LCDC的频率应为88.2MHz。
在先楫例程sdk_env_v1.4.0\hpm_sdk\boards\hpm6800evk路径下有一个CMakeLists脚本,里面有提到SDK中原本就包含了四块屏幕的配置文件。将第四个屏幕选项的参数改为1(TM103XDGP01也是双八接口,与本文使用的屏幕只有参数上的差异)。
然后打开在sdk_env_v1.4.0\hpm_sdk\samples\drivers\lcdc目录下CMakeLists脚本。将CONFIG_HPM_PANEL参数改成4,即选用第四个屏幕的参数,最后使用SDK主目录下start_cmd工具重新生成例程。
部分驱动代码及说明
1 | void board_init_lcd_lvds(void) |
LVB 的使用初始化流程如下:
- 配置 LVB 的 CTRL 寄存器,设置所需模式
- 配置 PIXEL_MUX 的 PIXMUX 寄存器,搭建所需 path
- 配置 MIPI DSI PHY 寄存器,对 PHY 的工作模式和时钟进行配置
- 配置 LVB 寄存器 PHY_POW_CTRL[lvds0] 和 PHY_POW_CTRL[lvds1],配置各 lane 的 tx*_pd 为 0x0,pd_txck 为 0x0,使 PHY 退出复位状态
- 读取 LVB 寄存器 PHY_STAT 寄存器,等待 PHY 的 PLL_LOCK 为 1,表示 PHY 进入了正常工作模式历史记录
1 | while (lvb_lvds_phy_split_pll_is_lock(lvb_base) == false) { } |
完成LVDS初始化后,DSI 控制器可以产生水平的或垂直的颜色条带,用来测试显示接口是否可以正常工作。
可以通过如下的步骤生成测试图像:
- 配置 MODE_CFG 寄存器,使能 Video 模式;
- 配置寄存器 DPI_COLOR_CODING,选择测试图案及格式;
- 配置测试图像的尺寸、图像行和帧的时序参数
- 配置 VID_MODE_CFG[20]、 VID_MODE_CFG[24] 和 VID_MODE_CFG[16],使能测试图案的生成;
测试图像: