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: 图形生成器使用外部时钟和外部时序的配置

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

您好,前两天我们使用内部时钟和内部时序的图形生成器点亮了屏幕,应用简图如下:

然后按照启动指南手册里的:

1 下一步需要使用DSI 时钟和内部时序来使能图形生成器。

2 如果ok,那么再下一步需要使用DSI 时钟和DSI timing来使能图形生成器

我们将MIPI DSI源配置为视频模式,突发模式,连续时钟模式

-------------------------------------------------------------------------------------------

对于寄存器的配置有些不确定的地方:

1. 使用DSI 时钟和内部时序这一步相对于内部时钟、内部时序图形生成器的寄存器配置,是不是仅需要将寄存器0x65的bit3 设为1就行了?还需要其他设置吗?

2. 再下一步使用DSI 时钟和DSI timing是不是也仅需要将寄存器0x65的bit2 设为0?还需要其他设置吗?

谢谢!

  • 您好,关于内部pattern生成图形的配置,建议您可以参考这篇Exploring the Int Test Pattern Generation Feature of FPDLink III IVI Devices应用手册,其中第四章节给出了配置示例,可以参考下:

    https://www.ti.com/lit/an/snla132g/snla132g.pdf

    有任何问题,我们再讨论。

  • 我将PGCFG register 0x65[3] 设为 1,使用内部时序,dsi时钟,使能图形生成器能正常输出图像,

    然后将PGCFG register 0x65[2] 设为 0,使用dsi时序,dsi时钟,使能图形生成器此时屏幕没有任何显示。

    此时按照手册中去建议排查寄存器DSI_VC_DTYPE (addr = 0x2a),value = 0x3e 

    不知道是哪里有问题,可以给一些建议吗?谢谢

  • 0x65[2] 设为 0,那么SER端有接外部视频原来提供控制信号(HS,VS,DE)吗?

    下面是pattern的几种配置,比如第一种就是外部提供PCLK, 外部提供控制信号的例子。

  • 是的,有连接,我们连接了SoC 的DSI,并且DSI源配置为视频模式,突发模式,连续时钟模式

  • 您好,可以将您使用外部timing配置的寄存器附上,我这边看下。

  • 外部timing,外部clock的配置如下

    #!/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
    # Pattern Generator Mode
    # external clock and external timing
    # 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 (default port0)
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x1E 0x01

    # i2c pass through
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x03 0xba

    # 1. Set Pixel Clock and Active Frame Size
    # pixe clock = 33.264MHz divider = 200/33.264 ≈ 6
    # hactive = 800 vactive = 480
    #

    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x03
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x06

    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x07
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x20

    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x08
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x03

    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x09
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x1E

    # 2. Set Total Frame Size
    # Total H Width = 40(hback porch) + 800(hactive) + 40(hfront porch) + 48(hsync len)
    # = 928 = 0011 1010 0000
    # Total V Width = 31(vback porch) + 480(vactive) + 13(vfront porch) + 1(vsync len)
    # = 525 = 0010 0000 1101
    #
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x04
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0xA0

    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x05
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0xD3

    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x06
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x20

    # 3. Set Back Porch
    # H Back Porch = 40 = 0010 1000
    # V Back Porch = 31 = 0001 1111
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0C
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x28

    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0D
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x1F

    # 4. Set Sync Widths
    # H Sync Width = 48 = 0011 0000
    # V Sync Width = 1 = 0000 0001
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0A
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x30

    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0B
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x01

    # 5. Set Sync Polarities
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0E
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x03

    # 6. Enable Pattern Generation
    # reverse color
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x65 0x02

    # set color and enable Pattern Generator
    i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x64 0xd1

  • 你好,我看了下您的寄存器,前面分辨率都配置的没问题,

    最后设置color的时候,0x64=0xD1,bit7:4=1101, 1101: Vertically Scaled Black to Blue/White to Yellow

    我理解的这个是个color bar彩条,所以bit2我认为应该enable color bar。

    我看您配置的是0XD1,建议配置为0xD5验证下。

  • 您好,因为我们使用外部clcok和內部timing时,0x64也是设置的0xD1,能够正常显示。

    然后彩条这个配置我在dsi clcok和內部timing刚也去试过了,配置bit2不影响最终是否有显示,只是显示条状的颜色柱或者是渐变颜色。

    但在外部dsi timing,外部dsi clock时仍然没有显示。

    感觉是dsi源有问题,但不知道问题在哪,或者有什么办法能确认dsi的哪里不满足要求?

  • 是的,我认为也是DSI 源的时序不匹配,我看了下数据手册的寄存器,并没有发现能状态寄存器能说明DSI源有问题的。

    在video timing mode中,有下面的介绍:如果 VS 上不存在垂直同步信号、则图形发生器会检测非活动像素时钟的数量(DE = 0)何时超过检测到的活动行长度的两倍来确定垂直消隐.  所以您确认下是不是这里的问题:

  • 好的,我们先去检查一下看看。

    另外有个问题不知道方便帮我们确认一下吗:

    我们前一阵子调试过sn65dsi83芯片,sn65dsi83在linux内核中有现成的驱动程序,已经调通点亮屏幕。

    由于941没有驱动,所以我们是修改sn65dsi83的驱动使得SoC输出了同样的dsi(dsi源为视频模式,突发模式,连续时钟模式)给到941使用。

    也就是将sn65dsi83的dsi输入给到941使用,理论上是不是应该能直接使用而不需要额外修改dsi源?

  • 您好,一般是视频源直接给941使用,修改的话是修改了哪些部分呢,另外,那DSI83的DSI输入是什么数据格式?是不是941的没有配置成对应的数据格式?

  • 基本上修改的只是寄存器配置,dsi源保持和dsi83使用的是一致的,没有去改动。

    dsi 输入配置如下:

             

              dsi lane =4

              dsi format = RGB888

              dsi mode = video mode,burst mode (默认是连续时钟模式,因为只有一个非连续时钟的标志位,所以不需要配)

    上面之前回复的寄存器配置中,941我们也是按照dsi的格式去配的。

    另外,以下是内核中dsi模式可配置的选项:

  • 您好,关于您的这个问题,我再确认下,尽快给您答复。

  • 您好,我们在941的驱动修改了一些内容,寄存器配置也修改了一些,使用dsi已经能够成功点亮屏幕了,谢谢!

  • 非常感谢您的反馈,后续有其他问题,再讨论。