从 sensor 输出数据到 SOC mipi 接收

从 sensor 输出到 SOC mipi 接收

cmos sensor 是图像采集模块,sensor 采集到图像数据之后,常见的是通过 mipi 接口输出数据到 soc,那么,图像通过 mipi 接口输入到 soc,这个过程是怎样的呢,下面一起来看看。

CSI-2 anb CCI Tranamitter and receiver interface

上面的框图,可以比较清晰的描绘了 sensor 和 soc 的数据关系,soc 通过 CCI (Camera Control Interface) 控制 sensor 寄存器,配置正确,sensor 将会通过 mipi 接口输出图像数据。

控制信息是 soc 通过 CCI 发送到 sensor,CCI 接口一般的就是 I2C 接口,这里不详细描述,主要关注一下 mipi 这块是怎么发送、接收数据的。
CSI-2 layer definitions

mipi 以 mipi CSI-2 协议为例进行主要的介绍和学习。上图是 mipi CSI-2 的层定义框图:

  • PHY Layer:物理层主要是指定传输介质、输入/输出电路和从串行比特流中捕获 1 和 0 的时钟机制。同时,该层还包含了开始传输信号(SoT)和结束传输信号(EoT)以及其他的一些传输信息、数据的一些同步机制。

  • Protocol Layer:协议层又是有多个层组成的,每层的作用都不一样。mipi CSI-2 协议允许同一个 mipi 接口接收多条数据流,协议层将指定数据流是如何交织、提取,以便正确的解析、获取多条数据流。

    • Pixel/Byte Packing/Unpacking Layer:发送端,在这一层,将上层的像素数据(6bit~24bit)打包为字节数据发送;而接收端,将底层协议层的字节解包为像素传递到上层。
    • Low Level Protocol:低级别协议(LLP),包括为在 SoT 和 EoT 信号之间传输的串行数据建立 bit 和字节的同步,并将数据传递到下一层。LLP 的最小数据粒度是一个字节。
    • Lane Management:lane 管理层,CSI-2 可以根据上层应用的带宽要求选择数据通道的数量,发送端可以将 LLP 传出的数据流分发到一个或多个通道;而接收端,则是从多个通道中接收字节数据并合并为一个数据流,恢复原始的流序列再传递给 LLP。

    协议层内的数据组织为包的形式,发送端将头信息和一些可选的错误检查信息附加到 LLP 传输的数据上;接收端,在 LLP 提取、解析附加的信息。

  • Application Layer:应用层,将需要通过 mipi 协议发送、接收的数据都在该层进行处理。

Physical Layer

CSI-2 实现的物理层有多个单向 data lane 和一个 clk lane 组成,发送端和接收端都必须支持 clk lane 的连续时钟模式,并可选支持非连续时钟模式。

  • 连续时钟模式:数据包传输间隔,clk lane 保持在高速模式;
  • 非连续时钟模式:数据包传输间隔,clk lane 进入 LP-11 状态;

注意:SoT 和 EoT 信号都是在物理层插入的。

相关缩写名词:

  • HS-RX:高速接收器
  • HS-TX:高速发送器
  • LP-RX:低功耗接收器
  • LP-TX:低功耗发送器
Start-of-Transmission ( SoT )

transmission

在发送请求之后,data lane 将会通过开始传输信号(SoT)退出停止状态,进入高速模式,这个过程相应的变化序列如下:

TX SideRX 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’
高速模式开始传输有效数据
接收到有效数据
End-of-Transmission ( EoT )

在数据完成传输时,通过结束传输(EoT)过程,数据通道退出高速模式并进入停止状态,这个过程状态变化如下:

TX SideRX Side
传输数据接收到数据
在完成最后一个字节数据的传输之后立即切换到不同的状态,并保持该状态的时间间隔为 THS-TRAIL
关闭 HS-TX,启用 LP-TX,并在 THS-EXIT一段时间内处于停止状态 ( LP-11 )检测到 lane 状态进入停止状态 ( LP-11 ),关闭传输功能
忽略 THS-SKIP一段时间内的 lane 变化,以忽略转换状态
检测有效数据的最后一次转换,确定最后一次有效数据并忽略包尾序列

Lane Management

CSI-2 支持多 lane 同时发送数据,Lane Management 处于 Phy Layer 与 LLP 之间。在发送端,Lane Management 可以发送任意字节长度数据,缓冲 N 个字节(N = lane 数),然后在 N lane 中并行发送 N 个字节数据。在发送数据前,所有 lane (包括 clk lane、data lane)并行发送 SoT 信号,以表示将开始发送数据包的第一个字节。

bytes transmit

上图清晰的描述了 mipi lane 在传输数据时的传输序列是怎样的?每 lane 每次发送一个字节,发送前后分别有 Sot、Eot 信号。如果是发送短包数据,假设说配置的 mipi data lane 为 4,而发送的数据一共只有两个字节,这次,通过 lane 1、lane 2发送数据,而 lane 3、lane 4 保持 LPS 状态。

Low Level Protocol

低级别协议(LLP)是面向字节、基于包的协议,它支持使用长、短数据包格式传输任意数据。LLP 支持以下特性:

  • 低位先发送,即 LSB 先行;
  • 支持同一链路包含四个交叉的虚拟通道;
  • 具备帧开始、帧结束、行开始、行结束等特殊数据包;
  • 支持应用层设置数据的类型,像素深度和格式等;
  • 用于错误检测的 16bit 校验码

下图是 LLP 数据包的打包示意图。

Low Level Protocol Packer

LLP 通信定义了长短包,每个包,都是从 LPS 退出,然后传输 SoT 信号表示数据包的开始,传输 EoT 信号,随后进入 LPS,表示数据包结束。

协议包格式
长数据包格式

下图是长数据包格式结构图。

long packet structure

长数据包的数据类型由 0x10 到 0x37 标识,一个长数据包由 3 个元素组成:一个 32 位的数据包报头(PH),一个应用程序特定的可变长度的有效数据载荷和一个 16 位的数据报尾(PF)。而数据包报头又是由一个 8 位的数据类型标识符,一个 16 位的有效数据长度(字节)计数字段和一个针对报头的 8 位的纠错码 ECC 组成;报尾则是一个 16 位的校验和。

短数据包格式

下图是短数据包格式结构图。

short packet structure

短数据包的数据类型标识符由 0x00 到 0x0F 标识,短数据包仅包含报头而没有报尾。报头中的计数字段替换为短数据包的数据内容。对短数据包的标识符为帧同步数据类型时,短数据包数据字段为帧号,标识符为行同步数据类型时,短数据包数据字段为行号。其他的通用短数据包数据类型,数据字段内容由用户定义。

数据标识符

数据标识符字节包含虚拟通道标识符(VC)值和数据类型(DT)值,如下图所示。虚拟通道标识符包含在数据标识符字节的两个 MS 位中。数据类型值包含在数据标识符字节的六个 LS 位中。

data identifier byte

虚拟通道标识符 — VC

为什么会有虚拟通道标识符这个信息呢?增加虚拟通道标识符是为了可以在使用一个物理接口同时(宏观上的同时)为不同的数据流提供单独的通道(数据交织传输)。虚拟通道标识符位于数据标识符字节的前两位,mipi 接收端将会检测虚拟通道标记符,并将交织数据流解交织到适当的通道中,mipi CSI-2 最多支持 4 路通道有效数据输入。逻辑通道的原理如下图所示。

logical channel block diagram

下图是多通道数据流示例。

interleaved video data streams examples

数据类型 — DT

数据类型值将会指定有效负载数据的格式和内容,最多有 64 个支持的数据类型。

Data TypeDescription
0x00 to 0x07用于同步的短数据包数据类型
0x08 to 0x0F通用短数据包数据类型
0x10 to 0x17通用长数据包数据类型
0x18 to 0x1FYUV Data
0x20 to 0x27RGB Data
0x28 to 0x2FRAW Data
0x30 to 0x37用户自定义
0x38 to 0x3F保留使用

对于 YUV、RGB 和 RAW 格式的数据,一个长数据包应包含一行图像数据。

同步作用的短数据包数据类型码
Data TypeDescription
0x00帧开始码
0x01帧结束码
0x02行开始码
0x03行结束码
0x04 to 0x07保留使用

每个图像帧必须以包含帧开始码的帧开始(FS)包开始,FS 包后面应该跟着一个或多个包含图像数据的长包和零个或多个包含同步码的短包,每个图像帧应以包含帧结束码的帧结束(FE)包结束。对于 FS 和 FE 同步数据包,短数据包数据字段应包含一个 16 位帧号,对应于同一帧的 FS 和 FE 同步包,该帧号应该是相同的。

对于行开始(LS)和行结束(LE)同步包,短包数据字段应包含一个 16 位的行号,对于同一行的 LS 和 LE 数据包,该行号应该是相同的,同时需要注意的是,行号是逻辑行号,不一定等于物理行号。

报头 ECC

数据标识符和数据包有效长度计数值的正确解释对整个数据包结构至关重要,所以在报头增加纠错码 ECC。ECC 可以对数据标识符和数据包计数值的 bit 错误进行纠正,最多可以检测到 2 bit 的错误。

具体的 ECC 计算,网上搜索即可,这里不详细介绍。

行帧示意图

下面各图清晰的描述了多个数据包组成的数据帧示例,VVALID 为帧有效信号,HVALID 为行有效信号,而 DVALID 为数据有效信号。该部分只是帮助理解帧开始、帧结束和行开始、行结束的行为,不构成 mipi CSI-2 规范的一部分。

从多个数据包看帧示例。

multiple packet example

从单个数据包看帧示例。

single packet example

从数据包中理解 Blanking 。

line and frame blanking definitions

交织传输示意图

交织传输数据,有两种方式,分别是利用数据类型值标记不同的数据包和利用虚拟通道标识符值标记数据包。

下图是利用数据类型值标记不同数据包的传输示意图,都是处于同一个虚拟通道进行传输的,仅仅是 DT 值不一样,通过该值分辨不同的数据包。

interleaved data transmission using data tpye value
而下图则是通过虚拟通道标识符值传输不同的数据包,他们处于不同的虚拟通道进行传输,通过 VC 值分辨不同的数据包。

interleaved data transmission using virtual channels

帧数据格式

关于 YUV、RGB 和 RAW 的格式要求,详细的可以看 mipi 规格书,有较详细的规范要求,字节的排序以及包的最小长度都有要求。

总结

通过上述 mipi CSI-2 协议的简单学习,可以知道什么呢?学习这个有什么用呢?

  1. 通过了解 mipi 的传输协议,可以理解为什么有时候移植 cmos sensor 时,示波器测量 mipi 有信号输出,但是 SOC 接收不到数据,这个时候可以检查 mipi 时序,确认从低功耗模式切换到高速模式时的时序是否匹配。
  2. 通过理解 mipi 协议的虚拟通道标识符 ( VC ),可以更好的理解 HDR sensor 的长短曝光帧输出过程。
  3. 还可以使用 mipi 传输其他的数据呢(一本正经的胡说八道,想不到还有什么用了)。

关于 PHY 的其他信息,可查看我的另一篇博文 csi mipi信号解析 ,本文参考自 mipi CSI-2 规范。

  • 25
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chengwei_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值