来源:公众号:Hack电子 版权归作者所有

MIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写,是MIPI联盟发起的为移动应⽤处理器制定的开放标准。MIPI采⽤高速串行接口传输数据,满⾜高分辨率摄像头的传输需求,采用串行接口方便PCB布局布线,提高信号完整性,也有利于减小PCB面积。MIPI接口的摄像头一般体积较小,适合于小型的嵌入式设备,比如手机和行车记录仪等,同时也广泛应用到AI端上推理设备。本文以百度的端上推理设备EdgeBoard作为原型来介绍MIPI相关技术的开发。如果用户购买EdgeBoard,出厂的镜像中带有MIPI的功能,只需再购买推荐的MIPI摄像头,即可实现即插即用。

MIPI介绍

MIPI接口分为两类,一是DSI (Display SerialInterface),提供处理器和显示模组之间的高速串行接口;二是CSI (Camera Serial Interface),提供处理器和摄像模组之间的高速串行接口。本文将要介绍的是CSI-2。

MIPI信号采用低压差分信号进行传输,具有传输速率快,抗干扰能力强的特点。MIPI的传输模式分为低速信号模式和高速信号模式,低速信号用于控制命令(10 MHz),高速信号用于数据传输(80Mbps -1Gbps/lane)。时钟处于非连续工作状态,根据传输状态进行时钟的切换,这样可以极大地降低功耗。关于D-PHY可参考MIPI® Alliance Specification for D-PHY。

MIPI最多可支持4通道数据,同时配有IIC总线进行配置,收发接口如下图:

MIPI协议也是采用类似于以太网协议结构,采用分层设计的思想,分为PHY Layer,Protocal Layer和Application Layer。

MIPI传输的报文中定义了图像数据的类型/格式(Data type),这些类型/格式方便在调试的时候确定链路是否工作正常,常用的Data Type如下图,比如YUV的数据格式的标示符是0x18到0x1F,期间的数值定义了具体的格式,比如YUV422,YUV444等,具体可参考MIPI Alliance Specification for CameraSerial Interface 2。

硬件相关

MIPI 电平

MIPI的电平标准分为LP (Low Power)模式和HP(High Power)模式,LP模式下高电平最大值1.3V,最小1.1V,典型值为1.2V,HP模式下共模电平200mv,摆幅200mV。

D-PHY

1、Ultrascale系列的FPGA使用MIPI_PHY_DCI 的电平,digitalcontrol impedence,如果是mipi的数据率很高时,比如lane rate高于1000Mbps,需要开启100R的termination。

2、如果使用K7系列的芯片,由于其不支持MIPI_PHY_DCI电平,可以通过LVDS电平转换而来,可以参考Xilinx的官方文档D-PHY solutionsXAPP894,提供了完整D-PHY层的解决方案。

Note1:对于Vivado 2018.2以下的版本,如果MIPI线速率很高,比如1500Mbps,需要在xdc约束文件中添加termination约束,针对Ultrascale芯片,做以下操作:

MIPI引脚分配和BANK电压

1. EdgeBoard中使用的是Xilinx Ultrascale+系列的MPSoC,MIPI 的IO必须放置在HP Bank。

2. MIPI_PHY_DCI的电平对Bank的要求苛刻,Bank的VCCO必须设定为1.2V,同时BANK的VREF推荐端接240R。如果Bank中有其他电平标准,比如1.8V的电平,在implementation过程中会报错。

3. MIPI-CSI-RX IP带有Pin assignment的功能,可进行引脚分配的验证,参考后文的MIPI IP 配置。

Layout

D-PHY的标准规定总的传输延迟不能超过2 ns,对应到FR4材质的PCB最大的走线长度是25cm到30cm,包括从发送端到接收端,这决定了MIPI支持的传输距离在30cm左右,参考AN-1337D-PHY。同时PCB走线必须匹配100欧姆的端接。

EdgeBoardMIPI

EdgeBoard的MIPI最多支持4通道,可以根据需要选择性使用,用户通过排线与EdgeBoard连接即可,注意排线不要过长,最好小于10cm。

开发

Vivado

Vivado工具中的视频IP也是在逐步开发完善中,其中难免会遇到各种意想不到的bug,不过好在Xilinx的官方论坛维护地很好,只要发帖提问,短时间内就会得到专门技术人员的回答,同时针对出现的Bug,Xilinx官方也会定期发布相应的patch,Video论坛中积攒的各种帖子也为后续的开发者提供了解决问题的途径。

1. 如果使用2017版本的Vivado,MIPI CSI RX IP不能处理MIPI镜头时钟缺失的问题,参考AR70581。解决该问题,参考AR70530打patch,patch打成功之后,在Vivado软件界面提示AR70530。如果使用2018之后的版本,则不存在这个问题,不需要打patch。

2. MIPI-CSI-RX license 需要购买才能使用,功能验证阶段可以在Xilinx官网申请Evaluation license,但是用evaluation license生成的bit文件,会间歇性停止工作,无法用到真正的产品里面。

License申请参考下文申请Xilinx Evaluation License

3. Github也有开源的MIPI CSI2 IP,该IP针对Xilinx 7 Series FPGA,可以支持到4K的分辨率,采用VHDL开发,但仅支持4通道的MIPI摄像头。

4. 推荐使用2018.3及以上的版本进行MIPI的开发。

MIPI IP的配置

1. 根据MIPI摄像头的参数进行基本的设置,主要包括颜色格式、通道数、线速率等。其中线速率最好高于MIPI摄像头的速率,在MIPI IP的内部有一个FIFO缓冲数据,MIPI IP读出速率高于MIPI镜头的写入速度,可以确保不丢帧。

2. 在硬件设计之前就需要进行引脚验证,由于MIPI对于引脚要求相对苛刻,谨慎为好。

MIPI 后续处理IP

前面的MIPI IP只是负责从前端摄像头拿到数据,还需要其他IP进行后续的处理才能得到完整的视频。

Demosaic

也称之为interolation,通过相邻像素的色彩经过插值算法构建出一副标准色彩的图像,实现Bayer到RGB的转换。

摄像头的感光sensor输出的每个像素不是标准的RGB,每个像素只是三原色中的一种,后期通过插值算法恢复出RGB标准颜色,该方法由柯达科学家Bayer博士提出,该方法被称之为Bayer滤色。

感光sensor内部带有color filter array(滤色镜),通过放置不同的原色的filter过滤出单个像素的颜色,每个像素是单个的色彩(RGB中的一种),也称之为RAW数据,后端ISP中通过插值算法恢复到标准的RGB。下图是两种滤色方法,一种是RGB,一种是CMY(印刷四分色模式)。

NOTE:使用Demosaic IP时,需要制定sensor的左上角的第一个像素是什么颜色,不同的sensor起始像素颜色不同。在Demosaic的 BAYER_PHASE (0x0028) Register 中进行设定,参考文档SensorDemosaic。

IP 配置如下:设定每个时钟的像素个数,像素数据宽度以及分辨率。

Gamma Correcttion

Gamma矫正的目的是将线性亮度信号或者RGB编码矫正成适合显示器显示的非线性数据。IP使用Gamma LUT,该IP免费,具体配置见下图。

Video Process Subsystem

Video process subsystem IP具有视频处理的多种功能,针对MIPI可以使用color space conversion,实现YUV444或者RGB色彩的矫正,提升视觉效果。

注:以上的IP设置均基于Vivado 2017.4版本,2018及以上版本会略有不同,根据我们的开发经验,推荐使用2018.3版本。

EdgeBoardMIPI摄像头数据流

EdgeBoard中MIPI摄像头数据流如下图,当用户购买EdgeBoard后,然后搭配我们推荐的MIPI摄像头,即可做到即插即用。

关键寄存器

Xilinx MIPI IP和D-PHY对于开发者来说是黑盒子,如果开发中遇到问题,只能通过寄存器的方式来跟踪问题,现介绍一些关键的寄存器。通过跟踪这些寄存器的状态,可以定位排查问题。

D-PHY关键寄存器

首先是判断D-PHY的工作状态,在MIPI IP设置中需要Enable D-PHY Register Interface。

1. Control Register

1. 查看D-PHY是否已经使能

2. CL_STATUS Register(CL -> Clock Lane)

1. 查看clock lane是否处于stop状态

2. 查看通道是否完成初始化

3. 查看工作模式

3. DL_STATUS Register (DL -> Data Lane)

1. 查看data lane是否处于stop状态

2. 查看通道是否完成初始化

3. 查看工作模式

CSI2-RX 关键寄存器

1. Core Configuration Register

1. Enable core

2. Protocal Configuration Register

1. Lane number:硬件没问题的话,可以看到MIPI摄像头使用的通道数

3. Core Status Register

1. 统计收到的packet

4. 查看FIFO是否满,如果数据及时读出,是不会出现满的情况

5. Interrupt Status Register

1. 这是排查问题的重要寄存器,各种问题引起的中断都会写入到该寄存器中

6. 如果出现ECC的错误,大概率是硬件信号完整性问题

7. Generic short Packet Register

1. 查看图像格式,在该寄存器能看到对的Data Type,基本可以说明硬件设计没问题

8. Clock Lane Information Register

1. 查看 clock的工作状态

9. Lane Information Register

1. 查看每个lane的工作状态,每个lane不是始终处于工作状态,也会处于inactive状态

附:申请Xilinx Evaluation License

1. 首先需要有一个Xilinx官方账号,然后进入到Evaluation License网址进行申请,申请界面如下:

2. 点击search now,输入mipi关键字,勾选MIPI RX

3. EvaluationLicense需要绑定主机的MAC地址,点击 GenerateNode-Locked License,然后设置需要绑定的MAC地址

4. 很快在个人注册的邮箱里会收到Xilinx官方发布的lic文件,将其导入到Vivado工具即可。

NOTE:EvaluationLicense仅限于测试MIPI IP和MIPI摄像头的工作状态,不可用于发布产品,其内部带有计数器,连续使用几小时后会停止工作。

快速掌握MIPI开发攻略相关推荐

  1. DAVINCI DM3730开发攻略——开发环境篇

    深圳的春天,梧桐山上绿意浓浓,山花醉人香,蜂蝶采蜜忙!现在只能在山上看到这些生机勃勃的景象了,山下的水污染完了,空气也不咋样.但相对北方的兄弟姐妹长期生活在灰霾和沙尘的环境,这里也很难得了,地下水的污 ...

  2. 2019-1-30手把手教你怎么用AbaqusGUI二次开发攻略

    2019年1月30日13:05:51 手把手教你怎么用Abaqus进行GUI二次开发攻略 1.前言: 最近研究了下GUI二次开发,做了如下几个插件,学到了一些东西特地就跟大家做个分享,其中插件注册到了 ...

  3. 软件开发攻略技巧 西安尚学堂

    很多人在学习软件开发时很兴奋,为这即将踏入高薪的门槛兴奋不已.孰知软件开发行业水深似海,对于新入门的小白,没练几手,很容易被淹没那大"大海"里. 软件开必,顾名思义,是用电脑的语言 ...

  4. 图像识别DM8127开发攻略——KERNEL的移植说明

    图像识别DM8127开发攻略--KERNEL的移植说明 接上一篇<图像识别DM8127开发攻略--UBOOT的移植说明>的步伐,DM8127开发攻略最后一篇文章是有关Kernel的裁剪移植 ...

  5. Davinci DM6446开发攻略——LINUX GPIO驱动源码移植

    一.             DM6446 GPIO的介绍 说到LINUX 驱动移植,没有移植过的朋友,或刚刚进入LINUX领域的朋友,最好去看看<LINUX 设备驱动程序>第三版,有个理 ...

  6. 图像识别DM8127开发攻略——开发环境搭建

    经过两年多的爆炸性出货(针对我们这种小公司),目前稍微停顿了一下,现在难得有点时间继续写自己的博客,其实自己一直想静下心来做点东西,可惜做TI DAVINCI(ARM+DSP)这方面的人不太好招,本人 ...

  7. TI Davinci DM6446 开发攻略(序)

    2010新年伊始,随着自己设计的嵌入式图像监控产品和DM6446开发板出台,不知不觉走上新的开发历程,这多少让人有些激动,毕竟是自己主导的产品设计,涉及到项目管理.LINUX.DSP的程序设计,硬件设 ...

  8. Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写

    很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot ...

  9. TI Davinci DM6446开发攻略——开发环境搭建

    TI DAVINCI DM6446的开发环境搭建不像三星S3C2410,S3C2440,ATMEL的AT91SAM9260之类的单核ARM那么简单,因为DM6446还有DSP端的开发环境,以及双核之间 ...

最新文章

  1. OpenMP用法大全
  2. 一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(4)--控件属性功能区...
  3. 双十一变身大型奥数竞赛现场?数学不好的你请转场
  4. Windows编程—BroadcastSystemMessage函数详解
  5. 4.2第一个窗口程序
  6. Linux下2号进程的kthreadd--Linux进程的管理与调度(七)
  7. Java工程师学习指南
  8. python零基础怎么学英语最快_零基础如何快速成为Python高手
  9. 湖南省中职学业水平考试复习试题(计算机三)
  10. linux操作之nfs服务搭建
  11. Python 100道基础入门练习题(附答案)【这期完结】
  12. 基于Java(JSP)+MySQL实现盐鱼二手物品交易网站【100010280】
  13. maven 多模块项目如何导入其他模块的第三方 jar 包
  14. android手机软件安装位置,改变Android手机软件安装位置方法
  15. TP50 TP90 TP95 TP99 TP999 TP9999
  16. modbus调试工具 linux,Modbus TCP的模拟器的Windows/Linux的
  17. 什么是弹性云服务器?
  18. 实习生风采 · 贰 | 张倬胜同学:攻关「孟子」轻量化预训练模型
  19. sublime text 3经典颜色主题-Soda
  20. 品牌升级后,TBase更名为TDSQL和TDSQL-A,CynosDB更名为TDSQL-C

热门文章

  1. 10本书给你计算机大师思维
  2. 自考计算机专业考试科目有哪些 主要学什么
  3. Unity3D开发HTC VIVE项目中插件HTC.Input.Utility.Plugin插件的运用
  4. 电脑自动开关机软件测试,电脑无故自动关机
  5. 笔记本电脑键盘颜色不切换及control center打不开问题解决方法
  6. 如何运用DDD(一):值对象
  7. AUV控制中的反步法
  8. 计算机科技英语写作,科技英语阅读与写作
  9. win10摄像头无法使用(呈现灰色界面)解决问题
  10. android手机量体温,手机体温测试仪软件