3. DSI Host Controller硬件架构
DSI Host Controller 是 SoC 内部负责将并行的像素/命令数据打包为 MIPI DSI 串行协议的核心硬件模块。理解其功能模块划分、时钟域关系以及数据通道映射,是正确初始化 DSI 接口和编写 DRM Connector 驱动的基础。
3.1 功能模块划分
一个典型的 DSI Host Controller 内部包含以下主要功能模块:
| 模块名称 | 功能描述 | 与驱动交互接口 |
|---|---|---|
| APB/AXI 总线接口 | 负责 CPU 对控制器寄存器的读写访问,以及 DMA 传输控制。 | 寄存器基地址、中断号 |
| 命令模式引擎 | 解析并打包 DCS 短包/长包命令,支持 Generic/Long Write 和 Read。 | 命令 FIFO、状态寄存器 |
| 视频模式引擎 | 从帧缓冲区读取像素数据,按 Video Mode 时序打包为像素流。 | 帧基地址、行/帧参数 |
| 像素处理单元 | 完成 RGB/YUV 格式转换、数据位宽调整、DPI 接口时序生成。 | 像素时钟、同步信号 |
| 协议打包器 | 将数据封装为 DSI 包(包头 + 数据 + ECC/CRC)。 | 包类型、虚拟通道 ID |
| Lane 管理层 | 管理数据通道的使能、转向(Bidirectional)、均衡(Skew Calibration)。 | Lane 映射寄存器 |
| PHY 接口层 | 与 D-PHY 的 PPI(PHY Protocol Interface)对接,处理高速/低功耗状态切换。 | PHY 状态机、时钟请求 |
驱动关注点: 在初始化阶段,驱动需要依次使能 PHY 接口层、配置 Lane 管理层、设置视频/命令模式引擎,最后通过总线接口下发初始化序列。任何模块的时钟或复位缺失都会导致 DSI 链路无法建立。
3.2 时钟域划分
DSI Host Controller 内部存在多个异步时钟域,时钟域之间的同步处理是硬件设计的难点,也是驱动配置的关键。
时钟配置提示: 在驱动初始化时,必须按以下顺序配置时钟:
1. 使能 APB 总线时钟(pclk),完成寄存器访问。
2. 配置 PLL 生成 pixel_clk 和 byte_clk,确保两者满足 DSI 数据速率要求。
3. 等待各时钟域 PLL 锁定后,再释放对应模块的复位信号。
1. 使能 APB 总线时钟(pclk),完成寄存器访问。
2. 配置 PLL 生成 pixel_clk 和 byte_clk,确保两者满足 DSI 数据速率要求。
3. 等待各时钟域 PLL 锁定后,再释放对应模块的复位信号。
3.3 数据通道映射
DSI 标准支持 1/2/3/4 条数据通道(Data Lane),每条通道由一对差分信号(Dp/Dn)组成。Host Controller 内部的 Lane 管理层负责将逻辑数据流映射到物理通道上。
3.3.1 通道映射寄存器配置
大多数 DSI Host Controller 提供可编程的通道映射寄存器,允许驱动将逻辑通道号(Lane ID)映射到物理 PHY 通道上。典型的映射寄存器结构如下:
/* 以 Synopsys DW-MIPI-DSI 为例的 Lane 映射寄存器 */
#define DSI_LANE_MAP 0x0134
/* Lane 映射字段定义 */
#define LANE_MAP_DATA0_SHIFT 0 /* 逻辑 Lane 0 映射到物理 Lane X */
#define LANE_MAP_DATA1_SHIFT 4 /* 逻辑 Lane 1 映射到物理 Lane X */
#define LANE_MAP_DATA2_SHIFT 8 /* 逻辑 Lane 2 映射到物理 Lane X */
#define LANE_MAP_DATA3_SHIFT 12 /* 逻辑 Lane 3 映射到物理 Lane X */
#define LANE_MAP_CLOCK_SHIFT 16 /* 时钟 Lane 映射到物理 Lane X */
/* 示例:4 Lane 配置,逻辑 Lane 0-3 映射到物理 Lane 0-3 */
#define LANE_MAP_4LANE (0x3210)
/* 示例:2 Lane 配置,逻辑 Lane 0-1 映射到物理 Lane 1-2 */
#define LANE_MAP_2LANE (0x0201)
3.3.2 通道映射策略对比
| 映射策略 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 直连映射 | PCB 走线无交叉 | 配置简单,延迟最小 | 缺乏灵活性 |
| 交叉映射 | PCB 走线需要绕线 | 方便 PCB 布局 | 增加驱动配置复杂度 |
| 动态重映射 | 多设备共用 DSI 总线 | 支持热插拔和通道切换 | 需要硬件额外支持 |
3.3.3 通道使能与状态机
每条数据通道在初始化时需要经历以下状态序列:
- ULPS(Ultra-Low Power State)退出:发送 Mark-1 序列唤醒 PHY。
- HS 时钟建立:等待时钟 Lane 进入高速模式并稳定。
- HS 数据训练:发送同步序列(SoT)进行 Bit 对齐。
- 均衡校准:调整各通道的 Skew,确保数据同时到达。
- 正常操作:进入高速数据传输模式。
3.4 硬件架构对驱动设计的影响
常见初始化陷阱:
- 时钟顺序错误:先使能 byte_clk 再使能 pixel_clk 可能导致像素处理单元状态机异常。
- Lane 映射不匹配:驱动配置的逻辑 Lane 映射与 PCB 实际走线不一致,导致数据错位。
- 均衡校准超时:PCB 走线长度差异过大时,需要增加均衡校准的等待时间。
- ULPS 退出失败:某些 PHY 在退出 ULPS 后需要额外的稳定时间,驱动需插入延迟。