2. CSI-2 数据流模型:像素数据包格式、长包与短包、虚拟通道与数据类型

MIPI CSI-2 协议定义了一套严格的分层数据流模型,确保从图像传感器到应用处理器的像素数据能够被准确、高效地传输。理解数据包格式、长包与短包的区别、虚拟通道的复用机制以及数据类型标识,是进行设备树 Lane 映射和 CSI 调试的基础。

2.1 CSI-2 协议分层架构

CSI-2 协议栈分为三层:应用层、协议层和物理层。物理层由 D-PHY 或 C-PHY 实现,负责比特流的串行传输;协议层负责数据包的封装、解封装、错误检测和虚拟通道管理;应用层则定义像素数据的格式和语义。

调试要点: 在设备树中配置的 data-lanes 和 clock-lanes 属于物理层映射,而 bus-type 和 remote-endpoint 则关联协议层的端点识别。两者必须匹配才能建立正确的数据流。
CSI-2 协议分层架构 应用层 (Application Layer) 像素格式定义 (RAW8/10/12, YUV422, JPEG) · 帧/行控制 协议层 (Protocol Layer) 长包/短包封装 · 虚拟通道 (VC) · 数据类型 (DT) · CRC/ECC 校验 物理层 (Physical Layer) D-PHY / C-PHY · Lane 分配 · 高速 (HS) / 低功耗 (LP) 模式切换 设备树配置映射范围

2.2 数据包格式:长包与短包

CSI-2 协议层定义了两种基本的数据包类型:长包 (Long Packet) 和 短包 (Short Packet)。所有传输都以数据包为单位进行。

2.2.1 长包 (Long Packet)

长包用于传输有效像素数据或嵌入式数据。其结构包含数据包头 (PH)、有效载荷 (Payload) 和数据包尾 (PF)。

字段 字节数 描述
数据标识 (DI) 1 高 2 位为虚拟通道 ID (VC),低 6 位为数据类型 (DT)
字计数 (WC) 2 有效载荷的字节数 (16 位,小端序)
ECC 1 对 DI 和 WC 的纠错码 (单比特纠错,双比特检测)
有效载荷 WC 像素数据或嵌入式数据,按字节对齐
包尾 (PF) 2 CRC-16 校验码,覆盖整个有效载荷
调试技巧: 在逻辑分析仪抓取 CSI-2 数据时,首先检查 ECC 和 CRC 是否正确。ECC 错误通常指示物理层 Lane 映射或时钟问题;CRC 错误则可能指向协议层配置或传感器输出时序异常。

2.2.2 短包 (Short Packet)

短包只有 4 字节,没有有效载荷和 CRC。它主要用于传输帧同步、行同步或事件标记等控制信息。

字段 字节数 描述
数据标识 (DI) 1 VC + DT (短包的数据类型固定为 0x00-0x0F 范围)
数据字段 2 16 位数据值,例如帧号、行计数或特定事件码
ECC 1 对 DI 和数据字段的纠错码

常见的短包数据类型包括:

  • 帧开始 (Frame Start, FS):DT = 0x00,标记一帧图像的开始。
  • 帧结束 (Frame End, FE):DT = 0x01,标记一帧图像的结束。
  • 行开始 (Line Start, LS):DT = 0x02,标记一行像素的开始。
  • 行结束 (Line End, LE):DT = 0x03,标记一行像素的结束。
长包 (Long Packet) 与短包 (Short Packet) 结构 长包结构: DI (1B) WC (2B) ECC (1B) 有效载荷 (WC 字节) CRC (2B) 数据包头 (PH) = 4 字节 有效载荷 包尾 (PF) 短包结构: DI (1B) Data (2B) ECC (1B) 总长 4 字节,无有效载荷,无 CRC 关键区别 • 长包:传输像素/数据,有 CRC 校验 • 短包:传输控制/同步,无 CRC • 短包 Data 字段:帧号/行号/事件码 • 长包 WC=0 时:仅包头+CRC,用于嵌入式数据线

2.3 虚拟通道 (Virtual Channel, VC)

虚拟通道机制允许在同一个 CSI-2 链路上传输最多 4 个独立的数据流。每个数据流通过数据标识 (DI) 字节的高 2 位进行区分,取值范围为 0-3。

虚拟通道的主要应用场景:

  • 多传感器复用:多个图像传感器共享同一组 Lane,通过 VC 区分各自的数据流。
  • 多数据流输出:单个传感器同时输出 RAW 图像和 YUV 缩略图,分别分配不同的 VC。
  • 元数据通道:将传感器配置参数、统计信息等通过独立的 VC 传输,与主图像数据分离。
常见配置错误: 在设备树中,remote-endpoint 节点通常只绑定一个 VC。如果传感器实际输出使用了多个 VC,但接收端只配置了 VC=0,则其他 VC 的数据会被丢弃,导致图像缺失或协议层解析错误。务必确认传感器数据手册中 VC 的分配策略。
虚拟通道 (VC) 复用示意图 传感器 VC=0: RAW10 VC=1: YUV422 VC=2: 元数据 VC 复用 DI[7:6] 接收端 (ISP) VC=0 → RAW 处理 VC=1 → YUV 处理 VC=2 → 元数据解析

2.4 数据类型 (Data Type, DT)

数据类型字段位于数据标识 (DI) 字节的低 6 位,用于标识有效载荷中数据的格式和语义。DT 值由 MIPI 联盟标准化,范围从 0x00 到 0x3F。

以下是嵌入式系统开发中常见的数据类型:

DT 值 数据类型名称 描述 典型应用
0x00 Frame Start 帧开始短包 所有传感器
0x01 Frame End 帧结束短包 所有传感器
0x12 RAW6 6 位原始 Bayer 数据 低端传感器
0x2A RAW8 8 位原始 Bayer 数据 通用摄像头
0x2B RAW10 10 位原始 Bayer 数据 高动态范围传感器
0x2C RAW12 12 位原始 Bayer 数据 工业/医疗摄像头
0x1E YUV422 8-bit YUV 4:2:2 格式,每个分量 8 位 视频流
0x1F YUV420 8-bit YUV 4:2:0 格式,每个分量 8 位 视频压缩
0x30 JPEG JPEG 压缩图像数据 拍照模式
0x37 User Defined 8-bit 用户自定义数据类型 元数据/调试数据
设备树关联: 在 Linux 内核中,media-ctl 工具通过 --set-v4l2 参数设置 pixelformat,该格式必须与传感器输出的 DT 值对应。例如,RAW10 对应 V4L2 像素格式 V4L2_PIX_FMT_SBGGR10。如果格式不匹配,应用层将无法正确解析像素数据。

2.5 数据流传输时序

一个完整的 CSI-2 数据流传输遵循严格的时序:

  1. 帧开始 (FS):发送短包,标记新帧的开始。
  2. 行传输:对于每一行,先发送行开始 (LS) 短包,然后发送包含像素数据的长包,最后发送行结束 (LE) 短包。
  3. 帧结束 (FE):发送短包,标记当前帧的结束。
  4. 消隐期 (Blank):在帧与帧之间或行与行之间,物理层进入 LP 模式或发送填充数据。
CSI-2 数据流传输时序 (一帧) FS 短包 LS 行1 像素长包 LE LS 行2 像素长包 LE ... FE 短包 帧间消隐期 (Vertical Blanking) / 行间消隐期 (Horizontal Blanking) t0 t1 时间 →

2.6 数据流模型与设备树配置的关联

在设备树中配置 CSI 接口时,以下属性直接对应本章的数据流模型概念:

设备树属性 对应数据流概念 配置说明
data-lanes 物理层 Lane 映射 指定使用的 Lane 编号和顺序,必须与传感器输出一致
bus-type 物理层协议类型 通常为 4 (CSI-2 D-PHY) 或 5 (CSI-2 C-PHY)
remote-endpoint 协议层端点绑定 连接发送端和接收端的端点,确保数据流方向正确
pixel-format 应用层数据类型 (DT) 在驱动中通过 V4L2 子设备接口设置,匹配传感器输出的 DT
virtual-channel 虚拟通道 (VC) 部分驱动支持指定 VC 编号,用于多路复用场景
实战建议: 在调试初期,使用 media-ctl -p 命令查看当前 pipeline 的格式配置,确认每个节点的 pixelformat 和 width/height 是否与传感器规格书一致。如果出现“无图像”或“图像撕裂”,优先检查 DT 和 VC 的匹配性。