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.

[参考译文] Linux/AM5718:HDMI 连接问题

Guru**** 1484085 points
Other Parts Discussed in Thread: AM5718, AM5728, TPD12S015, TPD12S016
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/821028/linux-am5718-hdmi-connecting-issue

器件型号:AM5718
主题中讨论的其他器件: AM5728TPD12S015TPD12S016

工具/软件:Linux

海 all、

我们有一个使用 AM5718的定制板。 如果我们将不同的监视器连接到电路板、我们将面临一些奇怪的错误。

我已经使用 EVM 测试了相同的观察结果、并且它可以正常工作。

场景1:

EVM 和连接到显示器的定制板(Dell U2413F)。 我跑过 modetest 和 kmscube、工作正常。

场景2:

EVM 已连接 到显示器(Samsung LA40M81BM-It 是支持 HDMI 连接的电视)。 并且工作正常、没有任何问题。

场景3:

连接 到显示器的定制板(Samsung LA40M81BM-It 是支持 HDMI 连接的电视)。

1) 1)如果我在登录后连接显示器、则开始观察 UART 控制台上的一些打印内容、如下所示。

omap_i2c 48070000.i2c:控制器超时

omap_i2c 48070000.i2c:控制器超时

omap_i2c 48070000.i2c:控制器超时

CPU CPU0:1060000uV[最小850000uV 最大1500000uV]的 VDD 失败

cpufreq:__target_index:无法更改 CPU 频率:-110

omap_i2c 48070000.i2c:控制器超时

omap_i2c 48070000.i2c:控制器超时

omap_i2c 48070000.i2c:控制器超时

2) 2)如果在引导期间和之后连接显示器

omap_i2c 48072000.i2c:400kHz 时的总线1修订版0.12
[3.586406]   htosys:无法打开 RTC 设备(rtc0)
[3.592124]   ALSA 设备列表:"

启动速度非常慢、而且显示的打印内容如下所示、

omap_i2c 48070000.i2c:控制器超时

omap_i2c 48070000.i2c:控制器超时

CPU CPU0:1060000uV[最小850000uV 最大1500000uV]的 VDD 失败

有人可以就这个问题提供帮助吗?

使用的 Linux:4.14.67

SDK:05.01.00.11

此致、

努瓦尔 P

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我建议您比较 AM5728 EVM 和定制板的显示屏 DTS 设置。 对于硬件连接也要执行相同的操作。  

    您可能会遇到一些计时问题或 DTS 配置错误。

    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hai Yordan、

    DTS 文件中没有更改、但在硬件中、tpd12s015没有连接 HPD 引脚。 为此、我们更改 了 tpd12s015的驱动程序代码、以便在 DETECT 函数中返回 Always true。

    谢谢、此致、

    努瓦尔 P

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan、

    通过连接 HPD 引脚纠正了上述问题、现在我们不会遇到如上所示的错误。

    之后、对于显示器(Samsung 和 Dell)、我们在运行 kmscube 应用程序时无法在显示器上看到任何内容。 我们已经探测了 HDMI_DDC_SCL 和 HDMI_DDC_SDA、如果我们运行 kmscube 应用、我们将在引脚上获得信号。  我们在 HDMI 端探测 CLK 和数据、我们没有得到任何东西、

    是否有人可以指导我们解决在监视器上显示 kmscube 的问题?

    此外、在硬件方面还有一个观察结果、

    在 EVM 中、HDMI1_DATA2Y 连接到 AM57XX_HDMI_TX2+、 HDMI1_DATA2X 连接到 AM57XX_HDMI_TX2-、如下图所示。

    但在我们的定制板中、

    HDMI1_DATA2Y 连接到 HDMI_D2_N、 HDMI1_DATA2X 连接到 HDMI_D2_P 请参阅下图。 与 EVM 相比、偶数时钟也连接反向。

    上述更改是否会产生任何差异?

    此致、

    努瓦尔 P  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果 EVM 与有问题的监控器一起工作、而您的电路板不工作、那么我建议遵循 EVM 硬件连接。 我想您连接差分时钟的方式很重要、因为 AM57xx IDK 和 AM57xx EVM 都将数据轴连接到"-"、将数据线连接到"+"。

    让硬件设计团队进行确认。

    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Noufal、您好!

    根据文档、差分信号的极性可以通过任一方式连接。 不清楚的是该开关是否自动处理。 我不认为是这样。 我怀疑有一个寄存器设置定义了 HDMI 差分信号的极性。 在我获得有关该设置的更多详细信息后、我将在这里发布它。

    此致、Bill

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Noufal、您好!

    必须修改一个寄存器、HDMI 才能在极性交换的情况下正常工作。 当前 TRM 中未记录该寄存器。 该寄存器位于地址 0x5804030C。

    有四位用于交换 HDMI 信号的极性  

    位30 -通道 D0的交换极性 (RESET = 0)

    位29 -通道 D1的交换极性 (RESET = 0)

    位28 -通道 D2的交换极性 (RESET = 0)

    位27 -通道 CLK 的交换极性 (RESET = 0)

    要更改极性、请对该寄存器执行读-修改-写操作、并将这四个位设置为 B1111。 请勿将寄存器中的任何其他位更改为不同的值。  

    此致、Bill

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hai Bill、

    我是否应该在驱动程序中应用上述寄存器写入?

    在本例中、HPD 也未连接到 HDMI。 您能在这方面提供帮助吗? 如何绕过驱动器中的 HPD 逻辑?

    如果没有问题、则驱动器根据 HPD 状态读取 EDID。 如何使驱动器在不使用 HPD 的情况下读取 EDID?

    此致、

    努瓦尔 P

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Noufal、您好!

    我已要求 Linux 软件团队回答上述软件问题。  

    此致、Bill

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    AM57xx、使用 tpd12s015编码器、检查 drivers/GPU/DRM/omapdrm/Displays/encoder-tpd12s015.c 中的 tpd_read_EDID () 在 AM57xx-idk-common.dtsi 中、您可以看到通过 GPIO7_12的中断启用了 HPD:
         tpd12s015:编码器@0{
          兼容="ti、tpd12s016"、"ti、tpd12s015";

          GPIO =<0>、//可选 CT_CP_HPD *
             <0>、/*可选 LS_OE */
             <&GPIO7 12 GPIO_ACTIVE_HIGH>;   /* HPD */

    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢你的答复。

    但在我们的定制板中、未连接 HPD。 那么、如何绕过它呢?

    在上述函数中、它仅调用 HDMI 读取 EDID 函数。

    "

       struct panel_drv_data *ddata = TO_panel_data (dssdev);
       struct omap_dss_device *in = ddata->in;

       if (!gpioD_get_value_cansleep (ddata->HPD_GPIO)))
           return -ENODEV;

       return in->ops.HDMI->read_EDID (in、EDID、len);

    "

    此致、

    努瓦尔 P

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Noufal、您好!

    关于绕过 HPD 信号、我已经联系了我们的驱动器专家、我将随时向您发送任何更新。   

    此致、
    Krunal

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Noufal、您好!

    根据我与专家的讨论、如果没有 HPD、驱动器将无法正常工作。 如果 HPD 始终处于上拉状态、则驱动器会认为有连接的东西、并尝试从监视器读取 EDID。 但是、如果没有任何内容、这将失败。

    此致、
    Krunal