MIPI CSI-2

欲观原文,请君移步

1 MIPI简介

MIPI是Mobile Industry Processor Interface(移动行业处理器接口)的缩写。MIPI 联盟是一个开放的会员制组织。2003年7月,由美国德州仪器(TI)、意法半导体(ST)、英国 ARM 和芬兰诺基亚(Nokia)4 家公司共同成立。

MIPI 联盟旨在推进移动应用处理器接口的标准化。MIPI 联盟下面有不同的 WorkGroup ,分别定义了一系列的手机内部接口标准,比如摄像头接口 CSI 、显示接口 DSI 、射频接口 DigRF 、麦克风/喇叭接口 SLIMbus 等。而 MIPI CSI-2 (Camera) and MIPI DSI (Display)则是目前业界使用最广的两个 MIPI 接口标准,而这也是和视频传输相关的标准,所以本文主要对 CSI-2 摄像头标准进行介绍。

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)、通道管理层和物理层。

图1

协议结构层次详细描述如下

名称描述

应用层即是处理原始图像数据的各种算法模块

组包/解包层负责将数据按照一定的次序,切割成8比特数据。

底层协议层为新生成的数据加上包头包尾,形成符合协议要求的数据流。

通道管理层将生成的数据流按照一定次序和要求,进行读写管理,输出数据流。

物理层生成MIPI最后的信号波形。

2.2    CSI-2协议层

CSI-2 协议层允许多数据流(CSI-2TX)共用一个主机处理器端 CSI-2 接收信号接口(CSI-2RX)。协议层就可以描述有多少数据流被标记并组合在一起,指定了多数据流怎样被标记和交叉存取,因此每个数据流可以在 SOC 处理器 CSI-2 接收器中被正确的重建,才能把各个数据流正确地恢复出来。

2.3    打包/解包层

CSI-2支持多种像素格式图像应用,包括从6位到24位每个像素的数据格式。

在发送端,数据由本层被发送到LLP层(Low Level Protocol)前,本层将应用层传来的数据由像素打包成字节数据;

在接收端,执行相反过程,将LLP层发来的数据解包,由字节转成像素,然后才发送到应用层。8位每像素的数据在本层被传输时不会被改变。

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所示。

图2

信号描述如下

名称描述

DATA1+/DATA1-MIPI协议组包生成的差分模拟数据信号第1组

DATA2+/DATA2-MIPI协议组包生成的差分模拟数据信号第2组

CLOCK+/CLOCK-协议组包生成的差分模拟时钟信号

SCL/SDAIIC控制通道

在典型的应用中发送端在完成对图像的各种处理后,按照协议对数据进行打包,然后通过差分信号线向接收端传输信号,差分信号线一般有一对时钟差分线和多对数据差分线,数据差分信号线的数量与需要传输的数据量的要求有关,数据量越大多对数据线能更容易满足链路的需求。一般情况下两百万到五百万像素的手机使用两对差分数据线,即两个数据通道。而当摄像头像素进一步提高到八百万甚至一千三百万时一般会使用四个数据通道,即四对差分数据线。

与外部进行控制信号交互时,采用的是I2C接口,在MIPI的发送端使用的是I2C从端的IP,MIPI CSI-2接口的控制寄存器连接I2C的从端,这样外部接收装置可以通过I2C去配置MIPI发送端的内部寄存器,以此改变MIPI CSI-2接口内部状态机的持续时间和最后输出数据时的通道数,又或者在调试过程中读出这些寄存器,去做相应的检查,以判断发送端的工作状态,再通过接收端的现象来分析发送端是否工作在正常的状态。

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序列隔开,如图所示。

LLP包有两种:长包和短包。每个包的传输以SoT(start of transmission)开始,EoT(end of transmission)结束,中间间隙是LPS(Low Power State低功耗状态)。

5.1    MIPI CSI2的长包格式

MIPI CSI2的长包主要有包头、数据包和包尾三部分构成。而包头又可细分为:数据标识(data identifier)、数据包大小(word count)和错误校验码(ECC)构成如下图所示。

其中,数据标识大小为1字节,包含虚拟数据通道号[7:6]和数据类型[5:0]。

数据包大小为2字节,其内容为传送数据的长度,以“字”为单位。

错误校验码大小为1字节,负责对数据包的传输错误进行检查及纠错。

数据包可以传送数据的大小为0~65535字节。

包尾大小为2字节,是数据负荷的检查和。

5.2    MIPI CSI2的短包格式

与长包相比,短包没有数据包和包尾。数据标识DI中的数据类型在0x00到0x0F之间。WC字段是短包的数据域,这个数据可由用户定义。ECC采用的是Hamming Code的方式,能对1bit错误进行纠错,2bit错误进行检查,如下图所示。

短包只是将长包中的WC的位置作为包的数据域,也就是说,短包每次最多只能发两个字节的数据。和长包一致,同样需要先发LSB,再发MSB。应当注意的是,短包一般是用来发送同步控制信号的,一般不建议使用短包来发送用户数据。

同步信号的类型如下:

而当Data Type为0x08到0x0F时,则为Generic Short Packet Code,即可发送用户自定义数据。

比如下面的例子,短包发帧同步信号,长包发数据。

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_inI200M输入参考时钟

resetI复位,高有效

mipi_phy_if_clk_hs_n mipi_phy_if_clk_hs_pIHS链路差分时钟

mipi_phy_if_clk_lp_n mipi_phy_if_clk_lp_pILP链路差分时钟

mipi_phy_if_data_hs_n mipi_phy_if_data_hs_pIHS链路差分数据

mipi_phy_if_data_lp_n mipi_phy_if_data_lp_pILP链路差分数据

m_axis_video_aclkI视频输入时钟

m_axis_video_aresetnI视频输入复位,低有效

m_axis_video_treadyI视频输入准备信号

m_axis_video_tuserO视频输出的帧开始

m_axis_video_tlastO视频输出行结尾

m_axis_video_tvalidO视频输出数据有效

m_axis_video_tdataO视频输出数据

6.2    模块分析

程序接口如下图,主要由三个模块组成:

解串模块(csi_rx_4_lane_link)

协议解析模块(csi_rx_packet_handler)

RAW10bit(csi_rx_10bit_unpack)生成模块

IP

IP层次

IP顶层模块

IP输出接口时序

6.2.1    解串模块

解串模块主要完成字节对齐和字对齐,程序结构框图如下图所示。

csi_rx_hs_clk_phy:

dphy_clk:输入查分时钟

reset : 输入复位

ddr_bit_clock : 输出单端时钟

ddr_bit_clock_b : 输出反向单端时钟

byte_clock : 输出字节时钟频率为输入频率的1/4

csi_rx_clock_det:检测外部时钟是否稳定:等待参考时钟稳定200个时钟周期,并且byte_clock时钟稳定3个时钟释放复位。

csi_rx_idelayctrl_gen:idelayctrl配合idelay使用

csi_rx_hs_lane_phy:抖动补偿和串化

通过控制延时,使得CLK和经过IBUFDS的BitClk对齐,从而消除IBUFIO和BUFR还有net的延时。这样所有的输入信号都只经过了一个IBUFDS,延时相等。对Idelay的控制,可以手动调节,也可以用自动算法。

csi_rx_byte_align:对齐某一字节,相当于找同步字

csi_rx_word_align:将不同通道之间的字节对齐到某一个字

6.2.2    协议模块

csi_rx_packet_handler,解析数据协议,根据协议解出vsync_out,Line_valid,里面包括长短包判断,ECC校验产生valid等。

6.2.3    RAW 10bit生成模块

csi_rx_10bit_unpack:解包为RAW 10bit,如果是8bit则不需要此模块

6.3    实例应用

本次实例是应用于xlinx 的xc7z035ffg676上,开发环境为vivado 2017.4。

6.3.1    硬件结构框图

硬件结构框图如下:主要包括MIPI接口的解码,外设IIC配置sensor,GPIO复位外部Sensor。

6.3.2    IIC配置

Main函数里面:先进性IIC初始化,GPIO初始化,进行复位,然后配置Sensor配置。

6.3.3    实验结果

可以看到成功解串出来数据。

7    参考链接

D-PHY Layout参考:https://zhuanlan.zhihu.com/p/92682047

CSI-2参考:https://blog.csdn.net/u011652362/article/details/81741134

MIPI入门:

https://blog.csdn.net/l471094842/article/details/95619198?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1

附:资料获取

资料包

文档

github源码

本工程源码

获取资料方法一:集赞

关注小编公众号后,将本文转发至朋友圈,集齐6个赞,截图发送到后台,小编会在24小时之内回复。备注:【领取MIPI资料】即可领取资料

获取资料方法二:转发群

关注小编公众号后,将本文转发至不低于100人的群(相关行业),截图发送到后台,小编会在24小时之内回复。备注:【领取MIPI资料】即可领取资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343