3. RK平台MIPI CSI-2协议层详解

MIPI CSI-2(Camera Serial Interface 2)是移动与嵌入式平台最主流的摄像头图像数据传输协议。在瑞芯微RK3588、RK3568、RV1126等平台上,CSI-2协议层直接决定了Sensor与ISP之间数据交互的格式、时序与可靠性。本章深入解析CSI-2协议层的核心要素:长包与短包结构、数据类型映射、虚拟通道机制以及帧格式组织方式。

核心要点: CSI-2协议层位于物理层(D-PHY/C-PHY)之上,负责将图像数据打包成标准化的数据包,通过差分数据通道(Lane)传输。理解包结构是驱动开发中解析图像数据、配置Sensor输出格式、调试数据流异常的基础。

3.1 CSI-2协议层架构概览

CSI-2协议层采用分层设计,从上到下依次为:应用层(图像数据源)、协议层(打包/解包)、通道管理层(虚拟通道分配)以及物理层(D-PHY/C-PHY)。在RK平台驱动中,协议层的解析工作由rkisp_isi.c或csi2-rx.c等驱动模块完成。

CSI-2协议层架构与数据流 应用层(Application Layer) Sensor像素阵列 → RAW/YUV/JPEG数据源 协议层(Protocol Layer) 长包(Long Packet) | 短包(Short Packet) 数据类型(DT) | 虚拟通道(VC) | 帧格式 通道管理层(Lane Management) 虚拟通道(VC0~VC3) | 数据通道(Lane0~Lane3) 物理层(D-PHY / C-PHY) 高速差分信号传输

3.2 长包(Long Packet)与短包(Short Packet)格式

CSI-2协议定义了两种数据包格式:长包用于传输图像像素数据(RAW、YUV、JPEG等),短包用于传输帧同步、行同步等控制信息。两种包格式在数据通道上交替出现,构成完整的帧传输序列。

3.2.1 长包结构

长包由三部分组成:包首(Packet Header, PH)、数据负载(Data Payload)和包尾(Packet Footer, PF)。包首为4字节,包含虚拟通道(VC)、数据类型(DT)、字计数(WC)和ECC校验;数据负载为2字节对齐的像素数据;包尾为2字节的CRC校验。

字段 字节偏移 位宽 描述
VC + DT Byte 0 8 bits 高2位为虚拟通道ID(VC),低6位为数据类型(DT)
Word Count (WC) Byte 1~2 16 bits 数据负载的字节数(2字节对齐)
ECC Byte 3 8 bits 包首的错误校正码,可纠正1bit错误、检测2bit错误
Data Payload Byte 4 ~ 4+WC-1 WC × 8 bits 像素数据,2字节对齐,不足补0
CRC 最后2字节 16 bits 数据负载的循环冗余校验
长包(Long Packet)结构 包首(PH) 4 Bytes 数据负载(Data Payload) WC Bytes(2字节对齐) 包尾(PF) 2 Bytes VC+DT 1B WC 2B ECC 1B

3.2.2 短包结构

短包只有4字节的包首,没有数据负载和包尾。短包用于传输帧开始(FS)、帧结束(FE)、行开始(LS)、行结束(LE)等同步事件。短包的数据类型(DT)标识事件类型,字计数字段(WC)用于携带附加参数(如帧号、行号)。

短包类型 DT值(Hex) 描述 WC含义
帧开始(Frame Start, FS) 0x00 标识一帧图像数据的开始 帧序号(可选)
帧结束(Frame End, FE) 0x01 标识一帧图像数据的结束 帧序号(可选)
行开始(Line Start, LS) 0x02 标识一行像素数据的开始 行序号(可选)
行结束(Line End, LE) 0x03 标识一行像素数据的结束 行序号(可选)
驱动调试提示: 在RK平台调试MIPI CSI-2接口时,如果遇到图像帧错乱或数据丢失,应首先检查短包序列是否完整。正常的帧传输序列为:FS → LS → [长包数据] → LE → ... → LS → [长包数据] → LE → FE。缺少FS或FE会导致ISP无法正确同步帧边界。

3.3 数据类型(Data Type, DT)详解

数据类型字段(DT)占用包首Byte 0的低6位,用于标识数据负载的格式。CSI-2协议定义了丰富的DT值,覆盖RAW、YUV、RGB、JPEG等常见图像格式。RK平台Sensor驱动在初始化时,必须将Sensor输出的DT值与ISP接收端期望的DT值匹配。

DT值(Hex) 数据类型 描述 RK平台常见应用
0x2A ~ 0x2F RAW6 ~ RAW14 Bayer RAW格式,位深6~14bit RK3588 ISP支持RAW10/RAW12/RAW14
0x1E YUV420 8-bit YUV 4:2:0 子采样,8bit/分量 RK3568视频编码输入
0x1F YUV420 10-bit YUV 4:2:0 子采样,10bit/分量 高动态范围(HDR)场景
0x40 ~ 0x4F RGB888 / RGB565 RGB色彩空间,8bit或5-6-5格式 显示预览、截图
0x60 ~ 0x6F JPEG / 其他压缩格式 压缩图像数据流 JPEG直出、压缩传感器
0x00 ~ 0x0F 同步短包 帧/行同步事件 帧同步控制
CSI-2数据类型(DT)映射关系 短包(同步事件) DT: 0x00 ~ 0x0F FS / FE / LS / LE RAW格式 DT: 0x2A ~ 0x2F RAW6/8/10/12/14 YUV / RGB DT: 0x1E~0x1F / 0x40~0x4F YUV420/422 / RGB888/565 压缩格式(JPEG / 其他) DT: 0x60 ~ 0x6F RK平台驱动中,DT值必须在Sensor侧和ISP侧一致,否则图像解码错误或无法采集

3.4 虚拟通道(Virtual Channel, VC)机制

虚拟通道机制允许在同一个MIPI物理链路上传输最多4路独立的图像数据流(VC0~VC3)。每个数据包的高2位标识其所属的虚拟通道。在RK平台的多摄像头场景中(如RK3588支持4路MIPI CSI-2输入),VC机制是实现多路复用传输的关键。

  • VC ID范围: 0~3,由包首Byte 0的高2位编码。
  • 多路复用: 不同Sensor的数据包在数据通道上交错传输,接收端根据VC ID分离数据流。
  • RK平台应用: 双摄同步、三摄/四摄阵列、主摄+景深+广角组合。
  • 驱动配置: 在设备树中通过data-lanes和virtual-channel属性指定VC映射。
虚拟通道(VC)多路复用示意图 Sensor 0 VC=0 Sensor 1 VC=1 Sensor 2 VC=2 MUX VC 0~2 交错传输 MIPI 物理通道 4 Lane DEMUX VC分离 → ISP 0/1/2 RK3588支持最多4路虚拟通道,对应4个独立的ISP输入或1个ISP的多路复用输入

3.5 帧格式与传输序列

CSI-2协议定义了一帧图像的完整传输序列:以帧开始短包(FS)起始,中间包含多行数据(每行由行开始短包LS、长包数据、行结束短包LE组成),最后以帧结束短包(FE)终止。RK平台的CSI-2接收控制器(如rkisp_isi)严格按照此序列解析数据。

CSI-2帧传输序列 FS 短包 LS 短包 行数据(长包) RAW/YUV像素 LE 短包 ... LS 短包 行数据 长包 FE 短包 帧格式关键规则 1. 每帧必须以FS短包开始,以FE短包结束,缺少任一短包都会导致帧同步失败。 2. 每行数据由LS短包引导、LE短包结束,行数据长包位于两者之间。 3. 长包的字计数(WC)必须等于该行像素数据的总字节数(2字节对齐)。

3.6 RK平台驱动中的协议层配置

在RK平台驱动开发中,协议层的配置主要体现在设备树(DTS)和Sensor驱动中。以下是一个典型的RK3588设备树中MIPI CSI-2协议层配置示例:

// RK3588 设备树 - MIPI CSI-2 协议层配置示例
&csi2_dphy0 {
    status = "okay";
    ports {
        #address-cells = <1>;
        #size-cells = <0>;
        port@0 {
            reg = <0>;
            #address-cells = <1>;
            #size-cells = <0>;
            mipi_in_ucam0: endpoint@0 {
                reg = <0>;