我正在尝试使用STM32F469微控制器驱动SN65DSI84 Bridge MIPI-to-LVDS。基本上,我的STM32提供DSI数据,SN65DSI84将其转换为LVDS格式。
今天,我设法通过I2C与我的SN65DSI84进行通信以配置其寄存器,但 我没有成功使其锁定PLL。
为了便于您理解,SN65DSI84需要一个LVDS输出时钟(LVDS像素时钟)。您可以在数据表的第14页上阅读此时钟,该时钟可能来自外部源或直接来自DSI通道。我通过设置CSR 0x0A寄存器的位0来使用最后一个选项。问题是当我通过0x0D寄存器启用PLL时,0x0A寄存器中的那个应该告诉我PLL确实启用的位不会被设置。
好的,首先我首先关心的是锁定PLL。如果我理解数据表,那么实现这一点并不需要配置桥接器的所有寄存器,只需要配置位于地址0x09,0x0A,0x0B和0x0D的寄存器。
在我的程序中,我创建了一个函数,允许我配置位于地址0x0A,0x0B和0x0D的寄存器。简而言之,这是算法:
设置为' 1'此位会自动清除。并在读取时返回零。在CSR更新后必须设置此位...
注意:在PLL_EN_STAT = 1之后,等待至少3ms以使PLL锁定。
但我从未达到这一点,因为我在前一点6的循环中。如果我不检查0x0A地址的第7位并绕过第6点,它似乎不会因为我没有通过LVDS连接器看到LVDS时钟上的时钟。
我检查了我的寄存器的值(通过读取它们)并且它们的值是正确的。
由于它似乎无法工作,并且根据位于地址0x0D(第24页)的PLL_EN寄存器的描述:
[...]。在使能PLL之前,输入时钟源必须有效且稳定
我认为这个问题可能来自DSI方面(STM32F4方面),但这是我在之前上面解释的步骤。
我检查过这些初始化期间没有发生错误,一切似乎都没问题。我无法直观地检查DSI时钟,因为我无法物理访问DSI时钟PIN,因为我无法判断DSI时钟是否确实正常工作。但是,告诉我,如果我错了,为了确保它正常工作,我检查了DSI主机PHY控制寄存器(DSI-> PCTLR)以确保CKE位被使能({3的第616页) }})。它就是。
无论如何,我现在还不知道自己能做些什么。 SN65DSI84似乎没有启用(或锁定),我不知道为什么。对我来说,这个问题可能来自各方面: - 错误的DSI初始化(stm32端); - 桥的配置错误(sn65dsi84侧); - 其他?
提前感谢您的帮助!
注意:我还没有提供程序代码,因为有很多东西要复制,所以不要让这个帖子太混乱。无论如何,请不要犹豫,问我想看的部分,我会提供。
答案 0 :(得分:1)
经过一段时间(以及德州仪器的一些帮助),我部分地解决了我的问题。我错误地设置了CHA_DSI_CLK_RANGE
寄存器(0x12
地址)。我使用" lane_byte_clock " DSI主机的值而不是DSI" DDR时钟"导致PLL永不锁定的值(DSI时钟值,LVDS像素时钟值和DSI时钟分频器之间不匹配)。
对于对此感兴趣的人,请参阅ST应用笔记4860的第75页有关DSI主机的信息,我建议那些试图驱动此组件使用德州仪器的DSI Tuner tool的人。
现在我显示了图案图片但是我的屏幕不稳定(闪光灯,怪异的工件....当然因为时间参数设置不正确,我猜)。
谢谢!