MIPI CSI-2 (软件工程师视角)
MIPI-CSI-2 是 MIPI 定义的 camera 和 host 之间的一种接口标准 (以下简称 CSI2)
CSI2 定义的接口又可分为数据接口和控制接口(CCI), 此处不关心控制接口, 以下所说 CSI2 或 CSI2 接口默认指(只涉及)数据接口
CSI2 概览
CSI2 可视为由 PHY (MIPI D-PHY) 和 PACKET 协议层组成。
CSI2 规格
- 最大 2.5Gbps / per lane (data-lane)
- 1 到 4 个 data-lane
- 时钟信号双边沿采样
- 1 到 4 个 虚拟通道
PHY (D-PHY) (CSI2 视角)
D-PHY 由多个 lane (模块) 组成。一个 lane 可视为一个信道/通道,物理上是两根线。lane 分为时钟 lane (clock-lane) 和 数据 lane (data-lane)。 特别的,data-lane 的数量是可配置的 (1到4)
一个 lane "完整系统"由 两个 lane-module 和 之间的连接线 (2-wire) 组成。 lane 上传输的信号是 High-Speed 信号 或 Low-Power 信号。HP 信号用于高速数据传输,LP 信号用于控制。信号由 Transmitter(TX) 发送,Receiver(RX) 则负责接收,故 HP 信号有 HP-TX、HP-RX,LP 信号有LP-TX、LP-RX。
HP 信号: 两线为差分 低压摆200mv 80Mbps~2500Mbps 需要时钟信号(clock-lane)
LP 信号: 两线为独立单端 1.2v max-10Mbps 不需要时钟信号(clock-lane)
即一个 lane 的两根线被时分复用了。LP 时,是两个单端信号线;HS 时,是一对差分信号线
一个 lane (模块) (包含了所有信号收发器的)内部结构图示:
HP、LP 信号图示
D-PHY 有主从之分 (master slave),时钟信号(by clock-lane) 由 master 提供给 slave,数据由 master 到 slave 为正向,反之为反向 (CSI2 最小要求不需要反向数据传输(半双工特性),即单工即可)
Data Lane
一个 data-lane 在空闲时是 LP 状态(即线上是 LP 信号),两根线均为高电平(1.2v)(简记为 LP-11)。将空闲状态归为 Control 模式,则还有 Escape、Hight-Speed 模式。 其中只有 High-Speed 模式时是 HP 信号(需要clock-lane),余下模式则是 LP 信号(不需要clock-lane)。
- High-Speed 模式用于传送(高速)数据
- Escape 模式用于特殊操作,如 CSI2 中,可用于控制 lane 进入 Ultra-Low Power State。(此不关心该模式)
- Control 模式,lane 的空闲状态即属于此模式
data-lane 由空闲状态经特定的序列可进入(退出) Escape 或 High-Speed 模式。如下图所示,High-Speed 的进入序列是:LP-11,LP-01,LP-00; 退出序列是 LP-11。特别的,High-Speed 在真正开始传输数据之前还要发送同步信号,整个 进入/退出 数据发送状态的过程 称为 SoT/EoT (Start-of-Transmission, End-of-Transmission)
High-Speed 模式时,LP-RX 将此时视为 LP-00 状态
Clock Lane
clock-lane 有且仅有一个,(CSI2 定义) clock-lane 上的时钟信号可以是连续输出(一直发送时钟信号,不管data-lane 的状态), 或者是(可选)非连续输出模式(仅当data-lane是HP时,有时钟信号,其余情况是LP-11状态。时钟信号是双边沿采样 (DDR)
初始化问题
PACKET 协议层
CSI2 数据传输基本单元是 PACKET (以下简称为包),对于 PHY (D-PHY) 来说,就是 SoT-Data-EoT 中的 Data 部分(当然PHY 不需关心data中的内容,只是当作字节数据传送)。
包 组成如下
头部 载荷+尾部
- 头部 4B: 1B 2B 1B / DI DEP ECC
- DI 由 VC(bit7
6) 和 DT(bit50) 组成, VC 表示虚拟通道号, DT 表示包类型 - DEP 短包时,作为参数用;长包时作为载荷长度标识 (长短包由DT推出)
- ECC 做头部数据的检错/纠错用
- DI 由 VC(bit7
- 载荷 Max(16bit) - 6
- 尾部 2B: CRC
- 对载荷的校验
包有不同的类型,头部是必然存在的,其余部分则取决于包的类型。只有头部的是短包,否则是长包
包逐步细分 list:
- 短包
- 帧起始包
- 帧结束包
- 行起始包
- 行结束包
- 长包
- YUV数据包
- YUV422 8-bit 数据包
- ...
- RGB数据包
- RGB888 数据包
- ...
- RAW数据包
- RAW10 数据包
- ...
- ...
- YUV数据包
帧起始包 帧数据包 帧结束包
当多个 data-lane 时,涉及包数据的分发/合并,即发送时,将包数据的各个字节分发给若干 data-lane 进行传输,对等的,接收方也需要从这些 data-lane 中恢复出包数据。字节在 lanes 上的分发有固定规则,如下图示
总结:CSI2 结构图
Notes
- CSI2 的 VCH (虚拟channel) 和 data-lane 没有关系
- CSI2 的 YUV422 格式细节为 UYVY
- CSI2 的 CLK-LANE 开始数据传输前需要在STOP状态(连续模式时),主机控制器可能依赖此
参考资料
- MIPI Alliance Specification for Camera Serial Interface 2
- MIPI Alliance Specification for D-PHY