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.

DS90UB941AS-Q1: 使用SoC的DSI data和clock无法点亮屏幕

Part Number: DS90UB941AS-Q1
Other Parts Discussed in Thread: SN65DSI83

您好,我们基于内部图像生成器能够点亮屏幕。应用简图如下:

但是使用SoC的DSI data和clock多次尝试仍无法点亮屏幕。我们的DSI输出配置为视频模式,突发模式,连续时钟模式。使用示波器能看到DSI正常输出了。

但是在执行了寄存器配置后,屏幕仍然无法工作。

于是我们检查了DPHY相关寄存器0xF,0x10,0x11, 0x12, 0x13,0x14,0x15看到四个data lane的状态寄存器值都为0x14 = 0001 0100,其中的bit2 和bit4有提示错误。如下图所示

   

请问:

1. 这是代表SoC的DSI输出配置不对吗还是什么其他错误?

2. 我们仅配置了941的寄存器,928解串器需要额外的配置吗?

我们的寄存器配置如下:

#!/bin/bash

# 800x480p60, Dual Link FPD III
# PCLK = 33.264MHz
# DSI clock = 99.792MHz
# DSI Lane Speed = 199.584Mbps/lane
# 4 Lanes DSI
# DSI input port 0
# DSI clock and DSI data
# use i2c-tools to debug

set -e

I2C_BUS_NUMBER=1
UB941AS_ADDR=0x12
UB928_ADDR=0x2c

# Disable DSI
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x01 0x08

# Select FPD-Link III Port 0
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x1e 0x01

# Enable I2C_PASSTHROUGH
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x03 0x9a

# Force select port 0
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x5b 0x21

# Select DSI Port 0 digital registers
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x40 0x04
# Select DSI_CONFIG_0 register
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x20
# Set DSI_SYNC_PULSES = 0
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x6f

# Select DSI_CONFIG_1 register
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x21
# Set DSI_VS_POLARITY=DSI_HS_POLARITY=1
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x60
#i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x00

# Set DSI_CONTINUOUS_CLOCK, single DSI, 4 lanes, DSI Port 0 input
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x4f 0x8c

# DSI_HSW_CFG_HI
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x30
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x00
# DSI_HSW_CFG_LO hsync-len = 48
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x31
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x30
# DSI_VSW_CFG_HI
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x32
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x00
# DSI_VSW_CFG_LO vsync-len = 1
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x33
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x01

# TSKIP_CNT set DSI/D-PHY port0
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x40 0x04
# TSKIP_CNT set indirect addr (reg DPHY_SKIP_TIMING)
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x05
# TSKIP_CNT set reg DPHY_SKIP_TIMING value
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x04

# Initialize DSI clock settings (From Section 10.2 of datasheet)
i2cset -y -f $I2C_BUS_NUMBER $UB941AS_ADDR 0x40 0x10
i2cset -y -f $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x86
i2cset -y -f $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x0A
i2cset -y -f $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x94
i2cset -y -f $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x0A

# Enable DSI
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x01 0x00

谢谢!

  • 您好,您的问题我们需要升级到英文论坛看下,有答复尽快给到您。

  • 您好,

    1. 这是代表SoC的DSI输出配置不对吗还是什么其他错误?

    根据寄存器的内容为0x14,说明每个 DPHY 通道上都存在同步序列错误。 您是否可以输出 PATGEN , 请查看此应用手册中的第3部分: 

    https://www.ti.com/lit/an/snla356/snla356.pdf?ts=1695335470653&ref_url=https%253A%252F%252Fe2e.ti.com%252F&_ticdt=MTY5NTM1MzgyM3wwMTg1YTQwNTFmNWEwMDIwYjdkN2MxOGJjOTk0MDUwNzIwMDE4MDZhMDA3ZTh8R0ExLjIuMjEzNDI5MzkwOS4xNjczNDk0MDc4

    建议您遵循此应用手册中提供的流程图,因为该图可以帮助您逐步缩小问题范围。

  • 我们的PATGEN结果如下:

    1. 内部clock 内部timing 测试结果:正常显示

    2. 外部clock 内部timing 测试结果:正常显示

    3. 外部clock 外部timing 测试结果:没有显示

    我们需要先将外部clock外部timing的PATGEN调通这样子更方便定位问题是吧?

    然后有一个疑惑,就是都使用外部clock 外部timing,使能PATGEN和不使能PATGEN区别在哪里?

    我的理解是,使能PATGEN则显示的图像就是我设置的色条或渐变图案,不使能PATGEN则就是显示SoM输出的图像,也就是显示内容的差别是吗?

  • 我们确认后给您答复。

  • 您好,

    1. 内部clock 内部timing 测试结果:正常显示

    2. 外部clock 内部timing 测试结果:正常显示

    3. 外部clock 外部timing 测试结果:没有显示

    由于您这边能够生成 PATGEN,因此 FPD-Link 配置正确。

    DSI_VD_DTYPE 是否正确? 

    都使用外部clock 外部timing,使能PATGEN和不使能PATGEN区别在哪里?

    请看以下图片:

  • 好的,谢谢解释。

    我看手册上只有的DSI_VC_DTYPE寄存器,找不到DSI_VD_DTYPE,这个是笔误吗?

    执行完配置后,DSI_VC_DTYPE读出来是0x3e,

  • 您好,

    我看手册上只有的DSI_VC_DTYPE寄存器,找不到DSI_VD_DTYPE,这个是笔误吗?

    执行完配置后,DSI_VC_DTYPE读出来是0x3e,

    抱歉,应该是DSI_VC_DTYPE才对。

    DSI 数据类型的低4位应介于0xB 到0xE 之间。 在您的系统中收集的数据,低4位为0xE,所以是正确的。 

    下一步您可以"Check Section 4.4 to verify TSKIP_CNT"。代码显示 TSKIP 值为0x04。 工程师这边使用app note中提供的公式(TSKIP_CNT = (65 * 0.099792 - 5) << 1) 进行了计算,该公式应该是0x2。 您能否在您的系统中进行测试? 

  • 您好,我们测试了,将原来设的0x4改为0x2也仍然黑屏,还有其他方法能确认哪些地方有问题吗?

  • 您好,

    您能否按照步骤4.3 + 4.6执行操作,然后将每个部分的数据分享下? 

  • 4.6:

    我们使用的是突发模式,所以DSI_CONFIG_0 寄存器中的 DSI_SYNC_PULSES 设置为0

    # Select DSI Port 0 digital registers
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x40 0x04
    # Select DSI_CONFIG_0 register
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x20
    # Set DSI_SYNC_PULSES = 0
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x6f

    同时,源信号参数如下:

    HACT = 800
    HFP = 40
    HBP = 40 
    HSW = 48
    HTOTAL = 928
    VACT = 480
    VFP = 13
    VBP = 31 
    VSW = 1
    VTOTAL = 525

    按照要求也去设置了HSW 和VSW寄存器

    # DSI_HSW_CFG_HI
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x30
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x00
    # DSI_HSW_CFG_LO hsync-len = 48
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x31
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x30
    # DSI_VSW_CFG_HI
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x32
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x00
    # DSI_VSW_CFG_LO vsync-len = 1
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x33
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x01

    4.3:

    dsi分析仪我们这边暂时没有,示波器抓了一下lane 0的波形如下:

  • 您好,由于假期在即,我们无法及时为您提供更新和反馈,十分抱歉。

    您可以通过以下链接来查看该问题的最新进展:

    https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1273097/ds90ub941as-q1-using-the-soc-s-dsi-data-and-clock-cannot-light-on-the-screen/4832892#4832892

  • 您好,

    LP-11转换看起来好像发生在 HFP 期间。 在结束video line lone packet和发送 HSS 数据包之间,DSI 源可能没有足够的时间在 HS->LP->HS 之间进行转换。

    可以试下以下方法:

    能否探测941正在接收的 HS/VS/DE 信号? 数据收集完成后,请分享捕获到的saleae

    需要完成的过程如下:

    1. Ensure VDDIO is 3.3V
    2. Write 0xB6 to register 0x24
    3. Probe GPIO 14, 38, and 39 with a Saleae
    4. GPIO 4 = Data Enable, GPIO 38 = VSYNC, GPIO 39 = HSYNC
  • 您好,关于该问题,您可以参阅以下答复:

    1. 工程师重新又看了您给出的信息,看起来您实际上是在为 DSI 事件模式和脉冲模式配置941AS,因为您正在配置 DSI_SYNC_PULSES = 0。 这是可以做到的,但并不需要,因为您的 SoC 似乎已经发送了 HSS 和 HSE (脉冲模式)。

    但确实有有一个问题,即在事件模式下,当您覆盖时序时,941AS 存在一个已知的文档错误、即 DSI_VSYNC_WIDTH 的覆盖值必须从所需值+1处减1。 您可以参阅该链接来查看有关该错误的更多信息:

    https://e2e.ti.com/support/interface-group/interface---internal/f/interface---internal-forum/1116357/ds90ub941as-q1-need-help-to-complete-review-script-for-2-2-independent-mode

    所以您需要进行以下修改: 

    # DSI_VSW_CFG_LO vsync-len = 1
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x41 0x33
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x42 0x02

    以上修改实际上可能会解决您的显示问题,因为使用当前配置,您不会获得任何 Vsync 脉冲,但要明确的是,它并不能100%纠正您从 DSI 来源获得的时序问题。 如果上述操作仍无法解决您的问题,我们可以通过第二点来更正 SoC 时序问题。

    2. 对于 SoC 时序问题,请看以下电子表格,其中显示了计算出的来自不同 DSI 数据包事件之间 SoC 的时序,并与测量值进行了比较以显示差异。 重点是 HFP 值大于预期值,这是因为 SoC 驱动程序正在尝试在 HFP 中插入一个 LP11脉冲,但没有足够的时间来这么做,并且仍然保持您预期的视频 DPI 时序。 因此其效果是 HFP 太长,HSW 与预期值相比太短。 这只能通过 SoC 配置来解决。 有关此现象的详细信息,请参阅 DSI 启动应用手册的第4.3节:

    941AS Timing Calcs.xlsx

    https://www.ti.com/lit/pdf/snla356

  • 您好,看起来,波形HFP 值大于预期值问题并不会导致屏幕黑屏,至少会有显示。

    因为在没有修改dsi源的情况下,我们在941的驱动中修改了一些内容,结合提供的寄存器的修改,现在使用dsi已经能够成功点亮屏幕了。

    只不过屏幕的画面整体向左偏,右边会有一块黑的,如下所示:

    有个疑问,同样的屏幕之前我们在sn65dsi83上使用相同的时序画面是不偏移的,相同的时序给到941画面就向左偏,两个器件的dsi输入源也是保持一致的,有些奇怪。尽管我们也可以在设备树中将HBP的值调大一些来纠正,如下所示:

    请问相同的参数导致这两个现象原因可能是什么?(941和sn65dsi83在解析上有些差别?)谢谢!

  • 已转达给工程师,有答复尽快给到您。

  • 请问相同的参数导致这两个现象原因可能是什么?(941和sn65dsi83在解析上有些差别?)

    这两种器件是不同的,其配置也不同。 

    预期 HBP 为40。 请问修改后的 HBP 是多少? 

  • 是的,sn65dsi83上使用的HBP值为40,941上修改后的HBP是92才能显示在正确位置

  • 您好,

    根据您分享的图片,在 HFP 期间可能会发生 LP-11转换。 预期的消隐参数为 HFP = 40、HBP = 40、HSW = 48。 不过仍可能有一些 HFP(但不符合预期的40像素或者有足够的像素)满足显示的消隐要求。 因此,通过向 HBP 添加缺失的消隐可以补偿显示器所需的总消隐。 

  • 好的,谢谢