cmos sensor 是图像采集模块,sensor 采集到图像数据之后,常见的是通过 mipi 接口输出数据到 soc,那么,图像通过 mipi 接口输入到 soc,这个过程是怎样的呢,下面一起来看看。
上面的框图,可以比较清晰的描绘了 sensor 和 soc 的数据关系,soc 通过 CCI (Camera Control Interface) 控制 sensor 寄存器,配置正确,sensor 将会通过 mipi 接口输出图像数据。
控制信息是 soc 通过 CCI 发送到 sensor,CCI 接口一般的就是 I2C 接口,这里不详细描述,主要关注一下 mipi 这块是怎么发送、接收数据的。
mipi 以 mipi CSI-2 协议为例进行主要的介绍和学习。上图是 mipi CSI-2 的层定义框图:
PHY Layer:物理层主要是指定传输介质、输入/输出电路和从串行比特流中捕获 1 和 0 的时钟机制。同时,该层还包含了开始传输信号(SoT)和结束传输信号(EoT)以及其他的一些传输信息、数据的一些同步机制。
Protocol Layer:协议层又是有多个层组成的,每层的作用都不一样。mipi CSI-2 协议允许同一个 mipi 接口接收多条数据流,协议层将指定数据流是如何交织、提取,以便正确的解析、获取多条数据流。
协议层内的数据组织为包的形式,发送端将头信息和一些可选的错误检查信息附加到 LLP 传输的数据上;接收端,在 LLP 提取、解析附加的信息。
Application Layer:应用层,将需要通过 mipi 协议发送、接收的数据都在该层进行处理。
CSI-2 实现的物理层有多个单向 data lane 和一个 clk lane 组成,发送端和接收端都必须支持 clk lane 的连续时钟模式,并可选支持非连续时钟模式。
注意:SoT 和 EoT 信号都是在物理层插入的。
相关缩写名词:
在发送请求之后,data lane 将会通过开始传输信号(SoT)退出停止状态,进入高速模式,这个过程相应的变化序列如下:
TX Side | RX Side |
---|---|
退出停止状态 ( LP-11 ) | 检测停止状态 |
进入 HS-Rqst 状态 ( LP-01 ),并处于该状态的时间间隔为 TLPX | 检测到 lane 从 LP-11 转变为 LP-01 |
进入 Bridge 状态 ( LP-00 ),并处于该状态的时间间隔为 THS-PREPARE | 检测到 lane 从 LP-01 转变为 LP-00,间隔 TD-TERM-EN 时间之后将使能传输 |
同时退出低功耗模式,进入高速模式 | |
处于 HS-0 状态,时长为 THS-ZERO | 使能 HS-RX 并等待 THS-SETTLE,以忽略转换状态 |
开始从数据流中等待同步序列 | |
时钟上升边缘插入 HS 同步序列 ‘00011101’ | |
识别到同步序列 ‘00011101’ | |
高速模式开始传输有效数据 | |
接收到有效数据 |
在数据完成传输时,通过结束传输(EoT)过程,数据通道退出高速模式并进入停止状态,这个过程状态变化如下:
TX Side | RX Side |
---|---|
传输数据 | 接收到数据 |
在完成最后一个字节数据的传输之后立即切换到不同的状态,并保持该状态的时间间隔为 THS-TRAIL | |
关闭 HS-TX,启用 LP-TX,并在 THS-EXIT一段时间内处于停止状态 ( LP-11 ) | 检测到 lane 状态进入停止状态 ( LP-11 ),关闭传输功能 |
忽略 THS-SKIP一段时间内的 lane 变化,以忽略转换状态 | |
检测有效数据的最后一次转换,确定最后一次有效数据并忽略包尾序列 |
CSI-2 支持多 lane 同时发送数据,Lane Management 处于 Phy Layer 与 LLP 之间。在发送端,Lane Management 可以发送任意字节长度数据,缓冲 N 个字节(N = lane 数),然后在 N lane 中并行发送 N 个字节数据。在发送数据前,所有 lane (包括 clk lane、data lane)并行发送 SoT 信号,以表示将开始发送数据包的第一个字节。
上图清晰的描述了 mipi lane 在传输数据时的传输序列是怎样的?每 lane 每次发送一个字节,发送前后分别有 Sot、Eot 信号。如果是发送短包数据,假设说配置的 mipi data lane 为 4,而发送的数据一共只有两个字节,这次,通过 lane 1、lane 2发送数据,而 lane 3、lane 4 保持 LPS 状态。
低级别协议(LLP)是面向字节、基于包的协议,它支持使用长、短数据包格式传输任意数据。LLP 支持以下特性:
下图是 LLP 数据包的打包示意图。
LLP 通信定义了长短包,每个包,都是从 LPS 退出,然后传输 SoT 信号表示数据包的开始,传输 EoT 信号,随后进入 LPS,表示数据包结束。
下图是长数据包格式结构图。
长数据包的数据类型由 0x10 到 0x37 标识,一个长数据包由 3 个元素组成:一个 32 位的数据包报头(PH),一个应用程序特定的可变长度的有效数据载荷和一个 16 位的数据报尾(PF)。而数据包报头又是由一个 8 位的数据类型标识符,一个 16 位的有效数据长度(字节)计数字段和一个针对报头的 8 位的纠错码 ECC 组成;报尾则是一个 16 位的校验和。
下图是短数据包格式结构图。
短数据包的数据类型标识符由 0x00 到 0x0F 标识,短数据包仅包含报头而没有报尾。报头中的计数字段替换为短数据包的数据内容。对短数据包的标识符为帧同步数据类型时,短数据包数据字段为帧号,标识符为行同步数据类型时,短数据包数据字段为行号。其他的通用短数据包数据类型,数据字段内容由用户定义。
数据标识符字节包含虚拟通道标识符(VC)值和数据类型(DT)值,如下图所示。虚拟通道标识符包含在数据标识符字节的两个 MS 位中。数据类型值包含在数据标识符字节的六个 LS 位中。
为什么会有虚拟通道标识符这个信息呢?增加虚拟通道标识符是为了可以在使用一个物理接口同时(宏观上的同时)为不同的数据流提供单独的通道(数据交织传输)。虚拟通道标识符位于数据标识符字节的前两位,mipi 接收端将会检测虚拟通道标记符,并将交织数据流解交织到适当的通道中,mipi CSI-2 最多支持 4 路通道有效数据输入。逻辑通道的原理如下图所示。
下图是多通道数据流示例。
数据类型值将会指定有效负载数据的格式和内容,最多有 64 个支持的数据类型。
Data Type | Description |
---|---|
0x00 to 0x07 | 用于同步的短数据包数据类型 |
0x08 to 0x0F | 通用短数据包数据类型 |
0x10 to 0x17 | 通用长数据包数据类型 |
0x18 to 0x1F | YUV Data |
0x20 to 0x27 | RGB Data |
0x28 to 0x2F | RAW Data |
0x30 to 0x37 | 用户自定义 |
0x38 to 0x3F | 保留使用 |
对于 YUV、RGB 和 RAW 格式的数据,一个长数据包应包含一行图像数据。
Data Type | Description |
---|---|
0x00 | 帧开始码 |
0x01 | 帧结束码 |
0x02 | 行开始码 |
0x03 | 行结束码 |
0x04 to 0x07 | 保留使用 |
每个图像帧必须以包含帧开始码的帧开始(FS)包开始,FS 包后面应该跟着一个或多个包含图像数据的长包和零个或多个包含同步码的短包,每个图像帧应以包含帧结束码的帧结束(FE)包结束。对于 FS 和 FE 同步数据包,短数据包数据字段应包含一个 16 位帧号,对应于同一帧的 FS 和 FE 同步包,该帧号应该是相同的。
对于行开始(LS)和行结束(LE)同步包,短包数据字段应包含一个 16 位的行号,对于同一行的 LS 和 LE 数据包,该行号应该是相同的,同时需要注意的是,行号是逻辑行号,不一定等于物理行号。
数据标识符和数据包有效长度计数值的正确解释对整个数据包结构至关重要,所以在报头增加纠错码 ECC。ECC 可以对数据标识符和数据包计数值的 bit 错误进行纠正,最多可以检测到 2 bit 的错误。
具体的 ECC 计算,网上搜索即可,这里不详细介绍。
下面各图清晰的描述了多个数据包组成的数据帧示例,VVALID 为帧有效信号,HVALID 为行有效信号,而 DVALID 为数据有效信号。该部分只是帮助理解帧开始、帧结束和行开始、行结束的行为,不构成 mipi CSI-2 规范的一部分。
从多个数据包看帧示例。
从单个数据包看帧示例。
从数据包中理解 Blanking 。
交织传输数据,有两种方式,分别是利用数据类型值标记不同的数据包和利用虚拟通道标识符值标记数据包。
下图是利用数据类型值标记不同数据包的传输示意图,都是处于同一个虚拟通道进行传输的,仅仅是 DT 值不一样,通过该值分辨不同的数据包。
而下图则是通过虚拟通道标识符值传输不同的数据包,他们处于不同的虚拟通道进行传输,通过 VC 值分辨不同的数据包。
关于 YUV、RGB 和 RAW 的格式要求,详细的可以看 mipi 规格书,有较详细的规范要求,字节的排序以及包的最小长度都有要求。
通过上述 mipi CSI-2 协议的简单学习,可以知道什么呢?学习这个有什么用呢?
关于 PHY 的其他信息,可查看我的另一篇博文 csi mipi信号解析 ,本文参考自 mipi CSI-2 规范。