Linux DRM MIPI DSI显示驱动开发与屏幕适配 - 第1节
1.1 MIPI 联盟与 DSI 标准定位
MIPI(Mobile Industry Processor Interface)联盟成立于 2003 年,旨在为移动设备制定开放、免版税的接口标准。其成员覆盖芯片设计、面板制造、终端设备等全产业链。在 MIPI 发布的数十个规范中,DSI(Display Serial Interface) 是面向显示子系统的串行接口标准,与 CSI(Camera Serial Interface)共同构成 MIPI 应用层两大支柱。
课程定位提示:DRM/KMS 框架中,drm_connector 与 DSI 面板的交互完全基于 MIPI DSI 协议。理解 DSI 的分层结构是编写正确初始化序列的前提。
MIPI 联盟关键标准一览
| 标准名称 | 版本 | 主要用途 | 与 DRM 关系 |
|---|---|---|---|
| D-PHY | v2.5 | 物理层,定义高速/低功耗信号 | drm_dsi 驱动直接操作 PHY 时序 |
| DSI | v2.0 | 显示串行接口协议 | drm_mipi_dsi 核心层实现 |
| DCS | v1.4 | 显示命令集,面板控制指令 | 初始化序列中的 set_display_on 等 |
| CCI / I²C | — | 控制总线,配置寄存器 | 部分 DSI 桥片使用 |
1.2 DSI 协议分层架构
DSI 协议采用 四层分层模型,从物理层到应用层逐层封装。DRM 驱动开发者最常接触的是 协议层 和 应用层,但底层时序问题往往需要回溯到 D-PHY 层排查。
分层要点:每一层只与相邻层交互,驱动代码中 mipi_dsi_host_ops 的回调函数对应协议层的传输请求。
DSI 协议四层模型
- 应用层(Application Layer):像素数据打包、命令封装。DRM 的 framebuffer 最终在此层转换为 DSI 长包。
- 协议层(Protocol Layer):定义包格式(长包/短包)、ECC/CRC 校验、虚拟通道管理。drm_mipi_dsi_device 的 channel 字段即对应虚拟通道 ID。
- 传输层(Transport Layer):将协议包映射到 Lane 上,处理 Lane 分布、重传、低功耗模式切换。
- 物理层(Physical Layer / D-PHY):差分信号、时钟 Lane、数据 Lane 的电气特性与时序。
1.3 D-PHY 物理层基础
D-PHY 是 MIPI 联盟定义的 串行物理层规范,DSI 和 CSI 共享同一套 PHY 标准。D-PHY 采用 源同步差分传输,每个 Lane 由一对差分线(Dp/Dn)组成,支持两种工作模式:高速模式(HS) 和 低功耗模式(LP)。
D-PHY 关键特性
| 参数 | 高速模式(HS) | 低功耗模式(LP) |
|---|---|---|
| 信号幅度 | 200 mV 差分摆幅 | 1.2 V 单端摆幅 |
| 数据传输率 | 80 Mbps ~ 4.5 Gbps / Lane | ≤ 10 Mbps |
| 功耗 | 高(差分驱动) | 极低(单端驱动) |
| 应用场景 | 像素数据流 | 命令传输 / 总线空闲 |
| 时钟 Lane | DDR 双边沿采样 | 无时钟,异步 |
常见误区:LP 模式虽然速率低,但用于发送 DCS 命令(如 display_on)。驱动初始化时若 LP 时序配置错误,会导致面板无响应。务必检查 PHY 的 LP 定时参数(如 T_LPX、T_HS_PREPARE)。
D-PHY Lane 结构
一个典型的 DSI 链路包含 1 条时钟 Lane 和 1~4 条数据 Lane。时钟 Lane 提供 DDR 时钟,数据 Lane 在时钟的上升沿和下降沿各传输 1 bit。Lane 数量由面板规格决定,DRM 驱动通过 mipi_dsi_device->lanes 字段读取。
1.4 DSI 包类型与传输模式
DSI 协议定义了两类数据包:短包(Short Packet) 和 长包(Long Packet)。短包固定 4 字节,用于命令和同步;长包包含包头、数据负载和 CRC,用于像素流和批量命令。
包类型对比
| 特性 | 短包 | 长包 |
|---|---|---|
| 长度 | 固定 4 字节(DI + WC + ECC) | 6 ~ 65541 字节(包头 + 数据 + CRC) |
| 典型用途 | DCS 命令、同步事件(VSA / HSA) | 像素数据、GAMMA 表、大块寄存器配置 |
| 传输模式 | LP 或 HS | HS 为主 |
| ECC | 8 bit 纠错码 | 包头含 ECC,数据含 CRC |
驱动开发要点:初始化序列中,
mipi_dsi_dcs_write() 发送短包命令,mipi_dsi_dcs_write_buffer() 发送长包数据。内核 API 会自动选择包类型,但驱动需确保 PHY 处于正确模式。
1.5 本章小结
- MIPI DSI 是移动显示领域的事实标准,DRM 驱动通过
drm_mipi_dsi框架与其对接。 - DSI 协议分为应用层、协议层、传输层、物理层四层,驱动开发重点关注协议层和物理层。
- D-PHY 物理层使用差分信号,支持 HS 和 LP 两种模式,Lane 数量决定带宽。
- 短包和长包分别适用于命令和批量数据传输,初始化序列中两者都会用到。