Part Number:DS90UB941AS-Q1Other 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?还需要其他设置吗?
谢谢!
Kailyn Chen:
您好,关于内部pattern生成图形的配置,建议您可以参考这篇Exploring the Int Test Pattern Generation Feature of FPDLink III IVI Devices应用手册,其中第四章节给出了配置示例,可以参考下:
https://www.ti.com/lit/an/snla132g/snla132g.pdf
有任何问题,我们再讨论。
,
r m:
我将PGCFG register 0x65[3] 设为 1,使用内部时序,dsi时钟,使能图形生成器能正常输出图像,
然后将PGCFG register 0x65[2] 设为 0,使用dsi时序,dsi时钟,使能图形生成器此时屏幕没有任何显示。
此时按照手册中去建议排查寄存器DSI_VC_DTYPE (addr = 0x2a),value = 0x3e
不知道是哪里有问题,可以给一些建议吗?谢谢
,
Kailyn Chen:
0x65[2] 设为 0,那么SER端有接外部视频原来提供控制信号(HS,VS,DE)吗?
下面是pattern的几种配置,比如第一种就是外部提供PCLK, 外部提供控制信号的例子。
,
r m:
是的,有连接,我们连接了SoC 的DSI,并且DSI源配置为视频模式,突发模式,连续时钟模式
,
Kailyn Chen:
您好,可以将您使用外部timing配置的寄存器附上,我这边看下。
,
r m:
外部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=1UB941AS_ADDR=0x12UB928_ADDR=0x2c
# Disable DSIi2cset -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 throughi2cset -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 0x03i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x06
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x07i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x20
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x08i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x03
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x09i2cset -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 0x04i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0xA0
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x05i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0xD3
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x06i2cset -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 1111i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0Ci2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x28
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0Di2cset -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 0001i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0Ai2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x30
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0Bi2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x01
# 5. Set Sync Polaritiesi2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x66 0x0Ei2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x67 0x03
# 6. Enable Pattern Generation# reverse colori2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x65 0x02
# set color and enable Pattern Generatori2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x64 0xd1
,
Kailyn Chen:
你好,我看了下您的寄存器,前面分辨率都配置的没问题,
最后设置color的时候,0x64=0xD1,bit7:4=1101, 1101: Vertically Scaled Black to Blue/White to Yellow
我理解的这个是个color bar彩条,所以bit2我认为应该enable color bar。
我看您配置的是0XD1,建议配置为0xD5验证下。
,
r m:
您好,因为我们使用外部clcok和內部timing时,0x64也是设置的0xD1,能够正常显示。
然后彩条这个配置我在dsi clcok和內部timing刚也去试过了,配置bit2不影响最终是否有显示,只是显示条状的颜色柱或者是渐变颜色。
但在外部dsi timing,外部dsi clock时仍然没有显示。
感觉是dsi源有问题,但不知道问题在哪,或者有什么办法能确认dsi的哪里不满足要求?
,
Kailyn Chen:
是的,我认为也是DSI 源的时序不匹配,我看了下数据手册的寄存器,并没有发现能状态寄存器能说明DSI源有问题的。
在video timing mode中,有下面的介绍:如果 VS 上不存在垂直同步信号、则图形发生器会检测非活动像素时钟的数量(DE = 0)何时超过检测到的活动行长度的两倍来确定垂直消隐. 所以您确认下是不是这里的问题:
,
r m:
好的,我们先去检查一下看看。
另外有个问题不知道方便帮我们确认一下吗:
我们前一阵子调试过sn65dsi83芯片,sn65dsi83在linux内核中有现成的驱动程序,已经调通点亮屏幕。
由于941没有驱动,所以我们是修改sn65dsi83的驱动使得SoC输出了同样的dsi(dsi源为视频模式,突发模式,连续时钟模式)给到941使用。
也就是将sn65dsi83的dsi输入给到941使用,理论上是不是应该能直接使用而不需要额外修改dsi源?
,
Kailyn Chen:
您好,一般是视频源直接给941使用,修改的话是修改了哪些部分呢,另外,那DSI83的DSI输入是什么数据格式?是不是941的没有配置成对应的数据格式?
,
r m:
基本上修改的只是寄存器配置,dsi源保持和dsi83使用的是一致的,没有去改动。
dsi 输入配置如下:
dsi lane =4
dsi format = RGB888
dsi mode = video mode,burst mode (默认是连续时钟模式,因为只有一个非连续时钟的标志位,所以不需要配)
上面之前回复的寄存器配置中,941我们也是按照dsi的格式去配的。
另外,以下是内核中dsi模式可配置的选项:
,
Kailyn Chen:
您好,关于您的这个问题,我再确认下,尽快给您答复。
,
r m:
您好,我们在941的驱动修改了一些内容,寄存器配置也修改了一些,使用dsi已经能够成功点亮屏幕了,谢谢!
,
Kailyn Chen:
非常感谢您的反馈,后续有其他问题,再讨论。