关于开发板 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 重新锁定或任何下游功能。
频率描述如下:
• 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 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)
未完>>>
点击查看完整版
|