3. RK平台MIPI CSI-2协议层详解
MIPI CSI-2(Camera Serial Interface 2)是移动与嵌入式平台最主流的摄像头图像数据传输协议。在瑞芯微RK3588、RK3568、RV1126等平台上,CSI-2协议层直接决定了Sensor与ISP之间数据交互的格式、时序与可靠性。本章深入解析CSI-2协议层的核心要素:长包与短包结构、数据类型映射、虚拟通道机制以及帧格式组织方式。
3.1 CSI-2协议层架构概览
CSI-2协议层采用分层设计,从上到下依次为:应用层(图像数据源)、协议层(打包/解包)、通道管理层(虚拟通道分配)以及物理层(D-PHY/C-PHY)。在RK平台驱动中,协议层的解析工作由rkisp_isi.c或csi2-rx.c等驱动模块完成。
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 | 数据负载的循环冗余校验 |
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 | 标识一行像素数据的结束 | 行序号(可选) |
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 | 同步短包 | 帧/行同步事件 | 帧同步控制 |
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映射。
3.5 帧格式与传输序列
CSI-2协议定义了一帧图像的完整传输序列:以帧开始短包(FS)起始,中间包含多行数据(每行由行开始短包LS、长包数据、行结束短包LE组成),最后以帧结束短包(FE)终止。RK平台的CSI-2接收控制器(如rkisp_isi)严格按照此序列解析数据。
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>;