This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM385中DVO2输出出问题



 在dm385中需要使用dvo2输出RGB888信号到lcd

 遇到的问题是dvo2的数据线没有输出,但是同步信号输出正常。

 请大家一起帮忙分析一下,谢谢!

 我使用的sdk是dvrrdk4.0

 

 


  • 您好,  之前你用其他的格式比如YUV 16bit之类的,能够正常输出吗?    先确认下pinmux这块是否已经正确配置?

  • 你好;

           你是通过vout0 输出的吗 ?

           Pins with VOUT0 are connected to DVO2

  • 在dvr_rdk/ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/platforms/ti8107/src/vps_platformTI8107.c中进行了相关设置

    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AB8) = 0x1; /* vout0_fid_mux1 */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0ABC) = 0x1; /* vout0_clk */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AC0) = 0x1; /* vout0_hsync */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AC4) = 0x1; /* vout0_vsync */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AC8) = 0x1; /* vout0_avid */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0ACC) = 0x1; /* vout0_b_cb_c[2] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AD0) = 0x1; /* vout0_b_cb_c[3] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AD4) = 0x1; /* vout0_b_cb_c[4] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AD8) = 0x1; /* vout0_b_cb_c[5] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0ADC) = 0x1; /* vout0_b_cb_c[6] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AE0) = 0x1; /* vout0_b_cb_c[7] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AE4) = 0x1; /* vout0_b_cb_c[8] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AE8) = 0x1; /* vout0_b_cb_c[9] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AEC) = 0x1; /* vout0_g_y_yc[2] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AF0) = 0x1; /* vout0_g_y_yc[3] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AF4) = 0x1; /* vout0_g_y_yc[4] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AF8) = 0x1; /* vout0_g_y_yc[5] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AFC) = 0x1; /* vout0_g_y_yc[6] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B00) = 0x1; /* vout0_g_y_yc[7] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B04) = 0x1; /* vout0_g_y_yc[8] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B08) = 0x1; /* vout0_g_y_yc[9] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B0C) = 0x1; /* vout0_r_cr[2] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B10) = 0x1; /* vout0_r_cr[3] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B14) = 0x1; /* vout0_r_cr[4] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B18) = 0x1; /* vout0_r_cr[5] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B1C) = 0x1; /* vout0_r_cr[6] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B20) = 0x1; /* vout0_r_cr[7] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B24) = 0x1; /* vout0_r_cr[8] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B28) = 0x1; /* vout0_r_cr[9] */

  • 是的,使用的VOUT0引脚

    VOUT[0]_B_CB_C2 ~ VOUT[0]_B_CB_C9

    VOUT[0]_R_CR2 ~ VOUT[0]_R_CR_C9

    VOUT[0]_G_Y_YC[2] ~ VOUT[0]_G_Y_YC[9]

  • 1. pinmux还是请去回读一下pinmux寄存器看看是否是你预期要改的值。因为可能在代码的其他位置被覆盖掉了

    2. 除了H/Vsync, pixel clk出来了吗?

  • 恩,我回读一下试试

    pixel clk可以测试出来

  • 运行完环境和程序后

    使用如下命令读出pinmux寄存器,我觉得引脚复用应该没有问题

    0x48140acc: 00000001
    0x48140ad0: 00000001
    0x48140ad4: 00000001
    0x48140ad8: 00000001
    0x48140adc: 00000001
    0x48140ae0: 00000001
    0x48140ae4: 00000001
    0x48140ae8: 00000001
    0x48140aec: 00000001
    0x48140af0: 00000001
    0x48140af4: 00000001
    0x48140af8: 00000001
    0x48140afc: 00000001
    0x48140b00: 00000001
    0x48140b04: 00000001
    0x48140b08: 00000001
    0x48140b0c: 00000001
    0x48140b10: 00000001
    0x48140b14: 00000001
    0x48140b18: 00000001
    0x48140b1c: 00000001

  • 你好;

            你可以查一下 / sys/devices /platform/vpss/display 下面的状态信息是正常的吗?

            输出的分辨率信息,时序信息;

            再打印出display link 的模块的状态信息,刷新数据的信息,看是否有问题在里面。

  • 还有就是使用color bar寄存器让DVO2自行生成测试彩条看看。如果能有彩条正常输出的话应该是DVO本身配置正常,而显示内容没有正常送到DVO了

  • 在dm385手册中没有找到dvo2输出color bar信息的寄存器

  • 请问dm385的dvo2在rdk程序中是不是使用SYSTEM_LINK_ID_DISPLAY_0

    也就是说hdmi dvo2 以及hdcomp是共用一个linkId对吗?

    hdmi和dvo2可以输出不同分辨率视频吗

  • 不可以输出不同的分辨率,因为是用的同一个时钟源;

    hdmi 和 hdcomp 是 tied输出的 dctrlTriDisplayConfig->vencInfo.tiedVencs = (VPS_DC_VENC_HDMI | VPS_DC_VENC_HDCOMP);

    你可以看一下system_dctrl.c 文件;

  • dvo2没有和hdmi tied,是不是就可以输出不同的分辨率了

  • hdmi 的输出对应是 SYSTEM_LINK_ID_DISPLAY_0

    DVO2 对应的是输出 SYSTEM_LINK_ID_DISPLAY_1


    刚才上面说错了,应当是这样的:hdmi 和dvo2 可以输出不用的分辨率视频,hdcomp和那个tied 到一起,就必须和tied的信号保持相同的分辨率输出

  • 我从rdk4.0代码中看SYSTEM_LINK_ID_DISPLAY_1指的是标清输出接口

  • sorry ,刚才看了源代码,在程序里面确实是配置SYSTEM_LINK_ID_DISPLAY_1为sd接口的输出了;

  • 既然这样,又回到了上述问题

    dvo2没有和hdmi tied,是不是就可以输出不同的分辨率了

  • SYSTEM_LINK_ID_DISPLAY_1 的输出配置:

  • quan wang5 说:

    既然这样,又回到了上述问题

    dvo2没有和hdmi tied,是不是就可以输出不同的分辨率了

    可以输出不同的分辨率;

    你程序还需要修改,要不然变成了hdmi输出或者是dvo2输出

    #if defined(TI_8107_BUILD)
        if( vdDevId == VDIS_DEV_HDMI)
        {
            displayId = gVdisModuleContext.displayId[0];
        }
        else if(( vdDevId == VDIS_DEV_HDCOMP) || ( vdDevId == VDIS_DEV_DVO2))
        {
            displayId = gVdisModuleContext.displayId[0];
        }
        else if(vdDevId == VDIS_DEV_SD)
        {
            displayId = gVdisModuleContext.displayId[1];
        }
        else
        {
            displayId = SYSTEM_LINK_ID_INVALID;
        }
    #endif
  • 这样子的话使用SYSTEM_LINK_ID_DISPLAY_0会导致on-chip hdmi dvo2 hdcomp都输出视频?

  • 现在遇到的问题是使用SYSTEM_LINK_ID_DISPLAY_0

    让dvo2输出SYSTEM_STD_XGA_60分辨率,同步信号和时钟都是正常的,但是数据信号(24bitRGB)没有任何输出

    引脚复用是正确的。

    在代码中我只能绑定HDMI和HDCOMP

    如果绑定HDMI和DVO2程序会报错退出

  • quan wang5 说:

    这样子的话使用SYSTEM_LINK_ID_DISPLAY_0会导致on-chip hdmi dvo2 hdcomp都输出视频?

    肯定不会的,应当只有hdmi 和hdcomp 有输出;

    这里的配置都是按照demo来的,你看demo里面的描述,也没有说是dvo2输出;

  • 关于DVO2的输出,你看一下hdvpss的手册:DVRRDK_04.00.00.03/ti_tools/hdvpss/dvr_rdk_hdvpss/docs/HDVPSS_UserGuide.pdf

    你可以把display 0 从hdmi 接口输出,修改为dvo2输出,也可以把display 1 由sd 的输出修改为dvo2的输出;

    你重点看一下下面两个文件中对hdvpss的输出配置,可以直接修改

    DVRRDK_04.00.00.03/dvr_rdk/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c

    DVRRDK_04.00.00.03/dvr_rdk/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c

  • 谢谢,我先研究下这块代码把

  • 我修改了这个配置,DVO2现在有输出了,

    但是颜色空间有问题,而且采集的视频不能显示到输出的LCD上面

    Vps_DcConfig gSystem_dctrlTriDisplayConfig = {
    VPS_DC_USERSETTINGS, /* Use Case */
    /* Edge information */
    {
    {VPS_DC_BP0_INPUT_PATH, VPS_DC_HDCOMP_MUX},
    {VPS_DC_HDCOMP_MUX, VPS_DC_CIG_PIP_INPUT},
    {VPS_DC_CIG_PIP_OUTPUT, VPS_DC_HDMI_BLEND},
    {VPS_DC_CIG_PIP_OUTPUT, VPS_DC_DVO2_BLEND},
    {VPS_DC_SEC1_INPUT_PATH, VPS_DC_SDVENC_MUX},
    {VPS_DC_SDVENC_MUX, VPS_DC_SDVENC_BLEND},
    {VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDMI_BLEND},
    {VPS_DC_GRPX0_INPUT_PATH, VPS_DC_DVO2_BLEND},
    {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_SDVENC_BLEND},
    } ,
    9,
    /* VENC information */
    {
    /* Mode information */
    {
    {VPS_DC_VENC_HDMI, {FVID2_STD_1080P_60}
    }
    , /* 1080p30 is mode
    * is overwritten
    * later inside
    * System_displayCtrlInit
    * System_displayCtrlInit
    */
    {VPS_DC_VENC_DVO2, {FVID2_STD_1080P_60}
    }
    , /* 1080p30 is mode
    * is overwritten
    * later inside
    * System_displayCtrlInit
    */
    {VPS_DC_VENC_SD, {FVID2_STD_NTSC}
    }
    }
    ,
    (VPS_DC_VENC_HDMI | VPS_DC_VENC_DVO2), /* Tied VENC bit
    * mask */
    3u /* Number of VENCs */
    }
    };

  • 你上面这样配置,看起来还是有问题;

    你参考一下这个:

        /* Edge information */
        {
            {VPS_DC_BP0_INPUT_PATH, VPS_DC_VCOMP_MUX},
            {VPS_DC_VCOMP_MUX, VPS_DC_VCOMP},
            {VPS_DC_CIG_NON_CONSTRAINED_OUTPUT, VPS_DC_HDMI_BLEND},
    
            {VPS_DC_BP1_INPUT_PATH, VPS_DC_HDCOMP_MUX},
            {VPS_DC_HDCOMP_MUX, VPS_DC_CIG_PIP_INPUT},
            {VPS_DC_CIG_PIP_OUTPUT, VPS_DC_DVO2_BLEND},
    
            {VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDMI_BLEND},
            {VPS_DC_GRPX1_INPUT_PATH, VPS_DC_DVO2_BLEND},
    
            {VPS_DC_MAIN_INPUT_PATH, VPS_DC_VCOMP},
            {VPS_DC_AUX_INPUT_PATH, VPS_DC_VCOMP_MUX},
        },
  • 你上面的配置,应该是没有tied的对吧

  • 根据你的这个配置,dvo2是使用display_1?
  • 默认是这样的,你可以通过display来指定输出到hdmi或者是dvo2的;

    static inline Void DisplayLink_CreateParams_Init(DisplayLink_CreateParams *prm)
    {
        memset(prm, 0, sizeof(*prm));
    
        prm->numInputQueues = 1;
        prm->activeQueue    = 0;
        prm->forceFieldSeparatedInputMode = FALSE;
    
        memset(prm->inQueParams,0,sizeof(prm->inQueParams));
        prm->displayId = DISPLAY_LINK_DISPLAY_AUTO_SELECT;
    }
  • quan wang5 说:

    你上面的配置,应该是没有tied的对吧

    上面的输出配置是没有做tied的,我这里是把dvo2输出到lcd 屏幕上面去的,不需要做tied的处理

  • 请问您颜色空间的问题是否解决,现在调试8148遇到了类似的问题。颜色也是不正确,不知道你是如何解决的???