先楫68系列LVDS简单介绍
GaoSheng Lv4

简介

本文档主要介绍先楫使用6800系列通过LVDS协议驱动12.3英寸屏幕的步骤。
测试使用的硬件平台有先楫HPM6800EVK开发板、屏幕为群创光电DJ123IA-01B。使用的SDK版本为sdk_env_v1.4.0。

LVDS 接口协议驱动原理说明

LVDS 显示接口协议功能需要LVB 和 MIPI_DSI_PHY 相互配合。LVB 接收来自两个 LCDC 的输出数据,并将其转化为 LVDS 显示接口协议数据,在 PHY 中完成并串转换。
image

一般来说,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。

image

在先楫例程sdk_env_v1.4.0\hpm_sdk\boards\hpm6800evk路径下有一个CMakeLists脚本,里面有提到SDK中原本就包含了四块屏幕的配置文件。将第四个屏幕选项的参数改为1(TM103XDGP01也是双八接口,与本文使用的屏幕只有参数上的差异)。
image
然后打开在sdk_env_v1.4.0\hpm_sdk\samples\drivers\lcdc目录下CMakeLists脚本。将CONFIG_HPM_PANEL参数改成4,即选用第四个屏幕的参数,最后使用SDK主目录下start_cmd工具重新生成例程。
image

部分驱动代码及说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void board_init_lcd_lvds(void)
{
    init_lcd_lvds_double_ctl_pins();
    init_mipi_lvds_tx_phy0_pin();
    init_mipi_lvds_tx_phy1_pin();
    hpm_panel_hw_interface_t hw_if = {0};
    hpm_panel_t *panel = hpm_panel_find_device_default();
    const hpm_panel_timing_t *timing = hpm_panel_get_timing(panel);
    uint32_t lcdc_pixel_clk_khz = board_lcdc_clock_init(clock_lcd0, timing->pixel_clock_khz * 2);
    hw_if.set_reset_pin_level = set_reset_pin_level_tm103xdgp01;
    hw_if.set_video_router = set_video_router_tm103xdgp01;
    hw_if.lcdc_pixel_clk_khz = lcdc_pixel_clk_khz;
    hw_if.video.lvds.channel_di_index = 0;
    hw_if.video.lvds.lvb_base = HPM_LVB;
    hpm_panel_register_interface(panel, &hw_if);
    hpm_panel_reset(panel);
    hpm_panel_init(panel);
    hpm_panel_power_on(panel);
}

LVB 的使用初始化流程如下:

  1. 配置 LVB 的 CTRL 寄存器,设置所需模式
    image
  2. 配置 PIXEL_MUX 的 PIXMUX 寄存器,搭建所需 path
  3. 配置 MIPI DSI PHY 寄存器,对 PHY 的工作模式和时钟进行配置
  4. 配置 LVB 寄存器 PHY_POW_CTRL[lvds0] 和 PHY_POW_CTRL[lvds1],配置各 lane 的 tx*_pd 为 0x0,pd_txck 为 0x0,使 PHY 退出复位状态
    image
  5. 读取 LVB 寄存器 PHY_STAT 寄存器,等待 PHY 的 PLL_LOCK 为 1,表示 PHY 进入了正常工作模式历史记录
1
while (lvb_lvds_phy_split_pll_is_lock(lvb_base) == false) { }

完成LVDS初始化后,DSI 控制器可以产生水平的或垂直的颜色条带,用来测试显示接口是否可以正常工作。
可以通过如下的步骤生成测试图像:

  1. 配置 MODE_CFG 寄存器,使能 Video 模式;
    image
    image
  2. 配置寄存器 DPI_COLOR_CODING,选择测试图案及格式;
    image
  3. 配置测试图像的尺寸、图像行和帧的时序参数
    image
    image
  4. 配置 VID_MODE_CFG[20]、 VID_MODE_CFG[24] 和 VID_MODE_CFG[16],使能测试图案的生成;
    image

测试图像:
image
image

本站由 提供部署服务