具有STM32F4的DSI到LVDS桥的PLL不起作用

时间:2017-06-08 08:01:29

标签: configuration display stm32f4

我正在尝试使用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. 我通过在地址0x0D发送0x00来禁用PLL,我等待3ms;
  2. 我在地址0x0A发送字节0x01(LVDS像素时钟的时钟源来自MIPI D-PHY通道,LVDS像素时钟在[25 MHz; 37.5 MHz]范围内);
  3. 我在地址0x0B发送字节0x08(将DSI时钟除以2);
  4. 我通过在地址0x0D发送0x01来启用PLL;
  5. 我通过在地址0x09发送0x01来重置网桥,因为根据该寄存器的描述(第23页):
  6.   

    设置为' 1'此位会自动清除。并在读取时返回零。在CSR更新后必须设置此位...

    1. 我正在等待通过读取并等待位7设置在0x0A地址来启用PLL。但这一点从未设定过。
    2. 我应该等3ms
    3.   

      注意:在PLL_EN_STAT = 1之后,等待至少3ms以使PLL锁定。

      但我从未达到这一点,因为我在前一点6的循环中。如果我不检查0x0A地址的第7位并绕过第6点,它似乎不会因为我没有通过LVDS连接器看到LVDS时钟上的时钟。

      我检查了我的寄存器的值(通过读取它们)并且它们的值是正确的。

      由于它似乎无法工作,并且根据位于地址0x0D(第24页)的PLL_EN寄存器的描述:

        

      [...]。在使能PLL之前,输入时钟源必须有效且稳定

      我认为这个问题可能来自DSI方面(STM32F4方面),但这是我在之前上面解释的步骤。

      1. 启用DSI主机外设(通过STM32CubeMx进行配置);
      2. 我启用了LTDC外设(通过STM32CubeMx进行配置);
      3. 启动DSI模块。
      4. 我检查过这些初始化期间没有发生错误,一切似乎都没问题。我无法直观地检查DSI时钟,因为我无法物理访问DSI时钟PIN,因为我无法判断DSI时钟是否确实正常工作。但是,告诉我,如果我错了,为了确保它正常工作,我检查了DSI主机PHY控制寄存器(DSI-> PCTLR)以确保CKE位被使能({3的第616页) }})。它就是。

        无论如何,我现在还不知道自己能做些什么。 SN65DSI84似乎没有启用(或锁定),我不知道为什么。对我来说,这个问题可能来自各方面: - 错误的DSI初始化(stm32端); - 桥的配置错误(sn65dsi84侧); - 其他?

        提前感谢您的帮助!

        注意:我还没有提供程序代码,因为有很多东西要复制,所以不要让这个帖子太混乱。无论如何,请不要犹豫,问我想看的部分,我会提供。

1 个答案:

答案 0 :(得分:1)

经过一段时间(以及德州仪器的一些帮助),我部分地解决了我的问题。我错误地设置了CHA_DSI_CLK_RANGE寄存器(0x12地址)。我使用" lane_byte_clock " DSI主机的值而不是DSI" DDR时钟"导致PLL永不锁定的值(DSI时钟值,LVDS像素时钟值和DSI时钟分频器之间不匹配)。

对于对此感兴趣的人,请参阅ST应用笔记4860的第75页有关DSI主机的信息,我建议那些试图驱动此组件使用德州仪器的DSI Tuner tool的人。

现在我显示了图案图片但是我的屏幕不稳定(闪光灯,怪异的工件....当然因为时间参数设置不正确,我猜)。

谢谢!

相关问题