器件型号: DS90UB948-Q1
您好:
我们的客户使用 DS90UB983+DS90UB948 设计了一个 SERDES 电路。 当主机长时间(大约 12 小时)暂停播放时、将发生黑屏故障。 此时、监控器的背光正常、DS90UB948 的寄存器值与正常显示时相同。 重置 DS90UB948 后、显示屏可正常显示。 您能帮我分析一下吗?
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
您好:
我们的客户使用 DS90UB983+DS90UB948 设计了一个 SERDES 电路。 当主机长时间(大约 12 小时)暂停播放时、将发生黑屏故障。 此时、监控器的背光正常、DS90UB948 的寄存器值与正常显示时相同。 重置 DS90UB948 后、显示屏可正常显示。 您能帮我分析一下吗?
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、
让我将所有这些信息汇编成一份、以便明天回顾。
你能提供 947+948 的注册转储在一个良好的运行,所以我可以比较你已连接的坏运行.
我们的客户使用 DS90UB983+DS90UB948 设计了一个 SERDES 电路。 [/报价]也在您的原始请求中您提到 983 + 948 但您的寄存器转储是 947 + 948 您可以确认您正在使用哪个串行器/解串器对、这是支持 HDCP 设备或 UB 的 UH 吗?
- Fadi A.
你好、Fushen、
是的、我不确定这在实际中有何意义。 AEQ 将根据电缆长度以不同的方式调整。
如果我想把它放在我的工作台上,并尝试几件事情来看看我是否可以重现你能解释一下这个失败是如何表现的吗?
我们需要一张示波器快照、 其中显示了所有电压轨彼此之间的关系以及与数据表图相似的时间测量值。
如数据表中所述、当您需要对 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 注册档案补充如下:
你好、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.