CSI-2协议层分层结构:应用层、协议层、物理层
很多人一开始学MIPI CSI-2,上来就背三层结构——应用层、协议层、物理层。背完了还是不知道每一层到底干嘛的。我刚开始也这样。
说白了,这三层就是一条数据流水线。传感器拍到的原始像素数据,经过应用层“打包”,协议层“封装加校验”,最后物理层“发出去”。反过来,接收端先物理层收信号,协议层拆包校验,应用层再把数据还原成图像。今天我就把这三层拆开了讲清楚。
应用层:图像的“打包车间”
应用层离传感器最近。传感器拍完一帧图像,原始数据交给应用层,由它决定怎么组织这些像素。
我个人习惯把应用层想象成数据的“打包车间”。不同格式的像素数据——RAW、Bayer、YUV、JPEG——在应用层被封装成统一的数据类型。每种数据类型都有一个对应的Data Type (DT)值,接收端靠这个DT值就能知道当前传输的是什么内容。
应用层主要干这几件事:
- 像素数据打包:把传感器输出的数据按行组织,每行包含若干像素
- 帧结构定义:标记帧开始、帧结束、行有效等边界信息
- 数据类型标识:通过DT值告诉接收端“我是RAW10”、“我是YUV422”还是“我是JPEG”
举个例子,一个200万像素的传感器,输出RAW10格式。应用层会按每行1920个像素组织数据,然后告诉协议层:“这是图像数据,请准备传输。”
协议层:数据的“信使与警卫”
协议层是CSI-2的核心。它从应用层接收像素数据,然后生成两种包:短包和长包。
短包只有包头,没有数据负载。说白了,它就是控制信令——告诉接收端“新的一帧开始了”、“这一行结束了”、“帧结束了”。我遇到过不少工程师,搞不清短包和长包的区别,抓波形时对着短包看了半天,以为数据丢了。短包里就没有数据,你找什么数据呢?
长包才是真正携带像素数据的载体。结构比短包复杂:
长包结构:
┌─────────────────────────────────────────────────────┐
│ 包头(32bit) │ 数据负载(N字节) │ CRC校验(16bit) │
├──────────────────┬──────────────────┬─────────────────┤
│ DI(6bit) │ WC(16bit) │ ECC(8bit) │ 像素数据 │ CRC │
└──────────────────┴──────────────────┴─────────────────┘
包头里三个字段最关键:
| 字段 | 位数 | 作用 |
|---|---|---|
| DI (Data Identifier) | 6 bit | 高2位表示虚拟通道(Virtual Channel),低4位表示数据类型(Data Type) |
| WC (Word Count) | 16 bit | 告诉接收端这个长包有多少字节数据负载 |
| ECC (Error Correction Code) | 8 bit | 校验包头本身的正确性,能纠正1bit错误,检测2bit错误 |
数据负载放的就是应用层打包好的像素数据。最后16bit CRC校验整个数据负载的完整性。
协议层还负责传输操作模式控制。我记得有次调试一款车载摄像头,就是靠短包里的Frame Start/Frame End信号来同步双目视觉的帧对齐。短包的时序控制非常精准,纳秒级别。
物理层:信号的“物理通道”
物理层是CSI-2里最“硬”的一层。它负责通过实际的双绞线差分对——也就是Lane——来发送串行数据。
CSI-2物理层有两种规范:D-PHY和C-PHY。目前90%以上的手机摄像头和嵌入式摄像头还是用D-PHY,C-PHY主要在高端场景用得比较多。
物理层的关键参数:
- Lane数量:1~4 Lane,每个Lane包含一对差分线(Data+ / Data-)
- 时钟Lane:D-PHY必须有独立的时钟Lane;C-PHY没有时钟Lane,用数据Lane本身自带的时钟恢复
- 传输模式:高速模式(HS)传输数据,低功耗模式(LP)传输控制信号
- 信号电平:HS模式差分摆幅200mV,LP模式单端1.2V
D-PHY和C-PHY的差异从协议层角度看,本质就是“有没有独立时钟线”和“每个Lane能传多少bit”。D-PHY一个Lane一次传1bit,C-PHY一个Lane一次能传2.28bit。我在做4K摄像头选型时,就是因为C-PHY能省Lane才选它的——少一根Lane,PCB布线轻松不少。
物理层的另一个重要工作:Lane管理。CSI-2支持1、2、3、4 Lane模式,物理层要把应用层/协议层的数据流拆分成多个Lane发送。接收端物理层再把这些Lane合并回来。这个拆分合并过程对上层是完全透明的。
三层之间的协作关系
这三层不是各自为战的。数据流从上到下,层层加工。我总结了一个类比:
- 应用层是“生产线”,把原材料(像素)加工成半成品(像素流)
- 协议层是“包装车间”,给半成品贴标签(包头)、加防拆封条(CRC)、发指令单(短包)
- 物理层是“运输队”,把包装好的货物通过多条传送带(Lane)送到目的地
接收端反过来:物理层收信号,协议层拆包、校验、提取数据,应用层把数据还原成图像。
理解这个分层,你才能看懂CSI-2的数据手册,也才能在调试时知道问题出在哪一层。是物理层的信号质量不行,还是协议层的CRC校验没通过,还是应用层把数据类型配错了?分层清晰了,定位问题就是分分钟的事。