Part Number:DS90UB941AS-Q1
您好,我首先使用内部图案生成器来测试主器件和从器件之间的硬件连接是否正常,按照“探索 FPD-Link III IVI 器件的内部测试图形生成特性”该文档的操作后,似乎屏幕上没有任何图形显示,可以帮我看一下寄存器配置和流程是否正确或完整吗?
连接简图如下所示,目前先调试LCD显示功能:
启动板子后,使用i2c-tools可以看到941器件地址为0x12
I2C_BUS_NUMBER=1
941_ADDR=0x12
读取 DES_ID_DES_ID_1 寄存器0x06,值为0x76,右移一位得到928解串器ID为0x3B
然后执行以下图形生成器的寄存器的配置的脚本“941as_800x480p_PATGEN.sh”,使用内部timing和内部pclk:
#!/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
# Internal clock and Internal
# use i2c-tools to debug
set -e
I2C_BUS_NUMBER=1
UB941AS_ADDR=0x12
# Reset
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x01 0x02
# sleep 0.1s
sleep .1
# 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
# 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 0x00
# 6. Enable Pattern Generation
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x65 0x03
i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x64 0x11
Cherry Zhou:
您好,您的问题我们需要升级到英文论坛寻求帮助,如有答复将尽快回复您。
,
Cherry Zhou:
您好,
r m said:i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x65 0x03i2cset -y -f -r $I2C_BUS_NUMBER $UB941AS_ADDR 0x64 0x11
以上命令将 patgen 设置为首先显示黑色图形。 还设置了时序选择来从外部视频获取时序。 请设置0x65[2]=1,可以使图形发生器能够根据您已编程的时序创建其自己的视频。
,
r m:
好的谢谢,我修改后再试试看,结果会及时告知,如果还有问题,会继续跟帖咨询。另外,当941使能图形发生器后,有没有什么办法比如读取哪些寄存器值等等,能够获得反馈知道928是否正常生成了测试视频?
,
Cherry Zhou:
r m said:好的谢谢,我修改后再试试看,结果会及时告知,如果还有问题,会继续跟帖咨询。
好的。
r m said:另外,当941使能图形发生器后,有没有什么办法比如读取哪些寄存器值等等,能够获得反馈知道928是否正常生成了测试视频?
抱歉,没有办法可以检查928的时序。
,
r m:
设置0x65[2]=1,并且将图形设置成“红色/青色”以方便观察,但时屏幕上仍然没有测试图形,可能我们需要先排查一下硬件是否有问题。
然后有几个问题想要确认:问题1.前面提到 读取 DES_ID_DES_ID_1 寄存器0x06 能够读到解串器的id,这个就可以说明主从器件之间的连接是正常的是吧?
问题2. 如果想要通过i2c访问挂在从器件后的触摸ic等,需要哪些设置?比如触摸ic地址为0x41,看到手册中提到要设置i2c的模式,还有设置slave id等,但不是很明白,方便以给个示例参考吗?
问题3. 从器件连接正常后主器件会自动识别,如果需要通过i2c直接访问从器件,那么和问题2中访问挂在从器件后的触摸是同样的操作方法吗?
谢谢!
,
Cherry Zhou:
我们向工程师确认后给您答复。
,
Cherry Zhou:
您好,
r m said:前面提到 读取 DES_ID_DES_ID_1 寄存器0x06 能够读到解串器的id,这个就可以说明主从器件之间的连接是正常的是吧?
该寄存器代表在某个时刻存在链路。 最好查看941AS 的寄存器0xC 的位0进行链路检测,或查看928的寄存器0x1C 来确定是否存在锁定。
r m said:问题2. 如果想要通过i2c访问挂在从器件后的触摸ic等,需要哪些设置?比如触摸ic地址为0x41,看到手册中提到要设置i2c的模式,还有设置slave id等,但不是很明白,方便以给个示例参考吗?
如果与触控器件的通信是 I2C,那么您可能需要设置别名,可以使用 SlaveID 和 SlaveAlias 寄存器在941AS 上设置它。 还需要通过寄存器启用 I2C 直通。
,
r m:
好的,谢谢解答。
941地址 0x12
现在我上电后不做其他配置,只配置寄存器0x3的值为0x28,以打开i2c直通模式从而能访问从器件的寄存器。
i2c设为直通后,利用i2cdetect能够看到从器件928的地址为0x2c
然后按您给的先查看941AS 的寄存器0xC和928的寄存器0x1C,得到以下值
941寄存器0xC值为0x03
928寄存器0x1C值为0x03
可以看到941寄存器0xC bit0 = 1,bit1 = 1,根据手册上表明检测到电缆链路但与解串器通信期间发生 CRC 错误。上电后在没有其他操作和配置的情况下,这个bit1 = 1的错误可能会是哪方面的问题?bit1=1会导致设置了上述的使能了图形生成器但屏幕没有显示吗?
,
Cherry Zhou:
我们确认后给到您答复。
,
Cherry Zhou:
您好,
CRC 错误可能与硬件有关,也有可能是启动后残留的 CRC。 请问您是使用自制 PCB 还是 EVM?
此外您能否检查928上的映射,并确保显示屏能够接收所选的颜色映射?
928数据表中还有显示不同颜色方案的表格。
,
r m:
用的自制PCB,按照您说的去检查了MAPSEL引脚,我们之前确实悬空了没接,然后看了LCD的手册,我们屏幕的颜色映射需要设置为MAPSEL = 1。然后我们再去测试排查问题,有问题再反馈,谢谢提供支持。
,
Cherry Zhou:
好的,不客气。
,
r m:
mapsel设置后,执行寄存器配置后屏幕能够看到我图形生成器设置的图案了,谢谢。
然后还有一个疑惑的地方,我们用的是941搭配928,看到图形生成器的手册这里的提到了如果用了928,则需要配置0x39以启动图形生成器内部时钟
然后我试了一下,这个寄存器配置或者不配置,我都能正常看到图案.
所以这里的图形发生器内部时钟,是指哪个内部时钟?
看下来感觉是941可以生成内部时钟传给928再传给LCD,或者928也能生成自己的内部时钟直接传给LCD?不知道我的理解对不对。
,
Cherry Zhou:
我们向工程师确认后给到您答复。
,
Cherry Zhou:
如果您使用内部 CLK 图形发生器,那么将会使用同一器件的内部振荡器。 因此如果您要在928上生成图形,它将使用它自己的内部时钟。