4. MIPI CSI-2协议层与onsemi传感器实现
MIPI CSI-2 是 onsemi 图像传感器与 SoC/ISP 之间最常用的高速串行接口。理解它不能只停留在“有几条 lane、速率多少”,而要落到协议层:一帧图像如何被切成包、包头里放了什么、接收端如何判断包是否可信、多个数据流如何共用同一条物理链路。本节围绕数据包格式、虚拟通道(VC)、数据类型(DT)、ECC/CRC 以及 onsemi 器件中的实际配置要点展开。
一、CSI-2 协议分层与包的基本结构
CSI-2 在物理层之上分为协议层和应用层。协议层负责把像素数据、嵌入式数据、帧同步信息封装成短包(Short Packet)和长包(Long Packet),再经 D-PHY 或 C-PHY 发送。短包固定 4 字节,用于帧起始(FS)、帧结束(FE)、行起始(LS)、行结束(LE)等同步事件;长包用于承载有效载荷,结构为:4 字节包头 + 有效载荷 + 2 字节包尾。
包头 4 字节依次为:DI(Data Identifier,1 字节)、WC(Word Count,2 字节,小端)、ECC(1 字节)。DI 又由 VC(高 2 位)和 DT(低 6 位)组成。包尾是 2 字节 CRC。也就是说,ECC 保护的是包头,CRC 保护的是有效载荷,两者作用范围不同,不能混为一谈。
二、虚拟通道与数据类型
VC 只有 2 bit,因此一条 CSI-2 链路上最多区分 4 个逻辑数据流(VC0~VC3)。它的价值在于:当一颗传感器同时输出多种数据(例如主图像流、相位检测像素流、嵌入式统计信息),或系统把多颗传感器汇聚到同一 CSI-2 接收端口时,接收端可以按 VC 把数据分流到不同 DMA 通道或不同 ISP 处理路径,而不必增加物理连线。
DT 是 6 bit,用于标识“这段载荷是什么”。常见取值包括:RAW8=0x2A、RAW10=0x2B、RAW12=0x2C、RAW14=0x2D、YUV422 8bit=0x1E、RGB888=0x24、嵌入式数据=0x12、用户自定义=0x30~0x37。接收端必须用 DT 判断如何解析载荷,例如 RAW10 的打包方式与 RAW12 不同,若 DT 配错,图像会花屏或错位。
三、ECC 与 CRC 的校验逻辑
ECC 采用汉明码思路,对包头 3 字节生成 1 字节校验。接收端收到包头后重新计算 ECC 并与收到的 ECC 比较:若不一致,可定位并纠正 1 bit 错误;若出现 2 bit 错误则只能检测不能纠正,通常上报错误并丢弃该包。CRC 则对有效载荷做 16 位循环冗余校验,接收端逐包计算,若 CRC 不匹配说明载荷在传输中出错,该包应被丢弃,避免错误像素进入图像。
四、onsemi 器件中的配置要点
以 AR0234、AR0821、AR2020 等 onsemi 传感器为例,CSI-2 相关配置通常通过寄存器组完成,核心包括:
- VC 分配:通过寄存器设置每个输出流的虚拟通道号。若 SoC 只接收 VC0,而传感器把主流出到 VC1,就会出现“有帧同步但无图像”的现象。
- DT 选择:根据输出格式设置 RAW8/10/12/14 或 YUV422。DT 必须与 SoC 接收端配置一致,否则解析错误。
- Lane 数与速率:配置 lane 数量(1/2/4 lane)和每 lane 速率,需与 D-PHY 时序、SoC 接收能力匹配。
- 帧/行同步包:确认 FS/FE/LS/LE 短包是否使能,以及帧号、行号是否随包发送,便于接收端做同步与错误定位。
- ECC/CRC 使能:部分器件可配置是否生成 CRC,接收端也应开启对应校验,形成闭环。
实际调试时,建议先用示波器或 CSI-2 分析仪确认 FS 包出现、DI 字段中的 VC/DT 与预期一致,再检查 CRC 错误计数。若 CRC 错误随速率升高而增加,通常是信号完整性或时序余量问题,而非协议配置错误。
五、配置示例与判断依据
假设使用 AR0234,输出 RAW10、2 lane、VC0,SoC 端接收 RAW10。传感器侧关键寄存器可参考如下思路(具体地址以数据手册为准):
// 示例:设置 VC = 0,DT = RAW10 (0x2B)
write_reg(0x30A0, 0x00); // VC0
write_reg(0x30A2, 0x2B); // DT = RAW10
write_reg(0x30A4, 0x02); // 2 lane
// 使能 FS/FE 短包
write_reg(0x30B0, 0x01);
判断配置是否成功,可依次观察:① 接收端是否收到 FS 短包;② DI 中的 VC/DT 是否与写入值一致;③ CRC 错误计数是否长期为 0;④ 图像是否完整、无错位。若 FS 正常但图像异常,优先核对 DT 与打包方式;若 CRC 持续报错,优先检查 lane 速率、走线阻抗与时钟关系。