0. 前言:为什么 MIPI CSI-2 是现代视觉的基石?
在智能手机三摄、车载 ADAS 自动驾驶、AR/VR 交互的背后,都离不开一个共同的"幕后功臣"------MIPI CSI-2 (Camera Serial Interface 2) 协议。
许多初学者甚至资深工程师在调试摄像头时,常会被 THS−SETTLET_{HS-SETTLE}THS−SETTLE 报错、CRC 校验失败、图像颜色偏移等问题困扰。其核心原因在于对 低层协议层(Low Level Protocol, LLP) 的理解不够透彻。本文将带你深度复盘 MIPI CSI-2 的底层逻辑,让你不仅"会配寄存器",更能"看透比特流"。
1. 分层架构:物理层之上的物流体系
要理解 LLP,首先要看它在整个协议栈的位置。MIPI CSI-2 并非孤立存在,它建立在 D-PHY 或 C-PHY 之上。
- 物理层 (D-PHY/C-PHY):铺设高速公路,负责差分信号的物理传输。
- 低层协议层 (LLP):物流管理系统。它负责把像素"打包"成集装箱(长包)或信封(短包),并打上单号(Data ID)。
- 像素-字节转换层 (Pixel to Byte):将 10-bit 或 12-bit 的像素拆解成适合 8-bit 总线传输的字节流。
生动比喻:物理层是高速公路上的车道,LLP 是物流公司的分拣标准,它决定了货物如何装箱、如何核对单据以及如何防止丢包。
2. 封包机制:短包与长包的"精密分工"
CSI-2 协议规定了两种基本的数据封包格式。
2.1 短包 (Short Packet) ------ 精准的指挥官
短包固定为 32 bits (4 字节)。它不携带任何图像像素,只负责指挥。
- Data ID (8位):包含虚拟通道(VC)和数据类型(DT,如 0x00 表示帧开始)。
- Data Field (16位):通常存放帧计数器(Frame Number)。
- ECC (8位):纠错码。
2.2 长包 (Long Packet) ------ 沉稳的搬运工
长包是数据的载体,长度可变。
- Packet Header (PH):32位,告诉接收端接下来有多少像素数据。
- Data Payload:真正的像素狂欢,由 WC(Word Count)指定字节数。
- Packet Footer (PF):包含 16 位的 CRC 校验码。
3. 错误控制:ECC 与 CRC 的"双重过滤"
在数 Gbps 的传输中,干扰无处不在。MIPI 如何保证数据不乱?
3.1 ECC:包头的"保险锁"
ECC 保护的是包头(PH)。它采用修正汉明码(Modified Hamming Code),具有 SEC-DED 能力:
- 纠 1 错:如果 32 位包头中由于干扰翻转了 1 bit,ECC 能自动把它纠正过来。
- 检 2 错:如果错了 2 bit,ECC 会报警,硬件通常会丢弃该包。
3.2 CRC:载荷的"质检员"
CRC-16 保护的是 Payload(像素数据)。
- 原理:发送端根据像素流计算出 16 位码,接收端重算比对。
- 局限:CRC 只能发现错误,不能修复。如果 CRC 报错,图像上可能会出现一条花线,或者 ISP 触发异常中断。
4. 像素打包 (Pixel Packing):字节的奥林匹克
这是 CSI-2 最具技术含量的地方。D-PHY 是按字节(8-bit)传的,但 Sensor 输出往往是 RAW10、RAW12。怎么塞进去?
4.1 RAW10 的"5字节循环"
以 10-bit RAW 为例:4 个像素一共 40 bits。
- 传输方式 :
- 前 4 个字节发 4 个像素的 高 8 位。
- 第 5 个字节发 4 个像素各自剩下的 2 位低位。
- 计算公式 :WC=Width×1.25WC = \text{Width} \times 1.25WC=Width×1.25。
4.2 为什么 WC (Word Count) 如此重要?
如果你的 Sensor 宽度是 1920,输出 RAW10,那么 WC 必须配置为 1920×1.25=24001920 \times 1.25 = 24001920×1.25=2400 字节。如果你的寄存器配成了 2401,接收端就会因为"找不到包尾"而疯狂报错。
5. 高级特性:不仅仅是传输图像
5.1 虚拟通道 (Virtual Channel, VC)
通过 DI 字节中的 VC 位,一根 MIPI 线可以同时传 4 路甚至更多路图像。
- 场景:车载环视系统中,一个四合一解复用器将 4 路摄像头信号交织在一起,通过一根 MIPI 线传给 SoC。
- 解析:SoC 根据 VC ID 自动把数据分发到不同的内存缓冲区。
5.2 数据加扰 (Data Scrambling)
当传输速率极高时,0 和 1 的规律跳变会产生巨大的电磁辐射(EMI)。
- 机制:利用伪随机序列(PRBS)与数据异或,让频谱变"乱"。
- 影响:不开启加扰,手机可能会搜不到 Wi-Fi;开启加扰,信号就干净了。
5.3 LRTE (延迟降低)
在自动驾驶中,每一毫秒都关乎生命。LRTE 通过优化包结构和物理层切换时序,让第一行像素到达处理器的速度提升了 10%~20%。
6. 驱动实战
6.1 偏色严重(绿变紫、蓝变红)
- 根本原因:Bayer Pattern 顺序不匹配。
- 排查:Sensor 发出的是 RGGB,你的 ISP 驱动里写成了 BGGR。
- 解决 :修改驱动中的
mbus_code。
6.2 "No data received" 或中断不触发
- 根本原因 :THS−SETTLET_{HS-SETTLE}THS−SETTLE 时间不匹配。
- 排查:Sensor 准备好了进入高速模式,但 SoC 延迟了 50ns 才打开接收窗口,导致错过了 SoT(传输开始信号)。
- 解决:调整 SoC 端 MIPI PHY 的 Settle 参数。
6.3 图像右侧出现绿色噪点
- 根本原因:WC 设置错误,导致每行多读了几个无效字节。
- 解决:根据 Data Type 严格计算 Word Count。
7. 总结:
MIPI CSI-2 协议的精华都在 LLP 层。它通过复杂的封包、纠错和打包机制,把脆弱的电信号变成了稳定的图像数据流。
- ECC 确保了指令的正确性;
- CRC 保证了质量的可靠性;
- VC 扩展了应用的灵活性;
- Packing 压榨了物理带宽。
码字不易,如果这篇文章帮你解决了 MIPI 协议的疑惑,请点赞、收藏支持一下!