MIPI基础:从物理层到应用层

各位好,我是老杨,带硬件团队调MIPI接口有些年头了。今天咱们先聊聊MIPI协议的基础,这部分虽然看起来偏概念,但后面所有调试技巧都建立在这上边。我自己吃过不少“协议理解不透彻”的亏,所以开篇就把坑指出来。

MIPI协议概述

MIPI(Mobile Industry Processor Interface)联盟定义了一整套用于移动设备内部通信的接口标准。咱们做摄像头和显示驱动,最常打交道的两个是D-PHY(物理层)和CSI-2/DSI(协议层)。

关键认知:MIPI是分层设计的。物理层只管差分信号、低压摆幅、高速/低功耗模式;协议层才管数据格式、包结构、帧同步。千万别把物理层和协议层的时序问题混在一起查——我以前就干过这种蠢事,对着CSI-2的LP序列反复调终端电阻,后来发现是D-PHY的skew根本没对上。

D-PHY有四类信号线:

  • 时钟线(CLK):DDR双边沿采样,频率范围80MHz~1GHz
  • 数据线(DATA0~DATA3):每条lane速率可达2.5Gbps(D-PHY v1.2)
  • 控制信号(LP):低功耗模式用,电平1.2V
  • 地线(GND):屏蔽和回流

实际项目里,CLK和DATA之间的skew是最敏感的参数。我有个案例:某款4路1080P摄像头只上了2条lane,测出来的CSI-2波形看着没问题,但一到高帧率就丢帧。后来发现CLK走线绕了180°过孔,skew超过200ps。调了等长后问题消失。

CSI-2与DSI的区别

这两个协议长得像,但用途完全不一样。我用表格对比一下,你记牢:

对比项CSI-2(摄像头接口)DSI(显示接口)
方向单向:传感器→应用处理器双向:应用处理器→显示屏(有双向控制通道)
数据格式RAW、YUV、JPEG等压缩/原始视频RGB、像素流、命令/视频模式
带宽要求追求高数据吞吐(多路并发)更在意延迟和刷新率
典型配置4条lane + 1条CLK2~4条lane + CLK,可携带I²C命令
电源管理通过LP-11/LP-00状态切换有专门的ULPS(超低功耗模式)

我曾经踩过的坑:为了复用PCB布局,在设计初期把CSI-2和DSI的lane顺序画反了——以为都是D-PHY,连上就行。结果CSI-2传感器死活I²C能读但图像全是雪花。查了三天,发现lane映射表错了。CSI-2的Data1不一定对应DSI的Data1,顺序按协议规范重新分配后才通。所以,布局前一定核对两份datasheet的lane分配表。

你可能会问:为什么明明都是D-PHY物理层,还不能直接互换?因为CSI-2和DSI在链路层的数据包结构不同。CSI-2用短包(16位)和长包(数据长度可变),DSI除了视频数据还有命令包。调试时如果你用DSI分析仪去抓CSI-2的包,解析出来的全是乱码——别问我怎么知道的。

多路摄像头系统架构

咱们这门课主要解决的就是“多路摄像头怎么稳定切换MIPI信号”的问题。一个典型的多路摄像头系统,架构如下:

多路摄像头MIPI系统架构 摄像头#1 CSI-2 4-lane 摄像头#2 CSI-2 2-lane 摄像头#3 CSI-2 4-lane 摄像头#4 CSI-2 1-lane MIPI Switch MUX / 矩阵切换 SoC / ISP MIPI控制器 + 图像处理 控制总线(I²C / SPI / GPIO) 时序关键点 1. HS-Trail 保持时间 2. Switch切换时Gap 3. LP转HS建立时间

图上这个架构你们后面会反复看到。每个摄像头通过独立的MIPI数据总线连接到MIPI Switch(或多路复用器),Switch再输出单路MIPI给SoC。控制总线(I²C/SPI)负责配置摄像头和切换通道。

我的调试习惯:在多路系统中,我一般先保证单路能够稳定出图,再用Switch切到第二路。两路都通了,才上满4路。如果出现“切换后第一帧花屏”这种经典故障,99%是Switch切换时刻的MIPI总线状态没处理好——要么HS-Trail没走完,要么LP-11低功耗状态没进入干净。后面章节咱们会专门讲这个时序。

多路摄像头系统的另一个挑战是同步。不同摄像头可能有不同的帧率、曝光时间,Switch切换时如果帧头帧尾没对齐,SoC收到的就是一帧混叠数据。我们常用的做法是:让所有摄像头工作在同一个外部触发模式(如FSIN),由SoC统一发送帧同步信号。这样切通道时总能落在帧消隐期(V-Blank),避免画面撕裂。

嗯,基础概念先到这里。记住:协议规范是死的,但PCB走线、负载电容、时钟抖动这些都会让物理层偏离理想情况。后面第二节咱们就会深入D-PHY的仿真与SI分析,到时候用实例告诉你为什么PCB上一根短截线就能搞崩整个MIPI链路。