MIPI-DSI 显示流程之D-PHY

科技   2024-07-31 08:08   荷兰  
  • 视频流

  • 像素时钟(pixel clock)

  • 显示屏参数解析

  • D-PHY原理

    • 链路基础知识

    • 操作模式

    • I/O信号

    • DDR(Dual Data Rate)传输方式

视频流

所有现代计算机显示器都是光栅显示器,意味着显示的图像是通过从左到右、从显示器顶部到底部逐行逐像素编写而创建的。显示的图像或帧由像素的矩形阵列组成。视频流由一系列以固定时间间隔显示的帧组成。这个时间间隔可以用Frames Per Second(FPS)或Hz来描述。这个过程的根源可以追溯到旧式的阴极射线管显示器。

LCD和OLED显示屏的工作原理源于传统的CRT显示技术,如上所示。它们通过电子束不断扫描屏幕背面来逐帧点亮图像。具体过程如下:

每一帧图像的显示是通过从左到右、从上到下逐行填充像素的方式完成的,直到整个屏幕被完全填充。电子束首先从左到右扫描一行图像并发光,在一行扫描结束后,电子束会关闭并以水平方向返回到屏幕左侧,为下一行图像的扫描做准备。然后电子束会逐行从上到下扫描完整个屏幕,最终完成一帧图像的显示。

在完成一帧图像显示后,显示系统会连续显示多帧画面,以生成连续、完整的视觉效果。

这种逐行扫描的工作机制决定了显示系统需要引入一些同步信号和时序参数来确保电子束的稳定工作,从而获得良好的显示效果。

这里提到的以水平方向返回左侧,及返回第一行的动作不可能在瞬间完成,需要花费一定量的时间完成。所以我们引入以下参数,保证得到稳定的光束从而完成显示:

  • HFP (Horizontal Front Porch,水平前肩) - 水平同步信号的前肩,其代表有效像素数据结束后不显示的像素个数,也是之前提到的关闭和光束回转所需要的时间间隔。
  • H-SYNC (Horizontal Sync,水平同步) - 在每一行开始前发送,光束水平越过屏幕所需的时间。
  • HBP (Horizontal Back Porch,水平后肩) - 水平同步信号的后肩,其代表水平同步信号以后的无效行,确保光束在点亮下一行时是稳定的。在HBP信号后,第一个有效显示像素开始发送。
  • HACTIVE - 水平有效像素。

每帧之间的切换也需要一定量的时间,我们引入以下参数,保证得到稳定的光束从而完成显示:

  • VFP (Vertical Front Porch,垂直前肩)- 垂直同步信号的前肩,其代表本帧数据输出结束到下一帧垂直同步周期开始之前的无效数据行,也是回转光束所需要的时间。在VFP信号之后,下一帧画面开始扫描。
  • V-SYNC (Vertical Sync, 垂直同步)- 在每一帧的显示前首先发送,保证光束从屏幕底部垂直回到顶部所需的时间间隔。
  • VBP(Vertical Back Porch,垂直后肩)- 垂直同步信号的后肩,其代表垂直同步信号以后的无效行。与之前HBP功能相似,为确保光束稳定所需的时间。在VBP信号之后,第一个有效像素行开始发送。
  • VACTIVE - 垂直有效像素。

像素时钟(pixel clock)

时钟必须按顺序保留像素数据和同步信号。这个时钟被称为像素时钟。每个时钟周期传输一个像素。它是大多数图像显示传输系统的主要时钟。在图像传感器的情况下,像素时钟时间周期设置每个像素的ADC转换时间间隔。它是HSYNC和VSYNC信号的根时钟。HSYNC信号表示每行的开始,VSYNC信号表示每个新帧的开始。

ENB 信号用于指示主动像素数据传输。如果没有该信号,各种像素管道可能会将消隐数据误认为具有 0 值的像素数据。

显示屏参数解析

显示屏参数通常需要在客户使用对应屏的driver或DTB中包含。以下以RM67191 MIPI-DSI屏为例进行说明:

#gpu/drm/panel/panel-raydium-rm67191.c
static const struct drm_display_mode default_mode = {
        .clock = 121000,
        .hdisplay = 1080,
        .hsync_start = 1080 + 20,
        .hsync_end = 1080 + 20 + 2,
        .htotal = 1080 + 20 + 2 + 34,
        .vdisplay = 1920,
        .vsync_start = 1920 + 10,
        .vsync_end = 1920 + 10 + 2,
        .vtotal = 1920 + 10 + 2 + 4,
        .width_mm = 68,
        .height_mm = 121,
        .flags = DRM_MODE_FLAG_NHSYNC |
                 DRM_MODE_FLAG_NVSYNC,
};

屏幕的参数有时会分别以单独参数的方式提供。在新版本的BSP中,其需要通过以上hsync_start, hsync_end 及其他参数的方式提供。各参数的具体含义及提供要求可以参考DRM相关driver中的说明:

/**
 * linux-imx/include/uapi/drm/drm_mode.h
 * struct drm_mode_modeinfo - Display mode information
 * @hdisplay: horizontal display size
 * @hsync_start: horizontal sync start
 * @hsync_end: horizontal sync end
 * @htotal: horizontal total size
 * @hskew: horizontal skew
 * @vdisplay: vertical display size
 * @vsync_start: vertical sync start
 * @vsync_end: vertical sync end
 */

从上述RM67191 及 DRM driver中,我们得到RM67191的屏幕相关参数如下:

HFP = 20

H-SYNC = 2

HBP = 34

HACTIVE = 1080

VFP = 10

V-SYNC = 2

VBP = 4

VACTIVE = 1920

在实际将显示屏集成到系统中时,需要遵循以下步骤:

  1. 从屏幕的数据手册(datasheet)和技术规格(spec)中获取上述涉及的各种时序参数,包括水平和垂直方向的消隐间隔、有效像素数量等信息。这些参数是配置屏幕驱动所必需的。

  2. 在显示设备的驱动程序中,需要根据从数据手册获取的时序参数对相关寄存器或变量进行配置和初始化。比如设置HFP、H-SYNC、HBP、HACTIVE等水平方向的参数值。

  3. 同时在设备树(DTB)中,也需要将这些时序参数进行配置和声明,以便操作系统能够正确识别和驱动该显示设备。

完成上述驱动和设备树的配置后,系统就可以正确地初始化和点亮所连接的显示屏幕了。

总的来说,正确获取显示屏的技术参数,并在驱动程序和设备树中进行精确配置,是成功集成显示设备的关键所在。只有这样,系统才能稳定地输出预期的图像效果。

D-PHY原理

从图中可以看出,MIPI-DSI接口的显示流程可以分为两个部分:

  1. D-PHY:这是CSI-2和DSI协议使用的源同步物理层,负责处理物理和电气方面的通信。
  2. Display Serial Interface (DSI):这是处理器和外设之间的接口,它基于MIPI联盟现有的规范建立。

本篇文章将首先介绍D-PHY的工作原理。

链路基础知识

MIPI规范在讨论基于CSI-2或DSI组装系统所需的部件时使用了一组一致的术语。

  • 线路(Line):主处理器的单个引脚与外围设备的某个引脚之间的互连、导线或引线。
  • 通道(Lane):需要两条线路来支持差分信号。 D-PHY使用差分对进行高速数据和时钟传输。这种差分对被称为通道互连( Lane Interconnect),但在技术文档中大多简称为通道。
  • 链路(Link):包含一个时钟通道和至少一个数据通道的两个设备之间的连接。 一个链路至少要包括两个PHY和两个通道的互连。

操作模式

共有四种操作模式:

  • 控制模式( Control)
  • 高速传输模式( High-Speed)
  • 脱离模式( Escape)
  • 超低功耗状态( ULPS)模式。

数据通道支持所有四种模式,但时钟通道仅支持控制模式、高速传输模式和超低功耗状态模式。正常运行时,数据通道处于控制模式或高速传输模式。高速数据传输模式在数据突发时采用,从控制模式的停止状态( LP-11)开始并在控制模式的停止状态( LP-11)结束。通道仅在数据突发时处于高速模式。 下表描述了时钟和数据通道可以进入的六种物理状态。

在正常操作中,数据通道会在低功耗控制模式和高速数据传输模式之间不断切换。

I/O信号

D-PHY IO引脚有两种不同的电气操作模式:单端模式和差分模式。

  • 单端模式称为低功耗( LP)模式,用于脱离模式和控制模式,在主处理器和外围设备之间进行系统配置/控制。在LP模式下,IO电路使用传统的CMOS输出缓冲器(带斜率控制), 其在接地和VDD_IO之间切换。在LP模式下,组成通道的两个IO电路可以独立切换。它们提供四种不同的通道状态: LP-00、 LP-01、 LP-10和LP-11。
  • 差分模式被称为高速( HS)模式,仅用于数据传输。差分模式只有HS-0和HS-1两种状态。在HS模式下,组成通道的两个IO电路输出极性始终相反,不能同时为逻辑高或逻辑低。 下图说明了HS和LP模式之间信号电平的差异。

正常运行时,数据通道在低功耗控制模式和高速数据传输模式之间不断切换。

DDR(Dual Data Rate)传输方式

  • 在单数据速率 (SDR) 同步数据总线架构(例如,SDRAM)中,数据在上升沿或下降沿进行采样,但不会在两者上采样。这意味着数据速率等于时钟速度。各种低功耗模式使用单一数据速率时钟结构。
  • DDR(双数据速率)总线架构可以在每个时钟边沿上传输数据,而不仅仅是在单个边沿上传输数据。HS 模式下的数据传输使用 DDR 传输方案。这意味着对于给定的时钟频率 (Fr),每个通道的数据速率为 2 × Fr。

在高速数据传输模式(High-Speed, HS)的架构下,数据通道(Data Lane)普遍采用双数据率(Dual Data Rate, DDR)传输技术。这一技术核心在于,数据采样操作不仅发生在时钟信号(CLK Lane)的上升沿,还同步在下降沿进行,实现了每个时钟周期内两次采样,从而有效倍增了数据传输效率。具体而言,每当CLK Lane的状态由低变高(上升沿)或由高变低(下降沿)时,Data Lane上的数据即被捕获并传输。

因此,若CLK信号的标称频率为F Hz,则在DDR模式下,每个数据通道(lane)的实际数据传输速率达到2F bps(比特每秒),实现了频率的有效倍增。这一特性在评估并计算移动产业处理器接口(MIPI)时钟频率时尤为重要,其中DRPL(或称为Bit Clock)作为数据速率的直接体现,其值除以2即得到MIPI Clock的等效频率,反映了系统内部处理时钟信号与数据速率之间的换算关系。

总结而言,DDR传输技术通过在每个时钟周期内的上升沿和下降沿均进行数据采样,实现了数据传输速率的加倍,这一机制在高速数据传输系统中具有广泛应用,尤其是在MIPI等标准接口的设计与实施中。

人人极客社区
工程师们自己的Linux底层技术社区,分享体系架构、内核、网络、安全和驱动。
 最新文章