欲观原文,请君移步

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

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

名称 描述
应用层 即是处理原始图像数据的各种算法模块
组包/解包层 负责将数据按照一定的次序,切割成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所示。

信号描述如下

名称 描述
DATA1+/DATA1- MIPI协议组包生成的差分模拟数据信号第1组
DATA2+/DATA2- MIPI协议组包生成的差分模拟数据信号第2组
CLOCK+/CLOCK- 协议组包生成的差分模拟时钟信号
SCL/SDA IIC控制通道

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

与外部进行控制信号交互时,采用的是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_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)生成模块

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 参考链接

  1. D-PHY Layout参考:https://zhuanlan.zhihu.com/p/92682047
  2. CSI-2参考: https://blog.csdn.net/u011652362/article/details/81741134
  3. MIPI入门:

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

附:资料获取

获取资料方法一:集赞

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

获取资料方法二:转发群

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

最新文章

  1. Centos 7.0 安装Mono 3.4 和 Jexus 5.6
  2. 关于ubuntu16无线网卡RTL8723BE频繁掉线及信号不足的解决办法
  3. 简单了解.net
  4. 关于script,first,second,third=argv运行出错的问题
  5. codevs1380 没有丧尸的舞会
  6. Egret的若干局限
  7. virtualBox使用nat模式下ssh连接
  8. USER-AGENT是什么
  9. python模块的打包setuptools
  10. ecshop开发帮助
  11. Android Studio Gradle依赖冲突
  12. Java 使用RMI
  13. Oracle课程档案,第十五天
  14. 过滤器中获取form表单或url请求数据
  15. linux & windows下重启oracle
  16. 解决sklearn 随机森林数据不平衡的方法
  17. 解释#ifdef ALLOC_PRAGMA代码段的原理
  18. 教你如何阅读Oracle数据库官方文档
  19. mysql子查询批量找id最大的
  20. 【转】Android UI开发第三十一篇——Android的Holo Theme

热门文章

  1. ES6,ES7,ES8 常用
  2. MYSQL8 常用操作
  3. 黑马vue学习的总结,vue笔记
  4. java基础(反射,注解,多线程,juc)
  5. mybatis随记
  6. Git基本操作命令合集
  7. F. Machine Learning 带修端点莫队
  8. POJ1905
  9. Springboot 关于日期时间格式化处理方式总结
  10. 使用net Manager工具远程连接Oracle配置监听