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 black screen issue

Part Number: DS90UB948-Q1

Hello,

Our customer designed a SERDES circuit using DS90UB983+DS90UB948. When the host pauses playback for a long time (about 12 hours), a black screen fault will occur. At this time, the backlight of the monitor is normal, and the register value of DS90UB948 is the same as when it is displayed normally. After resetting DS90UB948, the display screen can show normally. Can you help me analyze it?

  • Hi Eric,

    When you say pause what does that mean are you powering down both Ser and Des then powering both back up or you are only powering the Des off and back on?

    Can you provide more information about test condition from the power sequence side of things. 

    - Fadi A.

  • 1、This system consists of 947 and 948.
    2、The configuration parameters on the 948 side are:
    Register address: 0x1E, value: 0x53
    Register address: 0x1F, value: 0x05
    Register address: 0x26, value: 0x19
    Register address: 0x27, value: 0x19
    Register address: 0x35, value: 0x30
    Register address: 0x49, value: 0xE0
    3、It has been confirmed that the 948 is powered and enabled after the 947 is initialized.
    4、After the 948 is initialized, the value of register 0x3B is 0x00. However, after restarting the 948 by setting register 0x01 to 0x01, the value of register 0x3B changes to 0x0F. Why is this? It seems that the AEQ function is not working.
    5、Before and after the gray screen issue occurs, the register values of the 948 remain unchanged.
    6、After the gray screen issue occurs, the IO pass-through function of the 948 is still working, and the 948 can output LVDS CLK data. However, the data line output by the 948 remains at a low level, causing the backlight to turn on but no image to be displayed.
    7、After the gray screen issue occurs, setting register 0x01 to 0x01 resolves the problem.

  • Hi Fushen,

    I will review this and get back to you within 1-2 business days.

    - Fadi A.

  • Thank you for your support. Let me add the register values of the 947 and 948 when the issue occurs.

  • Hi Fushen,

    Let me compile all this information together to review tomorrow. 

    Can you provide a register dump for 947+948 on a good run so I can compare to the bad runs you have attached. 

    Our customer designed a SERDES circuit using DS90UB983+DS90UB948.

    Also in your original request you mention 983 + 948 but your reg dump is 947 + 948 can you confirm which SerDes pair you are using and is this UH with HDCP devices or UB ?

    - Fadi A.

  • 1. When the screen cable length is changed from 1.5 meters to 10 meters, the value of the 948 register 0x3B remains 0x0F. It is uncertain whether this value is correct.
    2. These are the register values under normal conditions.

  • Hi Fushen,

    Yeah I'm not sure this makes sense actually. AEQ will adapt differently based on cable length. 

    If I want to put this on my bench and try few things to see if I can reproduce can you explain to me how this failure manifest? 

    1. So far I see this post has mentioned 2 different Serializer part# 983 and 947 - Confirm which one used in the issue?
    2. Please provide raw text file of reg dumps at good vs bad
    3. How many systems you are seeing this issue on and how many total deployed?
    4. We need to confirm your power sequence from system Level Ser powers up first then Des 
    5. We also need to confrim power sequence from device level (individual rails , PDB, etc.)

    We need a scope shot showing all rails with respect to each other as well as time measurements similar to datasheet plot. 

    I'm suspecting a simple sequencing issue when you need to apply a soft reset to the 948 (0x1 = 0x1) as mentioned in the datasheet 

    Regards,
    Fadi A.

  • Hi Fadi,

    Thank you for your support. The feedback is as follows:

    1、We use 947 and 948

    2、The comparison between the register values before and after the fault is shown in the following figure:

    3、We used a logic analyzer to measure the timing of 947 and 948 ourselves, and the timing is shown in the following figure:

    2026-05-30_16-34-42.rar

    4、Use an oscilloscope to capture the timing sequence of side 947 as shown in the following figure:

    5、We encountered this issue on over 10 machines, and the testing steps were as follows: the system was running continuously without any human operation, and there was a probability of encountering this gray screen problem after running for about 24 hours.

  • Hi Fadi,

    The 947 and 948 register files are supplemented as follows:

    948:
    mp ] i2cdump 6 0x2c 0 256
    mp ] [2026-05-29 01:25:33.970] i2c-6 read device addr=0x2c. offset=0 len=256
    mp ]:       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    mp ] 00:   58 04 00 f0 fe 1e 00 34  00 00 00 00 00 00 00 00
    mp ] 10:   00 00 00 00 00 00 00 00  00 01 00 00 33 10 53 05
    mp ] 20:   00 00 40 38 08 00 19 19  11 00 00 00 00 00 00 00
    mp ] 30:   00 00 90 25 01 30 00 bc  00 00 00 0f 20 e0 23 00
    mp ] 40:   43 03 03 00 60 88 00 00  0f e0 00 08 00 00 63 00
    mp ] 50:   03 10 00 01 80 00 00 00  00 7f 20 20 00 00 00 00
    mp ] 60:   00 00 00 00 10 00 00 00  00 00 00 00 00 00 00 00
    mp ] 70:   00 00 00 07 07 08 00 00  00 00 00 00 02 00 00 00
    mp ] 80:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] 90:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] a0:   00 00 0d 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] b0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] c0:   00 00 00 00 00 00 00 00  c0 00 00 00 00 00 00 00
    mp ] d0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] e0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] f0:   5f 55 42 39 34 38 00 00  00 00 00 00 00 00 00 00
    
    947:
    mp ] i2cdump 6 0x1a 0 256
    mp ]  i2c-6 read device addr=0x1a. offset=0 len=256
    mp ]        0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    mp ] 00:   34 00 00 9a 80 00 58 00  00 00 1e 00 17 23 35 03
    mp ] 10:   33 33 00 cc 00 01 fe 9e  7f 7f 01 00 0d 00 01 00
    mp ] 20:   0b 00 25 00 00 00 00 00  01 20 20 a0 00 00 a5 5a
    mp ] 30:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] 40:   14 4b 00 00 80 00 63 00  00 00 00 00 00 00 00 80
    mp ] 50:   16 00 00 00 00 00 00 02  00 00 cd 00 02 06 44 87
    mp ] 60:   22 02 00 00 10 00 00 00  00 00 00 00 00 00 00 00
    mp ] 70:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] 80:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] 90:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] a0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] b0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] c0:   00 00 80 00 78 00 00 60  c0 00 00 00 00 00 ff 00
    mp ] d0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] e0:   00 00 80 00 68 38 00 00  00 00 00 00 00 00 00 00
    mp ] f0:   5f 55 42 39 34 37 00 00  00 00 00 00 00 00 00 00
    
    
    948-����
    mp ]        0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    mp ] 00:   58 04 00 f0 fe 1e 00 34  00 00 00 00 00 00 00 00
    mp ] 10:   00 00 00 00 00 00 00 00  00 01 00 00 33 10 53 05
    mp ] 20:   00 00 40 38 08 00 19 19  11 00 00 00 00 00 00 00
    mp ] 30:   00 00 90 25 01 30 00 bc  00 00 00 0f 20 e0 23 00
    mp ] 40:   43 03 03 00 60 88 00 00  0f e0 00 08 00 00 63 00
    mp ] 50:   03 10 00 01 80 00 00 00  00 7f 20 20 00 00 00 00
    mp ] 60:   00 00 00 00 10 00 00 00  00 00 00 00 00 00 00 00
    mp ] 70:   00 00 00 07 07 08 00 00  00 00 00 00 02 00 00 00
    mp ] 80:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] 90:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] a0:   00 00 0d 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] b0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] c0:   00 00 00 00 00 00 00 00  c0 00 00 00 00 00 00 00
    mp ] d0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] e0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] f0:   5f 55 42 39 34 38 00 00  00 00 00 00 00 00 00 00
    
    
    947-����
    mp ]        0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    mp ] 00:   34 00 00 9a 80 00 58 00  00 00 14 00 17 23 35 03
    mp ] 10:   33 33 00 cc 00 01 fe 9e  7f 7f 01 00 05 00 01 00
    mp ] 20:   0b 00 25 00 00 00 00 00  01 20 20 a0 00 00 a5 5a
    mp ] 30:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] 40:   14 4b 00 00 80 00 63 00  00 00 00 00 00 00 00 80
    mp ] 50:   16 00 00 00 00 00 00 02  00 00 cd 00 02 06 44 88
    mp ] 60:   22 02 00 00 10 00 00 00  00 00 00 00 00 00 00 00
    mp ] 70:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] 80:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] 90:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] a0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] b0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] c0:   00 00 80 00 68 38 00 20  c0 00 00 00 00 00 ff 00
    mp ] d0:   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
    mp ] e0:   00 00 80 00 68 38 00 00  00 00 00 00 00 00 00 00
    mp ] f0:   5f 55 42 39 34 37 00 00  00 00 00 00 00 00 00 00

  • Hi Fushen,

    For power sequence to be captured correctly we need both Ser and Des side capture and need to zoom into the ramp time of the supply to ensure it matches datasheet recommendation. We need power sequence capture of the 947 and 948 please. 

    I noticed from your dump that you don't have the 947 Erratas applied. This could be a known rare issue called AV mute that you're encountering here. 

    Here is an example Errata code for 947 - 948 please make sure to apply into your software. 

    The issue that might be happening here is related to Errata#11 

    # Errata #11
    board.WriteI2C(UB947,0x04,0x90) # Prevent AVMUTE for non-HDCP systems

    """
      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.

  • Hi Fadi,

    1、The power on timing of 947 and 948 you pointed out is as follows:

    2、In response to the suspicion you mentioned, I will modify the software for testing, and the test results will be replied to within 24-48 hours.

  • Hi Fadi,

    Thank you very much for your support. Also, I would like to confirm if there are any other issues on the error table? Could you please send us a copy of the error table? We would like to confirm if there are any other undiscovered issues with our software. Thank you again.

  • Hi Fushen,

    1、The power on timing of 947 and 948 you pointed out is as follows:

    For power sequence we need an analog capture to see the rise-time of a signal. What you are showing is the delay between rails etc. with a digital signal capture. 

    Before diving into power sequence analysis I recommend adding the Erratas and if that doesn't take care of the issue then we can revisit. 

    - Fadi A.