2. STM32MP显示硬件通路解析
在STM32MP系列(如STM32MP157)中,显示子系统并不是单一控制器,而是一条由多个硬件模块级联而成的通路。理解这条通路的连接关系与时钟来源,是后续调试显示异常、计算像素时钟、配置消隐区参数的基础。本节以STM32MP157为例,梳理从帧缓冲到屏幕的完整硬件链路,并给出用示波器测量RGB时序的实操方法。
一、显示通路的硬件拓扑
STM32MP157的显示输出有两条主要路径。第一条是RGB并行路径:LTDC(LCD-TFT Display Controller)直接输出RGB数据、像素时钟(LCD_CLK)、行同步(HSYNC)、场同步(VSYNC)和数据使能(DE),经引脚复用后送到RGB接口屏或HDMI转换芯片。第二条是MIPI DSI路径:LTDC的输出先送入DSI主机控制器(DSI Host),由DSI打包成MIPI DSI数据流,再经D-PHY物理层以差分信号输出到MIPI DSI屏。
两条路径共享同一个LTDC,区别在于后级。当使用HDMI显示器时,常见做法是LTDC输出RGB到HDMI转换芯片(如SiI9022、LT8618等),由转换芯片完成RGB到TMDS的编码。因此,LTDC是整个显示通路的“像素源”,其输出时序决定了整条链路的时序基准。
二、时钟树与像素时钟计算
LTDC的像素时钟来自PLL4。在STM32MP157中,PLL4通常专用于显示,其输出经分频后得到LCD_CLK。像素时钟频率必须与屏幕时序匹配,计算公式为:
像素时钟 = (H_total × V_total × 刷新率)
其中:
H_total = H_active + HBP + HFP + HSYNC_width
V_total = V_active + VBP + VFP + VSYNC_width
以常见的1024×600@60Hz RGB屏为例,典型时序参数为:H_active=1024,HBP=160,HFP=160,HSYNC=10,则H_total=1354;V_active=600,VBP=23,VFP=12,VSYNC=2,则V_total=637。像素时钟 = 1354 × 637 × 60 ≈ 51.7 MHz。实际配置时,PLL4需输出接近该值的频率,再通过LTDC的分频器微调。
对于DSI路径,像素时钟与DSI高速时钟之间存在固定关系。DSI的位时钟(bit clock)等于像素时钟乘以每像素位数再除以Lane数。例如RGB888、2 Lane时,DSI bit clock = 像素时钟 × 24 / 2 = 像素时钟 × 12。D-PHY的时钟Lane频率则为bit clock的一半。这些关系决定了DSI PHY的PLL配置。
三、行场同步与消隐区参数
RGB接口的时序由五个关键参数描述:HSYNC(行同步脉冲)、HBP(行后沿)、HFP(行前沿)、VSYNC(场同步脉冲)、VBP(场后沿)、VFP(场前沿)。LTDC内部通过LTDC_SSCR、LTDC_BPCR、LTDC_AWCR、LTDC_TWCR等寄存器配置这些值。需要特别注意:LTDC的寄存器值通常以“有效像素数+消隐数”的形式给出,而不是直接写消隐长度,配置时需做换算。
消隐区的作用是给显示屏留出电子束回扫或数据准备时间。如果消隐区过小,屏幕可能出现边缘撕裂、闪烁或无法锁定;如果过大,则像素时钟被迫升高,可能超出D-PHY或HDMI转换芯片的带宽。因此,消隐区参数应严格参照屏幕数据手册,而不是随意取整。
四、用示波器测量RGB接口时序
测量RGB时序需要至少4通道示波器或逻辑分析仪。推荐探头连接点:LCD_CLK(像素时钟)、HSYNC、VSYNC、DE,以及任意一位RGB数据线(如R0)。测量步骤如下:
- 触发设置:以VSYNC下降沿为触发条件,时基设为约2ms/div,观察一帧的完整结构。
- 测量场周期:读取两个VSYNC下降沿之间的时间,其倒数即为刷新率。若测得16.6ms,则刷新率约60Hz。
- 测量行周期:将时基缩小到约10μs/div,以HSYNC为触发,测量两个HSYNC下降沿之间的时间,得到H_total对应的时间。用H_total除以该时间可反推像素时钟。
- 测量消隐区:在HSYNC触发下,测量HSYNC脉冲宽度、HSYNC结束到DE有效之间的时间(即HBP),以及DE结束到下一个HSYNC之间的时间(即HFP)。
- 验证像素时钟:用频率计或示波器直接测量LCD_CLK频率,与计算值对比。若偏差超过1%,需检查PLL4配置。
一个常见的判断依据是:DE有效期间,RGB数据线应有稳定的像素数据变化;DE无效期间,数据线应保持低电平或固定电平。如果DE有效期间数据线无变化,说明LTDC没有正确读取帧缓冲,需检查DMA和图层配置。
五、HDMI转换芯片的额外考量
当LTDC经HDMI转换芯片输出时,转换芯片会重新生成TMDS时钟。此时LTDC的像素时钟与HDMI TMDS时钟之间存在倍频关系:TMDS时钟 = 像素时钟(对于8bit RGB,TMDS时钟等于像素时钟)。但转换芯片内部可能有自己的PLL,需要确保其输入像素时钟在芯片允许范围内。例如SiI9022要求输入像素时钟在25MHz~165MHz之间。如果LTDC输出的像素时钟低于25MHz(如小分辨率屏),转换芯片可能无法锁定,此时需要在LTDC端提高像素时钟或改用其他转换方案。
此外,HDMI转换芯片通常需要I2C配置,包括输入时序参数、输出色彩空间、音频配置等。这些配置与LTDC的时序参数必须一致,否则会出现画面偏移或颜色异常。调试时建议先用LTDC直接驱动RGB屏验证时序正确,再接入HDMI转换芯片,以隔离问题来源。
六、关键参数速查表
| 参数 | 含义 | 典型值(1024×600@60Hz) | LTDC寄存器 |
|---|---|---|---|
| HSYNC | 行同步脉冲宽度 | 10 | LTDC_SSCR |
| HBP | 行后沿 | 160 | LTDC_BPCR |
| HFP | 行前沿 | 160 | LTDC_AWCR |
| VSYNC | 场同步脉冲宽度 | 2 | LTDC_SSCR |
| VBP | 场后沿 | 23 | LTDC_BPCR |
| VFP | 场前沿 | 12 | LTDC_AWCR |
| 像素时钟 | LCD_CLK频率 | ≈51.7 MHz | PLL4 + LTDC分频 |