查看: 1359|回复: 0

[分享] 关于开发板 i.MX 8QuadMax 和 i.MX 8QuadXPlus 显示模 块扩频技术...

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3299

    主题

    6546

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32024
    最后登录
    2024-4-25
    发表于 2020-4-29 16:39:50 | 显示全部楼层 |阅读模式
    关于开发板 i.MX 8QuadMax 和 i.MX 8QuadXPlus 显示模块扩频技术的使用指南

    1.介绍
    本文介绍了开发板 i.MX 8QuadMax 和 i.MX 8QuadXPlus 专门用于 LVDS 和 MIPI DSI 显示模块的扩频技术的使用。文章介绍了它们的基础硬件功能,如何启用它以及预期的功能。
    i.MX 8QuadMax 和 i.MX 8QuadXPlus 上的显示控制器(DC)子系统利用 AVPLL 生成参考时钟,参考时钟可用于 LVDS PHYs 操作。与此同时,参考时钟上的扩展频谱也能让 PHY 接口被扩展。此扩频功能由 SCU 固件控制,可以通过配置 SCU 固件移植工具包的 board 文件来
    启用或停止。
    Note:嵌入 PHYs 中的 PLLs(i.MX 8QuadMax 上的 LVDS;i.MX 8QuadXPlus 上的 MIPI-DSI/LVDS combo PHY)可以按照 AVPLL 参考生成的时钟频率来使用扩频功能。尽管这些接口可以实现扩频功能,用户还是必须确认调制是否适当并且能与他们的应用兼容。


    2.频率调制的配置
    Note:这节介绍 SCU 固件的功能。用户无法访问相关代码。启用并配置后,输出调制将以三角频率波的形式随时间扩展。这是通过将参考时钟扩展到PHY 并让 PHY 对其进行跟踪来实现的。PHY 的参考时钟是在 AVPLL 中生成和配置的,其参数定义如下。
    在时钟方面,可以通过更改一个(或多个)AVPLL 以随时改变频率,最终实现变化。变化量限制为 2%,因此不会导致 VCO 重新锁定或任何下游功能。
    1.png
    频率描述如下:
    F(t) 目标频率-在 LVDS 像素率的情况下,该功能的预期频率或标称频率
    F(s) 扩展频率-高于和低于 F(t)值的频率变化
    F(n) 标称频率-时钟可以达到的最大频率
    标称频率由称为 F(int)的整数(即参考频率 24Mhz 的整数倍)加上作为参考频率的一部
    分的小数部分 F(frac)组成。
    因此
                      F(n) = F(t) + F(s)
                      F(n) = F(int) + F(frac) = 24Mhz*(DIV_SELECT + NUM/DENOM)
    F(s)
                      F(s) = F(t)/100
                      F(s) = (24Mhz*(MAX_VAR/DENOM))/2
    注意,在任何时间点,实际产生的频率 F(act)始终低于 F(n),最大下降幅度为 2F(s)。
                       F(actual) = F(n) – 24Mhz*(ACCUM/DENOM)


    公式中的变量描述如下:
    DIV_SELECT –VCO 频率计算的整数部分
    NUM –VCO 频率小数部分的分子,取决于目标频率的分数
    DENOM –VCO 频率小数部分的分母,对于所有非扩频 PLL 这个值固定为 960000,但这是扩频的变量
    ACCUM –通过反复将 STEP 加到累加值直到达到 STOP 为止的可变偏移量
    MAX_VAR –增量方向改变之前可以累积的最大值
    FMODULATION (KHz) – 三角调制随时间重复的速率。通常将其设置得尽可能低且不在传统音频范围内,例如 30KHz。


    用 STEP 和 STOP 值可以计算 ACCUM,如下所示:
    DIRECTION = COUNTUP
    ACCUM=0
    LOOP:
    IF ACCUM = 0 THEN
             DIRECTION = COUNTUP
             ACCUM = ACCUM + STEP
    ELSE IF ACCUM > STOP THEN
             DIRECTION = COUNTDOWN
             ACCUM = ACCUM – STEP
    ELSE IF DIRECTION = COUNTDOWN THEN
             ACCUM = ACCUM - STEP
    ELSE IF DIRECITON = COUNTUP THEN
             ACCUM = ACCUM + STEP
    ELSE
             error case
    FI
    GOTO LOOP
    STEP –用于改变频率的增量/减量,步长的大小用于设置调制频率(即频率的变化率)。
    STEP 与调制频率,参考时钟和 STOP 之间的关系:
                                   STEP = FMODULATION / 24MHz * 2 * STOP
    STOP–增量/减量的极限,达到极限时更改为减量/增量。
    选择 STOP 值以防止翻转是很重要的。 STOP 的最大值为 0xFFFF(因为寄存器字段为 16位)。 如果我们将 STOP 固定在 64000,FModulation 为 30KHz,那么 STEP 值可以这么计算:
    STEP = 30K/24M * 2 * 64000 = 160
    2.png
    3.SCFW 移植套件指南
    从 SCFW 移植套件 V1.2.2 版本开始,添加了扩频功能,可以从 NXP 网站“i.MX Softwareand Development Tool”下载。 注意,SCFW 移植套件与 Linux BSP 发行版结合在一起作为完整套件进行了测试。
    扩频功能通过 board.c 文件(SCU 固件中的自定义文件)中的功能 board_parameter(board_parm_t parm)进行控制。 以 iMX 8QuadXPlus MEK 为例,文件路径为“ imx-scfw-porting kitx.x \ src \ scfw_export_mx8qx_b0 \ platform \ board \mx8qx_mek \board.c”。


    当相关的 LVDS 显示器启用了 AVPLL 时,将检查 board 参数。


    “ parm”值(前两个值可用于 i.MX 8QuadXPlus,四个值可用于 i.MX 8QuadMax)可以是:
    • BOARD_PARM_DC0_PLL0_SSC - DC0 PLL0 Spread Spectrum enable
    • BOARD_PARM_DC0_PLL1_SSC - DC0 PLL1 Spread Spectrum enable
    • BOARD_PARM_DC1_PLL0_SSC - DC1 PLL0 Spread Spectrum enable
    • BOARD_PARM_DC1_PLL1_SSC - DC1 PLL1 Spread Spectrum enable


    返回值设置:
    • BOARD_PARM_RTN_NOT_USED 若不被启用
    • BOARD_PARM_RTN_USED 若被启用


    设置控制着每个显示通道的功能,除了像素时钟频率(用于设置 AVPLL 的 PLL_TARGET值)外,它是必要的配置。如果返回值设置为“ BOARD_PARM_RTN_USED”,则启用调制。


    4.调制特性
    调制的目的是以 30Khz 的调制率使变化等于目标频率的 1%以上和 1%以下。这可以在所有频率点上实现。这样做的目的是在启用或不启用扩频的情况下保持平均频率不变,但是可以因为四舍五入而产生微小差异(通常远小于 200ppm)。


    5.启用示例
    这节以启用 i.MX 8QuadXPlus LVDS 扩频为例,在 SCU 固件 board.c 中的代码修改如下:
    diff --git a/firmware/platform/board/mx8qx_mek/board.c
    b/firmware/platform/board/mx8qx_mek/board.c index d729444..a009751 100755
    --- a/firmware/platform/board/mx8qx_mek/board.c
    +++ b/firmware/platform/board/mx8qx_mek/board.c
    @@ -420,6 +420,12 @@ board_parm_rtn_t board_parameter(board_parm_t parm)


    case BOARD_PARM_KS1_ONOFF_WAKE:
    rtn = BOARD_KS1_ONOFF_WAKE;
    break;
    + case BOARD_PARM_DC0_PLL0_SSC:
    + rtn = BOARD_PARM_RTN_USED;
    + break; + case BOARD_PARM_DC0_PLL1_SSC:;
    + rtn = BOARD_PARM_RTN_USED;
    + break;
    default:
    ; /* Intentional empty default */
    break;


    启用扩频功能之前/之后的测试结果如下:

    启用扩频功能之前(幅度为 2.106dBm)


    未完>>>
    点击查看完整版

    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 06:10 , Processed in 0.113476 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表