LT9611 MIPI转HDMI芯片,方案成熟,提供技术支持

9611 调试说明
移植好提供的 9611 新塘单片机代码后,如果 HDMI 端不能正常输出信号,可以从以下
2 个方面排除配置上的问题:
1. 程序中的分辨率 timing 构造是否和输入的 MIPI 信号完全对应:
2 MIPI D‐PHY 参数中的 settle 参数对于 9611 采集解析输入信号的分辨率等信息,以及
PCR 像素信息恢复的稳定醒来说非常重要。下图中的寄存器对于 1080P60 分辨率,不同
平台的 MIPI 信号一般配置 0x08‐0x10 ,具体需要去试。其他小一些的分辨率该参数配置
也应该适当减小:

void LT9611_Dphy_debug(void)
{
//主要是可以获取输入的正负是否连接正确,每条lane的sot是否正常,如果读不到任何值可能输入的A/B Port配置不对
//如果提取不到分辨率可以加入打印,可以提取分辨率就不需要看该部分状态
    #ifdef _mipi_Dphy_debug_
    u8 temp;
    
    HDMI_WriteI2C_Byte(0xff,0x83);
    temp = HDMI_ReadI2C_Byte(0xbc);
    if(temp == 0x55)
    printf("\r\nport A lane PN is right");
    else
    printf("\r\nport A lane PN error 0x83bc = 0x%bx",temp);
    
    temp = HDMI_ReadI2C_Byte(0x99);
    if(temp == 0xb8)
    printf("\r\nport A lane 0 sot right ");
    else
    printf("\r\nport A lane 0 sot error = 0x%bx",temp);

    temp = HDMI_ReadI2C_Byte(0x9b);
    if(temp == 0xb8)
    printf("\r\nport A lane 1 sot right ");
    else
    printf("\r\nport A lane 1 sot error = 0x%bx",temp);
    
    temp = HDMI_ReadI2C_Byte(0x9d);
    if(temp == 0xb8)
    printf("\r\nport A lane 2 sot right ");
    else
    printf("\r\nport A lane 2 sot error = 0x%bx",temp);
    
    temp = HDMI_ReadI2C_Byte(0x9f);
    if(temp == 0xb8)
    printf("\r\nport A lane 3 sot right ");
    else
    printf("\r\nport A lane 3 sot error = 0x%bx",temp);
    
    printf("\r\nport A lane 0 settle = 0x%bx",HDMI_ReadI2C_Byte(0x98));
    printf("\r\nport A lane 1 settle = 0x%bx",HDMI_ReadI2C_Byte(0x9a));
     printf("\r\nport A lane 2 settle = 0x%bx",HDMI_ReadI2C_Byte(0x9c));
     printf("\r\nport A lane 3 settle = 0x%bx",HDMI_ReadI2C_Byte(0x9e));

    #endif
}
void LT9611_Video_Check(void)
{
//主要是获取mipi解析到的分辨率是否正常,如果不正常可以看下settle的配置以及通道是否正常
    u8 mipi_video_format=0x00;
    u16 h_act, h_act_a ,h_act_b, v_act,v_tal;
    u16 h_total_sysclk;

    HDMI_WriteI2C_Byte(0xff,0x82); // top video check module
    h_total_sysclk = HDMI_ReadI2C_Byte(0x86);
    h_total_sysclk = (h_total_sysclk<<8) + HDMI_ReadI2C_Byte(0x87);
    printf("\33[32m");
    printf("\n-----------------------------------------------------------------------------");
    printf("\nLT9611_Video_Check: h_total_sysclk = %d",h_total_sysclk);

    v_act=HDMI_ReadI2C_Byte(0x82);
    v_act=(v_act<<8)+HDMI_ReadI2C_Byte(0x83);
    v_tal=HDMI_ReadI2C_Byte(0x6c);
    v_tal=(v_tal<<8)+HDMI_ReadI2C_Byte(0x6d);
    
    HDMI_WriteI2C_Byte(0xff,0x83);
    h_act_a = HDMI_ReadI2C_Byte(0x82);
    h_act_a = (h_act_a<<8)+HDMI_ReadI2C_Byte(0x83);
    
    h_act_b = HDMI_ReadI2C_Byte(0x86);
    h_act_b =(h_act_b<<8)+HDMI_ReadI2C_Byte(0x87);


    if(lt9611.input_color_space==YUV422)
    {
        printf("\nLT9611_Video_Check: lt9611.input_color_space = YUV422");
        h_act_a /= 2; 
        h_act_b /= 2;
    }
    if(lt9611.input_color_space==RGB565)
    {
        printf("\nLT9611_Video_Check: lt9611.input_color_space = RGB565");
        h_act_a /= 2; 
        h_act_b /= 2;
    }
    else if(lt9611.input_color_space==RGB888)
    {
          printf("\nLT9611_Video_Check: lt9611.input_color_space = RGB888");
           h_act_a /= 3; 
            h_act_b /= 3;
    }

    mipi_video_format=HDMI_ReadI2C_Byte(0x88);

    printf("\nLT9611_Video_Check: h_act_a, h_act_b, v_act, v_tal: %d, %d, %d, %d, ",h_act_a, h_act_b, v_act, v_tal);
    printf("\nLT9611_Video_Check: mipi_video_format: 0x%bx",mipi_video_format);
                     
  if(lt9611.mipi_port_cnt==dual_port_mipi)//if(0)//(P10 == 0) //dual port.
      h_act = h_act_a + h_act_b;
    else
      h_act = h_act_a;


    printf("\r\nLT9611_Video_Check: Video_Format =");

猜你喜欢

转载自blog.csdn.net/m0_47688674/article/details/125777326