DSI vs CSI-2:孪生协议的本质差异
深度解析MIPI两大核心协议的架构差异与应用场景
一、协议定位的根本性差异
1. 数据流向对比
- DSI : 输出导向 (Host → Display)
核心任务:渲染画面 + 控制屏幕
典型带宽:4.5Gbps(1080p@60fps RGB888) - CSI-2 : 输入导向 (Sensor → Host)
核心任务:采集原始图像
典型带宽:6Gbps(4K@30fps RAW12)
2. 应用场景拓扑
系统 | DSI组件 | CSI-2组件 |
---|---|---|
智能手机 | OLED显示屏 | 主摄像头/前置摄像头 |
汽车ADAS | 仪表盘/HUD | 环视摄像头/激光雷达 |
医疗内窥镜 | 术野显示器 | 内窥镜传感器 |
二、包结构的关键差异
1. 同步包设计差异
包类型 | DSI | CSI-2 |
---|---|---|
帧开始 | 0x01 (含帧号) | 0x00 (严格递增帧号) |
帧结束 | 0x11 (可选) | 无专用结束包 |
行同步 | 0x21 (逻辑行号) | 0x02 (物理行号) |
DSI同步包独特功能 :
// DSI帧开始包携带显示控制标志位
struct dsi_frame_start {
u16 frame_id;
u8 flags; // Bit0: TE触发标志 Bit1: 低延迟模式
};
2. 数据包功能差异
DSI独有包类型 :
- 命令包 (0x05-0x0F):
// 设置屏幕亮度命令
0x05 // DI:VC0+命令包
0x03 // 长度=3字节
0x51 // 亮度寄存器地址
0xFF // 亮度值(255)
0xXX // CRC
- BLLP包 (Blanking Low-Level Packet):
在消隐期传输触摸数据等辅助信息
CSI-2独有包类型 :
- 嵌入式数据包 (0x12):
传输传感器温度/时间戳等元数据 - 压缩包 (RAW10-14):
采用差分压缩算法(附件E)
3. 虚拟通道(VC)应用对比
特性 | DSI | CSI-2 |
---|---|---|
最大通道数 | 4 (VC0-VC3) | 4 (VC0-VC3) |
典型应用 | 主屏(VC0)/副屏(VC1) | RGB(VC0)/深度图(VC1) |
仲裁机制 | 优先级固定(VC0最高) | 轮询调度 |
三、物理层优化差异
1. 时钟模式对比
关键参数差异 :
参数 | DSI | CSI-2 |
---|---|---|
时钟模式 | Burst Mode为主 | 支持Continuous Mode |
LP→HS切换 | <5ns | <10ns |
ULPS功耗 | 2μA | 5μA |
2. 通道配置实践
- DSI典型配置 :
手机:1通道(1080p)
VR设备:2通道(2K@120Hz) - CSI-2典型配置 :
摄像头:2-4通道(4K@60fps需4通道)
激光雷达:1通道(低分辨率点云)
布线差异 :
// DSI布线要求(手机示例)
CLK+ CLK- 长度差: <0.1mm
DATA0+ DATA0- 长度差: <0.15mm
CLK与DATA间距: ≥3倍线宽
// CSI-2布线要求(车载摄像头)
CLK与DATA长度差: <0.05mm(更严格)
四、协同工作案例:手机相机预览
1. 数据流全链路
2. 时序协同挑战
- 帧同步机制 :
// 帧同步伪代码
void camera_preview() {
csi_frame = csi2_capture_frame(); // CSI-2采集
rgb_frame = isp_process(csi_frame); // 图像处理
dsi_wait_for_tearing_effect(); // 等待屏幕TE信号
dsi_send_frame(rgb_frame); // DSI传输
}
- 延迟指标 :
阶段 典型延迟 CSI-2采集 1.2ms ISP处理 3.5ms DSI传输 0.8ms 端到端 5.5ms
五、协议细节代码对比
1. 包头处理差异
// DSI包头处理(Linux驱动示例)
static void dsi_parse_header(u8 *header) {
vc = (header[0] >> 6) & 0x3; // 高2位=VC
dt = header[0] & 0x3F; // 低6位=DataType
wc = header[1] | (header[2] << 8); // 小端长度
}
// CSI-2包头处理
static void csi2_parse_header(u8 *header) {
vc = (header[0] >> 6) & 0x3;
dt = header[0] & 0x3F;
wc = header[1] | (header[2] << 8);
// CSI-2特有:检查压缩标志位
if (dt >= 0x2B && dt <= 0x2D)
enable_decompression();
}
2. 错误处理机制
错误类型 | DSI响应 | CSI-2响应 |
---|---|---|
包头ECC错误 | 尝试纠正单比特错误 | 丢弃包并报告CRC错误 |
负载CRC错误 | 触发TE重传机制 | 请求关键帧重传 |
物理层失锁 | 发送0x04(ULPS进入)复位链路 | 发送0x01(同步请求)重新训练 |
六、选型指南:何时用DSI?何时用CSI-2?
1. 决策树
2. 混合系统设计建议
- 引脚复用 :
// 设备树配置示例(Rockchip RK3588)
&csi2_dphy0 {
status = "okay";
ports {
port@0 {
csi_in_cam: endpoint {
remote-endpoint = <&cam_out>;
// 共享D-PHY引脚
data-lanes = <1 2 3 4>;
};
};
port@1 {
csi_out_dsi: endpoint {
remote-endpoint = <&dsi_in>;
data-lanes = <1 2 3 4>;
};
};
};
};
- 资源冲突规避 :
- DSI优先使用VC0/VC1
- CSI-2使用VC2/VC3
结语:互补的协议双雄
DSI与CSI-2作为MIPI联盟的"输出-输入"双璧,共享相似的包结构和物理层,却在传输方向、包功能、物理优化上存在本质差异。理解这些差异,是构建高效视觉系统(如手机相机预览、多屏车载系统)的关键基石。