MIPI CSI2协议
扫描二维码
随时随地手机看文章
1 MIPI简介
MIPI 是 Mobile Industry Processor Interface(移动行业处理器接口)的缩写。MIPI 联盟是一个开放的会员制组织。2003年7月,由美国德州仪器(TI)、意法半导体(ST)、英国 ARM 和芬兰诺基亚(Nokia)4 家公司共同成立。
2 MIPI CSI-2简介
MIPI CSI(Camera Serial Interface)是由MIPI联盟下 Camera 工作组指定的接口标准。CSI-2 是 MIPI CSI 第二版,主要由应用层、协议层、物理层组成,最大支持4通道数据传输、单线传输速度高达1Gb/s。
2.1 MIPI CSI-2 的层次结构
MIPI CSI-2的分层方法有好几种,根据MIPI联盟的规范,CSI-2 可分为5层,如图1所示,分别为:应用层、组包/解包层、底层协议层(Low Level Protocol)、通道管理层和物理层。
名称 | 描述 |
---|---|
应用层 | 即是处理原始图像数据的各种算法模块 |
组包/解包层 | 负责将数据按照一定的次序,切割成8比特数据。 |
底层协议层 | 为新生成的数据加上包头包尾,形成符合协议要求的数据流。 |
通道管理层 | 将生成的数据流按照一定次序和要求,进行读写管理,输出数据流。 |
物理层 | 生成MIPI最后的信号波形。 |
2.2 CSI-2协议层
CSI-2 协议层允许多数据流(CSI-2TX)共用一个主机处理器端 CSI-2 接收信号接口(CSI-2RX)。协议层就可以描述有多少数据流被标记并组合在一起,指定了多数据流怎样被标记和交叉存取,因此每个数据流可以在 SOC 处理器 CSI-2 接收器中被正确的重建,才能把各个数据流正确地恢复出来。
2.3 打包/解包层
CSI-2支持多种像素格式图像应用,包括从6位到24位每个像素的数据格式。
2.4 LLP(Low Level Protocol)层
LLP层包括为串行数据在传输开始(SoT)到传输结束(EoT)之间传输事件和传输数据到下一层,建立位级和字节级同步的方法。LLP最小数据粒度是1字节。LLP层也包括,每字节中各位数值分布解释,即“端”(Endian)分布。
2.5 通道管理(Lane Management)层
为性能不断提升,CSI-2 是通道可扩展的。数据通道数目可以是1,2,3,4,这个依赖于应用中的带宽需求。接口发送端分配(“distributor”功能)输出数据流到一个或更多通道。在接收端,接口从通道收集字节并将之合并(“merger”功能)成为重新组合的数据流,恢复原始数据流序列。
2.6 物理层(PHY Layer)
定义了传输介质 (electrical conductors,导体),输入/输出电路信号的电气特性(electrical parameters)和时钟机制(时序)。即如何从串行位流(Bit Stream)中获取“0”和“1”信号。规范中的这一部分记录了传输介质的特性,并依据时钟和数据通道之间发信号和产生时钟的关系规定了电学参数。
3 MIPI CSI2的物理连接
除地线外,MIPI CSI2一般会有1对I2C通信引脚,1对MIPI差分时钟引脚和1~4对MIPI差分数据信号引脚,如图2所示。
名称 | 描述 |
---|---|
DATA1 /DATA1- | MIPI协议组包生成的差分模拟数据信号第1组 |
DATA2 /DATA2- | MIPI协议组包生成的差分模拟数据信号第2组 |
CLOCK /CLOCK- | 协议组包生成的差分模拟时钟信号 |
SCL/SDA | IIC控制通道 |
4 MIPI CSI2的工作模式
D-PHY有两种传输模式。
-
HS 高速传输模式,用于传输突发数据,同步传输,信号为差分信号,电平范围为100mv-300mv,传输速度范围是80-1000Mbps。在该模式下传输时,当差分线正端收到 1.2V 信号,负端收到 0V信号时,这时接收端识别为 1。反之为0。
-
LP 低功耗模式,用于传输控制指令,异步传输,信号线为单端,电平范围是0-1.2v,没有用时钟线,时钟是通过两个数据线异或而来的,速度只有10Mbps。在该模式下传输时,当正端接收到300m V,负端接收到100m V 时接收端识别为1,反之则识别为0。
5 MIPI CSI2的数据包格式
MIPI CSI2是一个面向字节的,基于包的协议;它支持任意大小的数据通过短包和长包格式传输。各个包之间由EOT-LPS-SOT序列隔开,如图所示。
5.1 MIPI CSI2的长包格式
MIPI CSI2的长包主要有包头、数据包和包尾三部分构成。而包头又可细分为:数据标识(data identifier)、数据包大小(word count)和错误校验码(ECC)构成如下图所示。
数据包大小为2字节,其内容为传送数据的长度,以“字”为单位。
错误校验码大小为1字节,负责对数据包的传输错误进行检查及纠错。
数据包可以传送数据的大小为0~65535字节。
包尾大小为2字节,是数据负荷的检查和。
5.2 MIPI CSI2的短包格式
与长包相比,短包没有数据包和包尾。数据标识DI中的数据类型在0x00到0x0F之间。WC字段是短包的数据域,这个数据可由用户定义。ECC采用的是Hamming Code的方式,能对1bit错误进行纠错,2bit错误进行检查,如下图所示。
同步信号的类型如下:
6 基于FPGA的MIPI接口实现
6.1 接口描述
源码请看【资料获取】csi_4lane_raw10 #(
.series("7SERIES")
) inst (
.ref_clock_in(ref_clock_in),
.reset(reset),
.mipi_phy_if_clk_hs_n(mipi_phy_if_clk_hs_n),
.mipi_phy_if_clk_hs_p(mipi_phy_if_clk_hs_p),
.mipi_phy_if_clk_lp_n(mipi_phy_if_clk_lp_n),
.mipi_phy_if_clk_lp_p(mipi_phy_if_clk_lp_p),
.mipi_phy_if_data_hs_n(mipi_phy_if_data_hs_n),
.mipi_phy_if_data_hs_p(mipi_phy_if_data_hs_p),
.mipi_phy_if_data_lp_n(mipi_phy_if_data_lp_n),
.mipi_phy_if_data_lp_p(mipi_phy_if_data_lp_p),
.m_axis_video_aclk(m_axis_video_aclk),
.m_axis_video_aresetn(m_axis_video_aresetn),
.m_axis_video_tready(m_axis_video_tready),
.m_axis_video_tuser(m_axis_video_tuser),
.m_axis_video_tlast(m_axis_video_tlast),
.m_axis_video_tvalid(m_axis_video_tvalid),
.m_axis_video_tdata(m_axis_video_tdata)
);
端口描述如下:(输入为MIPI接口数据流,输出为axi stream数据流)
端口 | I/O | 描述 |
---|---|---|
ref_clock_in | I | 200M输入参考时钟 |
reset | I | 复位,高有效 |
mipi_phy_if_clk_hs_n mipi_phy_if_clk_hs_p | I | HS链路差分时钟 |
mipi_phy_if_clk_lp_n mipi_phy_if_clk_lp_p | I | LP链路差分时钟 |
mipi_phy_if_data_hs_n mipi_phy_if_data_hs_p | I | HS链路差分数据 |
mipi_phy_if_data_lp_n mipi_phy_if_data_lp_p | I | LP链路差分数据 |
m_axis_video_aclk | I | 视频输入时钟 |
m_axis_video_aresetn | I | 视频输入复位,低有效 |
m_axis_video_tready | I | 视频输入准备信号 |
m_axis_video_tuser | O | 视频输出的帧开始 |
m_axis_video_tlast | O | 视频输出行结尾 |
m_axis_video_tvalid | O | 视频输出数据有效 |
m_axis_video_tdata | O | 视频输出数据 |
6.2 模块分析
程序接口如下图,主要由三个模块组成:
-
解串模块(csi_rx_4_lane_link)
-
协议解析模块(csi_rx_packet_handler)
-
RAW10bit(csi_rx_10bit_unpack)生成模块