LT9611UXC MIPI/CSI 转 HDMI 桥接芯片固件代码分析

概述

LT9611UXC是一款高性能的MIPI DSI/CSI转HDMI 2.0桥接芯片,支持高达4K@60Hz的视频转换。本文分析的固件代码实现了芯片的完整驱动功能,包括MIPI输入检测、视频格式识别、时序配置、HDMI输出等核心功能。

代码架构

文件结构

LT9611UXC_Sample_Code_V4.2_Release/
├── User/
│   ├── config.c/h          # 视频时序配置
│   ├── edid.c/h           # EDID读写功能
│   ├── globalV.c/h        # 全局变量定义
│   ├── i2c_master.c/h     # I2C通信驱动
│   ├── include.h          # 头文件包含
│   ├── interrupt.h        # 中断处理
│   ├── lt9611ux.c/h       # 主驱动逻辑
│   ├── main.c/h           # 程序入口
│   ├── register.c         # 寄存器定义
│   └── uart.h            # 串口调试

核心数据结构

视频时序配置
struct video_timing {
    u16 hfp;        // 水平前沿
    u16 hs;         // 水平同步
    u16 hbp;        // 水平后沿
    u16 hact;       // 水平有效像素
    u16 htotal;     // 水平总像素
    u16 vfp;        // 垂直前沿
    u16 vs;         // 垂直同步
    u16 vbp;        // 垂直后沿
    u16 vact;       // 垂直有效行数
    u16 vtotal;     // 垂直总行数
    u8 framerate;   // 帧率
    u8 vic;         // 视频识别码
};
MIPI配置
struct mipi_format {
    u8 mipi_mode;   // MIPI模式:DSI/CSI
    u8 mipi_port;   // 输入端口
    u8 lane_num;    // 通道数
};

核心功能模块

1. 系统初始化

芯片识别与初始化
void LT9611UX_SystemInit(void)
{
    LT9611UX_SystemClk();      // 系统时钟配置
    LT9611UX_GPIOInit();       // GPIO初始化
    LT9611UX_ChipID();         // 读取芯片ID
    LT9611UX_SysIntInit();     // 中断系统初始化
    LT9611UX_ModeSelect();     // 工作模式选择
}
工作模式配置

支持多种工作模式:

  • MIPI模式:DSI或CSI输入
  • 输入端口:PortA、PortB或双端口
  • 通道数:1/2/4通道配置

2. MIPI输入检测与处理

MIPI时钟检测
u8 LT9611UX_MipiClkDetect(void)
{
    if(mipi_setting.mipi_port == 2) {
        BK85_50_REG = 0x22;   // 检测PortB时钟
    } else {
        BK85_50_REG = 0x20;   // 检测PortA时钟
    }
    
    delay1ms(50);
    return (BK85_58_REG & BIT_6) ? 1 : 0;
}
视频格式识别

代码支持丰富的视频分辨率,包括:

标准分辨率

  • 640x480@60Hz
  • 720x480@60Hz
  • 720x576@50Hz
  • 1280x720@30/50/60Hz

全高清分辨率

  • 1920x1080@25/30/60Hz
  • 1920x1200@60Hz

4K超高清

  • 3840x2160@30/60Hz
  • 4096x2160@30/60Hz
自动端口检测
void LT9611UX_PhyAutoCheck(void)
{
    // 检测PortA输入时钟
    BK85_50_REG = 0x20;
    delay1ms(50);
    if(BK85_58_REG & BIT_6) {
        video_format.mipi_port++;
    }
    
    // 检测PortB输入时钟  
    BK85_50_REG = 0x22;
    delay1ms(50);
    if(BK85_58_REG & BIT_6) {
        video_format.mipi_port++;
    }
}

3. 视频处理流程

PCR(像素时钟恢复)稳定化
u8 LT9611UX_MipiPcr(struct Video_Format *video_format)
{
    // 配置PCR参数
    BKD0_2D_REG = 0x4F;    // 上限限制
    BKD0_31_REG = 0x20;    // 下限限制  
    BKD0_26_REG = 0x3d;    // M设置
    BKD0_27_REG = 0x8B;    // K值
    
    // 复位PCR
    BK81_1D_REG = 0x1f;
    BK81_1E_REG = 0x00;
    delay1ms(10);
    BK81_1E_REG = 0xe0;
    BK81_1D_REG = 0xff;
    
    // 等待PCR稳定
    for(loopx = 0; loopx < 200; loopx++) {
        delay1ms(10);
        if(BKD0_97_REG & 0x30) {
            return 1;  // PCR稳定
        }
    }
    return 0;  // PCR不稳定
}
色彩空间转换

支持多种色彩空间转换:

  • YUV422转RGB
  • YUV420转RGB
  • RGB888直通
void LT9611UX_Csc_Set(void)
{
    if((video_format.mipi_colorspace == 3) || 
       (video_format.mipi_colorspace == 14)) {
        // YUV转RGB
        BK85_AE_REG = 0x08;
        BK85_AF_REG = 0xe0;   // 全范围
    } else {
        // 直通模式
        BK85_AE_REG = 0x00;
        BK85_AF_REG = 0x00;
    }
}

4. HDMI输出配置

TX PLL配置

根据像素时钟配置HDMI发射器的PLL:

void LT9611UX_TxPLL_Set(struct Video_Format *video_format)
{
    // 配置PLL频率
    BK87_87_REG = 0x10 | ((u8)((video_format->pclk_khz/2) >> 16));
    BK87_88_REG = ((u8)((video_format->pclk_khz/2) >> 8));
    BK87_89_REG = ((u8)(video_format->pclk_khz/2));
    
    // 根据像素时钟范围选择PLL参数
    if((video_format->pclk_khz < 100000) && 
       (video_format->pclk_khz > 10000)) {
        BK82_A2_REG = 0x0b;
    } else if((video_format->pclk_khz < 200000) && 
              (video_format->pclk_khz > 100000)) {
        BK82_A2_REG = 0x0a;
    }
    // ... 更多频率范围配置
}
HDMI模式自动检测

根据像素时钟自动选择HDMI 1.4或HDMI 2.0模式:

if(video_format.pclk_khz > 550000) {
    print("\r\n HDMI 2.0");
    flag_hdmi_20_mode = 1;
} else {
    print("\r\n HDMI 1.4");  
    flag_hdmi_20_mode = 0;
}
SCDC(状态和控制数据通道)配置

HDMI 2.0必需的SCDC配置:

void LT9611UX_TX_SCDC_Set(SCDC_Status Status)
{
    if(Status) {
        BKC0_06_REG = 0x30;  // 使能scramble和时钟选择
        HDMI_WriteI2C_Byte(0x20, 0x03);  // 配置SCDC
    } else {
        BKC0_06_REG = 0x00;
        HDMI_WriteI2C_Byte(0x20, 0x00);
    }
}

5. EDID管理

EDID读取与验证
u16 LT9611UX_Read_EDID(void)
{
    // 读取EDID Block 1
    for(loop=0; loop<TXDDC_READ_TIMES; loop++) {
        HDMI_ReadI2C_ByteN(loop*TXDDC_PREREAD_NUM,
                          &edid_block12_buf[loop*TXDDC_PREREAD_NUM], 
                          TXDDC_PREREAD_NUM);
    }
    
    // CRC校验
    for(loop=0; loop<EDID_BLOCK_SIZE; loop++) {
        crc_sum += edid_block12_buf[loop];
    }
    if((crc_sum%256) != 0) {
        return 0;  // CRC错误
    }
    
    return EDID_BLOCK_SIZE;
}

6. 中断处理

支持多种中断类型:

  • HPD热插拔检测
  • 视频格式变化检测
  • MIPI输入稳定性中断
  • EDID读取完成中断
void LT9611UX_SysIntInit(void)
{  
    BK85_05_REG = 0x7C;  // 使能HPD和视频检查中断
    BK85_0D_REG = 0xFF;
    BK85_0D_REG = 0x7C;
    Global_Interrupt(Enable);
}

主循环流程

void LT9611UX_MainLoop(void)
{
    if(flag_mipi_chg) {
        // MIPI输入变化处理
        LT9611UX_Video_Check();
        if(video_format.flag_resolution_get != 0) {
            LT9611UX_TxPLL_Set(&video_format);
            if(LT9611UX_MipiPcr(&video_format) == 1) {
                // MIPI稳定,启动HDMI输出
                LT9611UX_TXPhy_Set();
                LT9611UX_TXDigital_Set();
                LT9611UX_Csc_Set();
                LT9611UX_TX_Set(Enable);
            }
        }
    }
    
    // HPD状态处理
    if(flag_hdmi_hpd_state) {
        LT9611UX_HPD_Check();
        if(video_format.hdmi_hpd_state) {
            LT9611UX_Get_EDID();
            LT9611UX_Set_SCDC();
        }
    }
    
    // 与SoC通信
    LT9611UX_Talk_To_Soc();
    
    delay1ms(5);
}

关键技术特性

1. 自适应输入检测

  • 自动检测MIPI输入端口
  • 动态识别视频格式和时序
  • 支持端口自动切换

2. 高兼容性

  • 支持广泛的视频分辨率
  • 兼容HDMI 1.4和HDMI 2.0
  • 支持多种色彩空间

3. 稳定性保障

  • PCR稳定化机制
  • 多重CRC校验
  • 自动重试机制

4. 调试支持

  • 丰富的调试信息输出
  • 寄存器状态监控
  • 实时状态报告

应用场景

该固件代码适用于:

  1. 移动设备投屏:手机/平板MIPI输出转HDMI
  2. 嵌入式显示:工业设备视频输出
  3. 视频转换器:MIPI到HDMI的信号转换
  4. 监控系统:摄像头CSI信号转HDMI显示

总结

LT9611UXC固件代码展示了完整的视频桥接解决方案,具备高度的自动化和稳定性。通过精密的时钟管理、自适应输入检测和完整的HDMI协议支持,实现了高质量的MIPI到HDMI视频转换功能。代码结构清晰,模块化设计良好,为各种视频转换应用提供了可靠的基础。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐