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.

[参考译文] DS90UB948-Q1:DS90UB948-Q1 黑屏问题

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1647495/ds90ub948-q1-ds90ub948-q1-black-screen-issue

器件型号: DS90UB948-Q1

您好:

我们的客户使用 DS90UB983+DS90UB948 设计了一个 SERDES 电路。 当主机长时间(大约 12 小时)暂停播放时、将发生黑屏故障。 此时、监控器的背光正常、DS90UB948 的寄存器值与正常显示时相同。 重置 DS90UB948 后、显示屏可正常显示。 您能帮我分析一下吗?

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

    您好、Eric、

    当您说 PAUSE(暂停)时、这意味着您关闭了 Ser 和 DES、然后又打开了两个电源、或者您只关闭并重新打开了 DES?

    您能从电源序列方面提供有关测试条件的更多信息吗?  

    - Fadi A.

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

    1、此系统由 947 和 948 组成。
    2948 侧的配置参数为:
    寄存器地址:0x1E、值:0x53
    寄存器地址:0x1f、值:0x05
    寄存器地址:0x26、值:0x19
    寄存器地址:0x27、值:0x19
    寄存器地址:0x35、值:0x30
    寄存器地址:0x49、值:0xE0
    3、已确认 948 已通电并在 947 初始化后启用。
    、初始化后 4 μ s、寄存器 0x3B 的值为 0x00。 但是、通过将寄存器 0x01 设置为 0x01 来重新启动 948 后、寄存器 0x3B 的值变为 0x0F。 这是为什么? AEQ 功能似乎不起作用。
    5、在出现灰屏问题之前和之后、948 的寄存器值保持不变。
    6、出现灰屏问题后、948 的 IO 直通功能仍在工作、948 可以输出 LVDS CLK 数据。 但是、948 的数据线路输出保持在较低水平、这会打开背光、但不会显示图像。
    、灰屏问题后 7 μ s、将寄存器 0x01 设置为 0x01 可解决该问题。

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

    你好、Fushen、

    我会查看此内容、并在 1-2 个工作日内回复您。

    - Fadi A.

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

    感谢您的支持。 出现问题时、让我添加 947 和 948 的寄存器值。

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

    你好、Fushen、

    让我将所有这些信息汇编成一份、以便明天回顾。  

    你能提供 947+948 的注册转储在一个良好的运行,所以我可以比较你已连接的坏运行.  

    我们的客户使用 DS90UB983+DS90UB948 设计了一个 SERDES 电路。 [/报价]

    也在您的原始请求中您提到 983 + 948 但您的寄存器转储是 947 + 948 您可以确认您正在使用哪个串行器/解串器对、这是支持 HDCP 设备或 UB 的 UH 吗?

    - Fadi A.

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

    1.当屏幕电缆长度从 1.5 米变为 10 米时,948 寄存器 0x3B 的值保持为 0x0F。 不确定此值是否正确。
    2.这些是正常情况下的寄存器值。

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

    你好、Fushen、

    是的、我不确定这在实际中有何意义。 AEQ 将根据电缆长度以不同的方式调整。  

    如果我想把它放在我的工作台上,并尝试几件事情来看看我是否可以重现你能解释一下这个失败是如何表现的吗?  

    1. 到目前为止、我看到这篇文章提到了 2 个不同的串行器(器件型号 983 和 947)-确认问题中使用了哪一个?
    2. 请提供寄存器转储的原始文本文件(在“好“与“坏“之间)
    3. 您在多少个系统上看到此问题以及部署的总系统数?
    4. 我们需要确认您的电源序列、从系统级串行器首先上电、然后是 DES  
    5. 我们还需要从器件级别(单个电源轨,PDB 等)转换电源序列

    我们需要一张示波器快照、  其中显示了所有电压轨彼此之间的关系以及与数据表图相似的时间测量值。  

    如数据表中所述、当您需要对 948 (0x1 = 0x1) 应用软复位时、我怀疑存在一个简单的时序控制问题  

    此致、
    Fadi A.

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

    你好 Fadi、

    感谢您的支持。 反馈如下:

    1、我们使用 947 和 948

    2、故障前后寄存器值之间的比较如下图所示:

    3、我们使用逻辑分析仪来测量 947 和 948 自己的时序、下图中显示了时序:

    e2e.ti.com/.../2026_2D00_05_2D00_30_5F00_16_2D00_34_2D00_42.rar

    4 μ s、示波器捕获 947 侧的时序、如下图所示:

    5、我们在超过 10 台机器上遇到此问题、测试步骤如下:系统在没有任何人工操作的情况下持续运行、并且在运行大约 24 小时后可能会遇到此灰屏问题。

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

    你好 Fadi、

    947 和 948 注册档案补充如下:

    e2e.ti.com/.../8623.OK.txte2e.ti.com/.../8623.NG.txt

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

    你好、Fushen、

    为了正确捕获电源序列、我们需要串行器和 DES 侧捕获、并需要放大电源的斜坡时间、以确保其符合数据表建议。 我们需要采集 947 和 948 的电源序列。  

    我注意到你的转储,你没有应用 947 erratas。 这可能是您在这里遇到的一个已知的罕见问题、称为 AV MUTE。  

    下面是 947 - 948 的勘误代码示例、请确保应用到您的软件中。  

    此处可能发生的问题与勘误表 11 有关  

    #勘误表 11
    board.WriteI2C (UB947、0x04、0x90)#防止 AVMUTE 用于非 HDCP 系统

    """
      TI Confidential - NDA Restrictions
    
      Copyright 2020 Texas Instruments Incorporated. All rights reserved.
    
      IMPORTANT: Your use of this Software is limited to those specific rights
      granted under the terms of a software license agreement between the user who
      downloaded the software, his/her employer (which must be your employer) and
      Texas Instruments Incorporated (the "License"). You may not use this Software
      unless you agree to abide by the terms of the License. The License limits your
      use, and you acknowledge, that the Software may not be modified, copied or
      distributed unless embedded on a Texas Instruments microcontroller which is
      integrated into your product. Other than for the foregoing purpose, you may
      not use, reproduce, copy, prepare derivative works of, modify, distribute,
      perform, display or sell this Software and/or its documentation for any
      purpose.
    
      YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
      PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
      INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
      NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL TEXAS
      INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
      NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL
      EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT
      LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL
      DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS,
      TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT
      LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
    
      Should you have any questions regarding your right to use this Software,
      contact Texas Instruments Incorporated at www.TI.com.
    
    """
    ############################
    # DS90UB947-Q1 Init Code Example v1.1
    # 947->948, Dual FPD-Link STP, 1920x1080@60Hz
    ############################
    
    import time
    import sys
    
    # System dependant variables - adjust according to system 
    UB947 = 0x18        # 947 I2C Address
    UB948 = 0x68        # Remote 948 Address
    StartAmbTemp = 25   # Example temperature measured by local sensor on PCB (Ambient temp around 947). In real system this should be read back from temp sensor during initialization 
    Hres = 1920         # Expected horizontal active resolution
    Vres = 1080         # Expected vertical active resolution 
    
    def pollstate():
        count=0
        board.WriteI2C(UB947,0x23,0x80)
        board.WriteI2C(UB947,0x24,0x80)
        mask = int('11111',2)
        state = board.ReadI2C(UB947,0x24,1)
        while (state & mask) != 27:   #27 = 5'b11011
            time.sleep(0.01)  #10ms delay
            state = board.ReadI2C(UB947,0x24,1)
            count = count +1
            if count == 10:
                print "Error: Serializer is not in Normal state"
                return(1)
        
        board.WriteI2C(UB947,0x23,0x0)
        board.WriteI2C(UB947,0x24,0x0)
    
            
    
    def initsequence():
    
        board.WriteI2C(UB947,0x03,0xDA) # Set I2C passthrough
        
        linked = 0
        retry = 0
        mask = int('10000000',2)
        while linked == 0:
            STS = board.ReadI2C(UB947,0x5A,1)
            if ((STS & mask) != 0):
                linked = 1
                print "Deserializer Detected"
            else:
                time.sleep(0.1)
                retry = retry + 1
                if retry == 10:
                    print "Error: No Deserializer Detected"
                    return()
    
        board.WriteI2C(UB948,0x4A,0x01) # Disable OLDI outputs on 948 to prevent screen glitches from appearing during the init process 
    
        ##### Init A Sequence
    
        # Errata #5 and 6
        board.WriteI2C(UB947,0x5B,0x03) # Force dual FPD-Link, disable reset on PLL frequency change 
    
        # Errata #10
        board.WriteI2C(UB947,0x16,0x02) # Adjust BCC watchdog timer to minimum
    
        # Errata #11
        board.WriteI2C(UB947,0x04,0x90) # Prevent AVMUTE for non-HDCP systems
    
    
    
        state_error = pollstate()  # Poll 947 state machine prior to applying init B errata
    
        if state_error == 1:
            return()
    
        # Errata #3 
        board.WriteI2C(UB947,0x40,0x10)
        board.WriteI2C(UB947,0x41,0x49)
        board.WriteI2C(UB947,0x42,0x16)
        board.WriteI2C(UB947,0x41,0x47)
        board.WriteI2C(UB947,0x42,0x20)
        board.WriteI2C(UB947,0x42,0xA0)
        board.WriteI2C(UB947,0x42,0x20)
        board.WriteI2C(UB947,0x42,0x00)
        board.WriteI2C(UB947,0x41,0x49)
        board.WriteI2C(UB947,0x42,0x00)
    
        time.sleep(0.01)
    
        ##### Timing Confirmation 
    
        retry = 0
        Hconfirm = 0
        Vconfirm = 0
        while (retry < 3):
            board.WriteI2C(UB948,0x68,0x08) # Enable PATGEN BIST
            time.sleep(0.1) # Critical time delay - do not adjust to a shorter value 
            board.WriteI2C(UB948,0x68,0x19) # H active High monitor
            Hhigh = board.ReadI2C(UB948, 0x69, 1)
            board.WriteI2C(UB948,0x68,0x09) # H active Low monitor
            Hlow = board.ReadI2C(UB948, 0x69, 1)
            board.WriteI2C(UB948,0x68,0x39) # V active High monitor
            Vhigh = board.ReadI2C(UB948, 0x69, 1)
            board.WriteI2C(UB948,0x68,0x29) # V active Low monitor
            Vlow = board.ReadI2C(UB948, 0x69, 1)
            board.WriteI2C(UB948,0x68,0x00) # Disable PATGEN BIST
    
            mask = int('00111111',2)
    
            hlowmask = Hlow & mask
            hhighmask = Hhigh & mask
            vlowmask = Vlow & mask
            vhighmask = Vhigh & mask
    
    
            hhighmask = hhighmask << 6
            vhighmask = vhighmask << 6
    
            Hactive = hhighmask | hlowmask
            Vactive = vhighmask | vlowmask
    
            if Hactive != Hres:
                retry  = retry + 1
                board.WriteI2C(UB947,0x40,0x10) # Reset OLDI PLL
                board.WriteI2C(UB947,0x41,0x49)
                board.WriteI2C(UB947,0x42,0x16)
                board.WriteI2C(UB947,0x41,0x47)
                board.WriteI2C(UB947,0x42,0x20)
                board.WriteI2C(UB947,0x42,0xA0)
                board.WriteI2C(UB947,0x42,0x20)
                board.WriteI2C(UB947,0x42,0x00)
                board.WriteI2C(UB947,0x41,0x49)
                board.WriteI2C(UB947,0x42,0x00)
                time.sleep(0.1)
            else:
                Hconfirm = 1
            if Vactive != Vres:
                retry  = retry + 1
                board.WriteI2C(UB947,0x40,0x10) # Reset OLDI PLL
                board.WriteI2C(UB947,0x41,0x49)
                board.WriteI2C(UB947,0x42,0x16)
                board.WriteI2C(UB947,0x41,0x47)
                board.WriteI2C(UB947,0x42,0x20)
                board.WriteI2C(UB947,0x42,0xA0)
                board.WriteI2C(UB947,0x42,0x20)
                board.WriteI2C(UB947,0x42,0x00)
                board.WriteI2C(UB947,0x41,0x49)
                board.WriteI2C(UB947,0x42,0x00)
                time.sleep(0.1)
            else:
                Vconfirm = 1
            if (Hconfirm == 1) and (Vconfirm == 1):
                break
    
        if (retry > 2):
            print "Error: Timing confirmation failed. Double check expected video resolution and OLDI video input"  
            return()
        else:
            print "Initialization Complete"
            board.WriteI2C(UB948,0x01,0x01) # Digital reset to restart AEQ 
            time.sleep(0.1) # Allow time for 948 to relock 
            board.WriteI2C(UB948,0x4A,0x00) # Enable OLDI outputs on 948
    
    initsequence()

    - Fadi A.

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

    你好 Fadi、

    1、您指出的 947 和 948 的开机时间如下:

    2、针对您提到的怀疑、我将修改软件进行测试、测试结果将在 24-48 小时内回复。

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

    你好 Fadi、

    非常感谢您的支持。 此外、我想确认错误表上是否还有其他问题? 您能给我们发送一份错误表副本吗? 我们想确认我们的软件是否存在任何其他未发现的问题。 再次感谢您。

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

    你好、Fushen、

    1、您指出的 947 和 948 的开机时间如下:

    对于电源序列、我们需要一个模拟捕获来查看信号的上升时间。 您要展示的是使用数字信号捕获器时电源轨等之间的延迟。  

    在深入进行电源序列分析之前、我建议添加勘误表、如果这没有解决问题、那么我们可以重新访问。  

    - Fadi A.