精华内容
下载资源
问答
  • 1.MIPI Alliance Specification for D-PHY. 2.DRAFT MIPI Alliance Specification for Camera Serial Interface 2 (CSI-2). 具体规定我没细看,估计不是固定的。 有的时候输出的是,全0或者全1,等于{8{!Byte N-1[7]...

    重点看下面的这两个手册
    1.MIPI Alliance Specification for D-PHY.
    2.DRAFT MIPI Alliance Specification for Camera Serial Interface 2 (CSI-2).
    具体规定我没细看,估计不是固定的。
    有的时候输出的是,全0或者全1,等于{8{!Byte N-1[7]}}或者{8{Byte N-1[7]}},与最后一个传输字节的最高位有关。
    另外,可能,不同的MIPI发送端,在手册允许范围内,规定的值不一样吧。

    重点====》EOT结尾标记为最后一位bit取反,一直保持这种状态,到LP11. MIPI 图片信息已可以正常采集。

    目录篇地址:http://blog.chinaaet.com/justlxy/p/5100052503 

    为了方便理解后面的内容,首先介绍几个DSI协议文档中定义的缩写(Acronyms):

    • AM,Active Matrix(Display Technology)

    • ASP,Application Specific Protocol

    • BLLP,Blanking or Low Power Interval

    • BPP, Bit Per Pixel

    • BTA,Bus Turn-Around

    • HBP,Horizontal Back Porch

    • HFP,Horizontal Front Porch

    • HSA,Horizontal Sync Active

    • HSE,Horizontal Sync End

    • HSS,Horizontal Sync Start

    • VSA,Vertical Sync Active

    • VSE,Vertical Sync End

    • VSS,Vertical Sync Start

    顺带讲解一下,所谓垂直同步(Vertical Sync),就是用来表示一帧(Frame)图像的起始的,有的时候也会被称为场同步;而水平同步(Horizontal Sync),则是用来表示一行像素点(即一帧图像中的一行)的起始的,有的时候也会被称为行同步。

    DSI的分层结构图如下图所示:

    Untitled.png

    可以发现,除了应用层,其他的几层基本上和基于D-PHY的CSI-2协议保持一致。而一个简化的DSI的收发接口模型如下:

    image.png

    该模型基本上也是和CSI-2一致的,区别在于DSI协议中不存在CCI,且Data Lane0可以是双向的(Bidirectional),原因已经在前面的文章中说过了,这里就不在废话了。

    关于Low Level Protocol层和Lane Management层的相关介绍,在CSI-2的文章中就已经讲过了,由于DSI基本和CSI-2保持一致,所以也不再介绍了,两篇文章分别为:

    http://blog.chinaaet.com/justlxy/p/5100052472(其中介绍了Low Level Protocol层)

    http://blog.chinaaet.com/justlxy/p/5100052471(其中介绍了Lane Management层)

    与CSI-2相比,DSI还支持HS模式下的多包发送模式,即在一对SoT和EoT之间可以发送多个包(长包或短包均可),如下图所示:

    image.png

    为了增强系统的鲁棒性,从MIPI DSI v1.02版本开始,在EoT之前加入了EoTp短包,用于表示HS模式传输即将结束。同时,为了兼容以前的DSI版本,DSI设备应有能力选择使能或者禁止EoTp功能。当选择使能EoTp功能之后,上面的传输例子变为了:

    image.png

    即在EoT之间插入了一个叫做EoTp的短包(无论是Separate传输模式还是Single传输模式)。与其他的短包不同,EoTp作为一个特殊的短包,有着固定的格式,如下:

    image.png

    应当注意的是,即使连接中存在着多个虚拟通道(Virtual Channel),EoTp仍应当保持上面的格式,即DI[7:6]=2'b00。

    这里在强调一遍,DSI协议规定(和CSI-2保持一致):所有的数据(包括,长包,短包,Entry Code等)都应当先发低字节,在发高字节;在一个具体的字节中,应当先发低位,再发高位!!!!!!

    此外,DSI协议中还定义了两种特殊的包:Null Packet和Blanking Packet。并且Null Packet和Blanking Packet是且只能是长包。其中,Null Packet是一种为了是Data Lane保持在HS模式下的机制,此时Data Lane并没有发送有效数据的任务,所以让他发送Null Packet(即无效数据,Dummy Data)。相比于Null Packet,Blanking Packet就未必发的是无效数据了,其中有可能(注意是有可能!)会发送一些同步事件(Sync Event)包,当然,大部分时间,Blanking Packet中的内容也是空的。Blanking Packet主要是用来携带一些同步时序信息的,具体来说,就是用来表示Video Mode下的DSI接口,两个扫描行之间的周期的。有的时候,时间充足的话(即两个扫描行之间的间隔时间足够长),设计者也可以是Data Lane进入LP模式(LP11)。通常我们将Blanking Packet和该种情况下进入的LP模式统称为BLLP,即前面所提到的Blanking or Low Power interval。

    展开全文
  • 基于IMX214+ZYNQ 双目MIPI模块 FL0214模块 双目视觉智能平台方案 一、双目视觉智能平台概述 双目视觉智能平台以双路CMOS传感器IMX214+XC7Z100FPGA为基础,支持双路1080P60fs视频输入,...

    基于IMX214+ZYNQ 双目MIPI模块   FL0214模块 双目视觉智能平台方案

    一、双目视觉智能平台概述

            双目视觉智能平台以双路CMOS传感器IMX214+ XC7Z100 FPGA为基础,支持双路1080P 60fs视频输入, ZYNQ FPGA 支持FPGA预处理和双ARM计算。软件支持双目摄像头采集及QT图像显示,ARM接口管理及丰富的图像处理软件。

    二、硬件资源1 FMC 双目MIPI模块FL0214

            FMC 双目MIPI模块FL0214为MIPI接口的2路1300万像素的CMOS摄像头模块。 FL0214模块带有2个MIPI接口的摄像头模组,摄像头模组采用的是索尼(SONY)公司的CMOS感光芯片IMX214,摄像头最高分别率为4224(水平)x3120(垂直)。摄像头的MIPI信号通过MC20901芯片转换为LVDS信号到FMC接口供FPGA采样。

            模块有一个标准的LPC的FMC接口,用于连接FPGA开发板, FMC的连接器型号为:ASP_134604_01

            FL0214模块实物照片如下:

    双目视觉,智能平台,IMX214+ZYNQ XC7Z100 ,双目摄像头采集,图像处理,FMC 双目MIPI模块,摄像头模组,CMOS感光芯片, XC7Z100,IMX214

                            FL0214模块实物图

    2.1 FL0214模块的参数说明

            以下为FL0214 双目MIPI摄像头模块的详细参数:

    • CMOS感光芯片:SONY IMX214
    • 输出分别率:13Mega-Pixel (4208 × 3120)@30fps,4K2K@30fps, 1080p@60帧;
    • 图像输出格式:RAW10/8, COMP8/6;
    • 调焦距离:10CM ~ 无穷大
    • 调焦方式: 电机马达自动调焦;
    • 可视角度:80.7° ± 3° (Diag)
    • 摄像头输出:CSI-2串行数据输出(MIPI 4 Lane, 兼容D-PHY标准V1.1)
    • 摄像头配置接口:I2C;
    • MC20901驱动芯片:电平转换(MIPI D-PHY->LVDS):
    • 工作温度:-20°~65°;

       关于IMX214摄像头和MIPI D-PHY芯片的电路具体参考设计请参考摄像头的资料和芯片手册。

    2.4模块FMC LPC的引脚分配:

            下面只列了电源和接口的信号,GND的信号没有列出,具体用户可以参考原理图。

    Pin Number

     Signal Name

    Description

    C35

    +12V

    12V电源输入

    C37

    +12V

    12V电源输入

    D32

    +3.3V

    3.3V电源输入

    C34

    GA0

    EEPROM地址位0位

    D35

    GA1

    EEPROM地址位1位

    D9

    CSI1_CMOS_LP_CLK_N

    第一路摄像头CMOS时钟负极输出

    D8

    CSI1_CMOS_LP_CLK_P

    第一路摄像头CMOS时钟正极输出

    G16

    CSI1_CMOS_LP0_N

    第一路摄像头CMOS LANE0数据负极输出

    G15

    CSI1_CMOS_LP0_P

    第一路摄像头CMOSLANE0数据正极输出

    G13

    CSI1_CMOS_LP1_N

    第一路摄像头CMOS LANE1数据负极输出

    G12

    CSI1_CMOS_LP1_P

    第一路摄像头CMOSLANE1数据正极输出

    G19

    CSI1_CMOS_LP2_N

    第一路摄像头CMOS LANE2数据负极输出

    G18

    CSI1_CMOS_LP2_P

    第一路摄像头CMOSLANE2数据正极输出

    G10

    CSI1_CMOS_LP3_N

    第一路摄像头CMOS LANE3数据负极输出

    G9

    CSI1_CMOS_LP3_P

    第一路摄像头CMOSLANE3数据正极输出

    G7

    CSI1_LVDS_CLK_N

    第一路摄像头LVDS时钟负极输出

    G6

    CSI1_LVDS_CLK_P

    第一路摄像头LVDS时钟正极输出

    H14

    CSI1_LVDS_HS0_N

    第一路摄像头LVDS LANE0数据负极输出

    H13

    CSI1_LVDS_HS0_P

    第一路摄像头LVDS LANE0数据正极输出

    H11

    CSI1_LVDS_HS1_N

    第一路摄像头LVDS LANE1数据负极输出

    H10

    CSI1_LVDS_HS1_P

    第一路摄像头LVDS LANE1数据正极输出

    H17

    CSI1_LVDS_HS2_N

    第一路摄像头LVDS LANE2数据负极输出

    H16

    CSI1_LVDS_HS2_P

    第一路摄像头LVDS LANE2数据正极输出

    H8

    CSI1_LVDS_HS3_N

    第一路摄像头LVDS LANE3数据负极输出

    H7

    CSI1_LVDS_HS3_P

    第一路摄像头LVDS LANE3数据正极输出

    G21

    CSI1_OTP_B

    第一路摄像头编程接口

    D26

    CSI1_RST_N

    第一路摄像头复位信号输入

    D21

    CSI2_CMOS_LP_CLK_N

    第二路摄像头CMOS时钟负极输出

    D20

    CSI2_CMOS_LP_CLK_P

    第二路摄像头CMOS时钟正极输出

    G34

    CSI2_CMOS_LP0_N

    第二路摄像头CMOS LANE0数据负极输出

    G33

    CSI2_CMOS_LP0_P

    第二路摄像头CMOSLANE0数据正极输出

    G28

    CSI2_CMOS_LP1_N

    第二路摄像头CMOS LANE1数据负极输出

    G27

    CSI2_CMOS_LP1_P

    第二路摄像头CMOSLANE1数据正极输出

    G37

    CSI2_CMOS_LP2_N

    第二路摄像头CMOS LANE2数据负极输出

    G36

    CSI2_CMOS_LP2_P

    第二路摄像头CMOSLANE2数据正极输出

    G25

    CSI2_CMOS_LP3_N

    第二路摄像头CMOS LANE3数据负极输出

    G24

    CSI2_CMOS_LP3_P

    第二路摄像头CMOSLANE3数据正极输出

    C23

    CSI2_LVDS_CLK_N

    第二路摄像头LVDS时钟负极输出

    C22

    CSI2_LVDS_CLK_P

    第二路摄像头LVDS时钟正极输出

    H29

    CSI2_LVDS_HS0_N

    第二路摄像头LVDS LANE0数据负极输出

    H28

    CSI2_LVDS_HS0_P

    第二路摄像头LVDS LANE0数据正极输出

    H26

    CSI2_LVDS_HS1_N

    第二路摄像头LVDS LANE1数据负极输出

    H25

    CSI2_LVDS_HS1_P

    第二路摄像头LVDS LANE1数据正极输出

    H32

    CSI2_LVDS_HS2_N

    第二路摄像头LVDS LANE2数据负极输出

    H31

    CSI2_LVDS_HS2_P

    第二路摄像头LVDS LANE2数据正极输出

    H23

    CSI2_LVDS_HS3_N

    第二路摄像头LVDS LANE3数据负极输出

    H22

    CSI2_LVDS_HS3_P

    第二路摄像头LVDS LANE3数据正极输出

    C27

    CSI2_OTP_B

    第二路摄像头编程接口

    D27

    CSI2_RST_N

    第一路摄像头复位信号输入

    D14

    FMC_CSI1_SCL

    第一路摄像头IIC总线时钟

    D15

    FMC_CSI1_SDA

    第二路摄像头IIC总线数据

    H37

    FMC_CSI2_SCL

    第二路摄像头IIC总线时钟

    H38

    FMC_CSI2_SDA

    第二路摄像头IIC总线数据

    C34

    GA0

    EEPROM的I2C地址0

    D35

    GA1

    EEPROM的I2C地址1

    C30

    SCL

    EEPROM的I2C时钟

    C31

    SDA

    EEPROM的I2C数据

    G39

    VADJ

    VADJ电源输入

    H40

    VADJ

    VADJ电源输入

    三、 硬件资源2-基于XC7Z100 的图像处理底板

    1.1主要性能和优势

    • 使用 Zynq-7000 SoC 对嵌入式应用进行快速原型设计以实现优化
    • 硬件、设计工具、 IP、以及预验证参考设计
    • 演示嵌入式设计,面向视频通道
    • 存储接口
    • 1GB DDR3 组件存储
    • 1GB DDR3 SODIM 存储器
    • 支持包含 Dual ARM Cortex-A9 核处理器的嵌入式处理
    • 使用 10-100-1000 Mbps Ethernet (RGMII​) 开发网络应用
    • 使用 HDMI 输出实现视频显示应用
    • 扩展 I/O, 包含 FPGA Mezzanine Card (FMC) 接口

     四、 软件资源

    软件支持:

    • 支持从microSD 卡加载ubuntu系统
    • 支持利用QSPI模式配置程序
    • 支持RS232连接计算机串口通信
    • 支持外接HDMI连接显示器,并支持键盘,鼠标等外接设备进行演示
    • 支持Msata存储设备,支持高速数据存储功能 (SATA存储单独定制开发)
    • 平台引入了Xilinx公司最新的SDSoC™ 开发工具,提供了嵌入式C/C++ 应用开发体验,包括了Eclipse IDE和完整的设计环境,支持Zynq® All Programmable SoC开发,同时集成了Vivado设计环境。
    • FMC上接高速ADC,DAC子卡,CameraLink子卡等,进行功能扩展以及客户的定制需求,并可提供演示程序

     

    教程不断更新:

    • 开发板简介和检测
    • ZYNQ简介
    • Vivado开发环境
    • PL的“Hello World”LED实验
    • HDMI输出实验
    • PL端DDR3读写测试实验
    • GTX收发器误码率测试IBERT实验
    • 体验ARM,裸机输出“Hello World”
    • PS点亮PL的LED灯
    • 以太网实验(LWIP)
    • 自定义IP实验
    • 使用VDMA驱动HDMI显示
    • 固化程序
    • 安装虚拟机和Ubuntu系统
    • Ubuntu安装Linux版Vivado软件
    • 使用SDK开发Linux程序
    • Linux下GPIO实验
    • Linux下的HDMI显示
    • 使用Debian8桌面系统
    • QSPI 和EMMCE启动Linux

    五、 双目视觉案例

            在VIVADO软件开发环境里下载双目测试例程到开发板,我们可以通过开发板的HDMI输出接口显示双目的视频图像到HDMI显示器上,

     

    展开全文
  • 这次分享一个在Xilinx FPGA实现MIPI DPHY接口的案例(包括CIS协议层)。截止目前为止,Xilinx仅在Ultrascale+及其以上版本的FPGA IO可直接支持MIPI 电平输入,其他的,都需要转换成LVDS来接收。在软件支持上,Xilinx...

                                                                                       作者:Hello,Panda

    这次分享一个在Xilinx FPGA实现MIPI DPHY接口的案例(包括CIS协议层)。截止目前为止,Xilinx仅在Ultrascale+及其以上版本的FPGA IO可直接支持MIPI 电平输入,其他的,都需要转换成LVDS来接收。在软件支持上,Xilinx在高版本的Vivado(Vitis)上开放了MIPI DPHY IP,但是这个IP可能用起来有诸多的限制,比如说,不可以动态切换Lane速率、比如说必须是Gated的时钟、比如说所有时钟通道和数据Lane的LP信号都必须接进来占用很多IO等等。所以,熊猫君在这里分享手动撸代码的途径,根据自己的需求想做成啥样就啥样,哪管它格式千奇百怪,另外给大家分享的是,撸这个代码不用怕,真的很简单,熟练一些的三天就成,不太熟练的也就一个星期,毕竟咱们不需要把协议栈的每个边边角角都整出来,够咱用就可以了。好了,不说废话了,咱们以MIPI DPHY CSI为例预备开始,搭建一个MIPI RX摄像头数据的案例!

    一、硬件上的考虑

    之前咱不是介绍过,Xilinx低版本的FPGA上并不能直接支持MIPI DPHY电平标准,因此不能直接就把摄像头接到FPGA的Select IO上,咱得想办法把它变成可以认识的LVDS电平。

    1.1.速率的考虑

    为什么说要考虑速率呢?这里一个是和FPGA内部的资源相关,另外一个是和信号完整性相关。

    FPGA内部的资源是怎么个说法呢?因为是要用到Select IO的Iserdes,因此受IO时钟速率的影响,可以布线到IO的最高时钟在7系列器件里面是BUIO,可以达到800MH(Spartan-6的BUFPLL可能低一些,记得好像是600MHz来着的,有需要的可以自行查证),那么就意味着在7系列FPGA上接MIPI进来最大的Lane速率只能到1600Mbps。

    另外,信号完整性是怎么一个说法呢?咱们这个毕竟是高速信号,对眼图采样窗口什么很看重的,这方面Xilinx很有经验,它给画了一条线:800Mbps,lane速率低于800Mbps的,可以通过电阻网络用很低的成本就把事儿给办了;但是速度高了可不行,采样可能就不正确了,那怎么办呢?就得用专门的level shift芯片将MIPI信号转成LVDS了。

    1.2.使用电阻网络

    这种方法尤其简单,说白了,对接收端来说尤其简单,说白了,就是说你MIPI电平的摆幅很低,那好啊,我把终端电阻加大(150Ω,需要注意的是内部的DIFF_TERM要False掉)一点儿,可以确保差分终端电阻两端的电压够LVDS的裁决门限就行了,这个Xilinx还专门有一个xapp的参考设计,具体编号没有记,有需要可以自行去找DoCNav要。至于低速LP信号,分出来以后要是BANK富裕可以专门搞一个1.2V的bank,如果不富裕,也可以加一个输入阻抗很大的电平转换芯片(比如74LVC1T45)把它转成任意你想要的电平标准,比如1.8V、2.5V或3.3V。那么,整个输入的网络结构就变成了图1这个样子的了。

     

                                                                                       图1 电阻网络结构图

    至于哪些信号要接进来,如果引脚足够多,那么所有LP信号和HS信号都可以接进来,如果不富裕且不需要用到嵌入的低速数据的话,因为咱们的Lane已知,除了HS信号外,将lane0的LP信号接进来用于状态判断就行了。

    低速的适用于大多数分辨率/帧率在1080P60及以下的,比如几乎所有的内窥镜用Sensor,如最常用OV9734;大部分的Sony和安森美的2M监控芯片。

    1.3.使用专门的电平Level shift芯片

    因为基本上MIPI还是用于手机和监控类居多,一般的SoC都支持MIPI直接输入。这方面的电平转换不多,基本上停留在连个方案层次上一个是使用专用芯片,比如说国外的MC20901之类的芯片,另外国内的龙迅也有类似的。

    另外一种就是采用高速的信号buffer/repeater芯片转成LVDS信号,TI有很多种这样的芯片,比如说性能顶尖的DS25BR100(足以满足2.5Gbps MIPI,带均衡和加重的),当然这个性能好意味着高价格,对于速度没有那么高的应用,选稍次一档的也很香,电路结构和图1类似,就是把150Ω电阻的位置换成这个buffer/repeater芯片,输出就直接是LVDS到FPGA了,标标准准的。

    这种方案适合800Mbps~1600Mbps应用场景,除了一些极大靶面或者极高帧率的Sensor外,大多数的一般sensor都包含在内了。

    1.4.超过1.6Gbps怎么办

    还有一种情况,就是必须要用到lane速率超过1.6Gbps,这种情况怎么办呢?那就得用到高速serdes了GTP、GTH、GTY了,针对这种情况,Xilinx专门出了一个应用指南,这个比较特殊,熊猫君记得编号是XAPP1339,名字叫做“Implementing 2.5G MIPI D-PHY Controllers”,前提是FPGA需要带高速Serdes,成本要高一些,Xilinx官网有参考设计,在安富利可以买到评估板,如下图2所示,本文按下不表。

     

                                                                                                   图2 安富利使用高速Serdes的参考板

    二、软件设计

    这里的软件设计只考虑介绍手撸的,对Xilinx官方IP和参考设计不做表述。这里面主要的关键点是考虑使用什么样的时钟网络拓扑。

    2.1两种时钟拓扑的考量

    这里面有种时钟架构可供选择,各有优缺点,根据实际情况选择之。

    第一种是使用锁相环(PLL):这种方案的有点是时钟稳定、抖动小,外部偶尔有个小毛刺可能影响不大,缺点一个是需要考虑失锁的问题,这个对连续时钟输出的没啥影响,但是对Gated时钟就比价致命,如果低功耗间隔太长,重新转到高速模式时间又太短,很有可能锁相环就失锁了,导致丢掉了HS帧前面的一部分数据找不到同步头接收失败;另一个是只能支持一种固定速率。因此,在选用这种方案的时候要特别注意。

    第二种方案是直接使用时钟BUFER这种方案无需知道进来的时钟速率是多少,所以可以很方便的通过配置sensor的寄存器来切换MIPI通道lane速率(这种对大靶面的传感器应用尤为常见,拍照和视频流采用不同的输出速率)。缺点是容易受外界干扰,对信号完整性和干扰屏蔽处理要求较高。

    这个两种时钟方案的结构如下图3所示。

     

                                                                                                     图3 两种时钟拓扑结构

    对MIPI而言,数据并串转换的最小单位是字节,DDR采样方式,因此byte_clk频率是bit_clk的1/4。

    2.2物理层的接收

    咱们一般而言不考虑双向通信和ESCAPE信号处理,那么MIPI  D-PHY物理层的主要工作就是采样LP状态信号和将高速串行数据恢复成按字节排序的并行数据,不管多少个Lane,方法都一个样。这个工作被称作解串,只需要用到IDELAY和ISERDES原语就行。MIPI标准默认是时钟相对数据的相位是90°,DDR采样方式,也就是说,时钟的上升沿和下降沿刚好在数据的中间,因此在PCB Layout的时钟,时钟和数据最好是需要等长的,这样保证到达时间是一样的。IDELAY的作用是将PCB布线和内部路径的延时找回来使之满足最佳采样要求,这在直接使用时钟BUFER的时钟拓扑设计中尤为重要,另外,因每次布局布线后都会存在一些路径差异,最好是约束Fixed布线路径。ISERDES的作用是串转并,将数据转为并行的,这里的串并比设为1:8就好,至于这俩源语怎么用,可以参照Xilinx的Select IO手册或者参照我上一篇分享文章《Zynq高速串行CMOS接口设计与实现》。

    恢复成字节数据的第二步就是找同步头B8’H,这里千万不要用Iserdes自带的bitslip功能,因为同步字每一个HS帧就一个字节,而且每一个HS帧都要搜索同步字节。一次这里需要手撸一小段代码自己来截取为最好。

    2.3CSI层的实现

    CSI层主要就是将1lane,或多lane的数据按照协议规定解析出来并将图像数据拼接输出,有的可能会存在多个虚拟通道,需要注意一下。MIPI 一般会分为长短帧,长帧为数据帧,一帧一般就是一行数据;短帧为标志帧,用于指示帧行的开始结束,这个我们可以根据自己的Sensor实现一种就行了,没有必要像标准那样把所有的数据类型都囊括进来。

    这里需要注意一下的是,MIPI DPHY和CPHY的长帧的帧头排列方式不一样,CPHY是固定的每个通道都有6个word的的帧头信息。但是DPHY的帧头信息排布和数据一样,都是根据实际的通道数分散到各通道。

    CSI层的工作时钟可以使用FPGA内部的一个合适时钟,不和MIPI的像素时钟挂钩,从CSI层出来的数据就是直接的一个一个的像素数据了。

    针对特定的Sensor实现CSI层,整个MIPI的接收逻辑框图如下图4所示,整个接收逻辑所占用的Slice资源一般不会大于1K。

     

                                                                                                          图4 MIPI DPHY接收逻辑设计框图

    本次的分享到这里就结束了,欢迎加入QQ讨论群或微信公众号讨论交流或获取相关资源。

     

    展开全文
  • pg201-zynq-ultrascale-plus-processing-system pg232-mipi-csi2-rx pg020-axi-vdma 其他IP核的产品手册,请自行在DocNav中查阅 基于设备: FPGA芯片:xazu3eg 开发板:百度EdgeBoard,有MIPI CSI 视频接口...

    参考文档:

    pg201-zynq-ultrascale-plus-processing-system

    pg232-mipi-csi2-rx

    pg020-axi-vdma

    其他IP核的产品手册,请自行在DocNav中查阅

     

    基于设备:

    FPGA芯片:xazu3eg 

    开发板:百度EdgeBoard,有MIPI CSI 视频接口,千兆以太网,2GB的DDR

     

    Vivado硬件工程建立

    底层硬件全部由Xilinx官方IP核搭建而成。主要的IP核有1.MIPI CSI-2 Rx Subsystem 2.AXI4-Stream Subset Converter 3.AXI Video Direct Memory Access 4.Zynq UltraScale+ MPSoC。

    1.新建Vivado RTL 工程,选取工程名字,工程路径,FPGA型号xazu3eg。

     

    2.左侧菜单栏,点击Create Block Design。添加IP核MIPI CSI-2 Rx Subsystem。该IP核的主要作用是接收图像传感器输出的MIPI CSI ( Mobile Industry Processor Interface Camera Serial Interface ) 4通道数据,进行解协议输出AXI4-Stream格式的视频数据。双击例化的IP核进如参数配置页面。需要配置:Pixel Format:RAW12, Serial Data Lanes:4, Include Video Format Bridge, Line Rate:800Mbps, Embedded non-image Interface, Filter User Defined data types, Line Buffer Depth:2048, TUSER Width:96.

    3. MIPI IP核配置好后,我们添加一个AXI4-Stream Subset Converter。主要作用是转换MIPI IP核video_out所输出的视频数据流格式。数据流位宽由16位扩充为32位,便于VDMA搬运。IP核命名为axis_subset_converter_0。具体个别参数的设置需要查询产品手册。

    4.我们再添加一个AXI4-Stream Subset Converter。主要作用是转换MIPI IP核emb_nonimg输出的元数据流(元数据在每一帧图像的最后,用于提供该帧图像的部分寄存器配置,帧号,相位号)。IP核命名为axis_subset_converter_1。

    5. 我们添加一个AXI Video Direct Memory Access, 用来搬运AXI4-Stream到DDR Memory。IP核命名为axi_vdma_0, 用来搬运图像数据流。继续添加一个AXI Video Direct Memory Access,命名为axi_vdma_1,用来搬运元数据流。VDMA的主要管脚我这里简单描述下,S_AXI_LITE,是ZYNQ用来配置VDMA IP核,读写寄存器的端口。S_AXIS_S2MM是slave到master memory的数据流传输端口,包含很多具体的信号。s_axi_lite_aclk是S_AXI_LITE的时钟,表示读写寄存器的快慢。axi_resetn是s_axi_lite_aclk所对应的同步复位信号。m_axi_s2mm_aclk和s_axis_s2mm_aclk是视频流数据传输的时钟,代表VDMA搬运数据的快慢。M_AXI_S2MM是VDMA写通道的输出端口。Fsync Options指定了VDMA的帧同步方式,我们使用s2mm tuser信号来进行同步。其他具体参数配置信息请查阅Xilinx官方产品手册,并结合项目实际需求理解选定。

    6. 添加两个AXI SmartConnect IP核。用于将axi_vdma的输出连接至ZYNQ的DDR部分。

    7. 添加Zynq UltraScale+ MPSoC。配置QSPI,用于将程序固化至FLASH。配置UART,用于打印串口信息。TTC计时器。GEM千兆以太网,用于发送UDP数据包。配置DDR,根据开发板上实际DDR的手册配置。配置IP核的寄存器控制端口,两路VDMA与DDR的接口。

    至此,ZYNQ UltraScale+ MPSoC IP核配置完成。接下来我们添加一个AXI Interconnect IP核,用于连接ZYNQ的IP配置输出端口M_AXI_HPM0_FPD,分流为三路信号分别控制MIPI CSI-2 Rx Subsystem的csirxss_s_axi,vdma0和vdma1的S_AXI_LITE。

    8. 主要的数据流接口都配置好后,我们手动将各个接口连接起来。简化后的电路图连接方式如下所示。

    9. 接下来主要是时钟域和复位的设置添加。ZYNQ MPSoC输出pl_clk0为100MHz,我们添加一个CLOCKING WIZARD,经过倍频,输出200MHz和300MHz的两个时钟。200MHz用于ZYNQ读写IP核寄存器的时钟,MIPI CSI-2 所需的lite_aclk,dphy_clk_200M,vdma0和1的s_axi_lite_aclk,ZYNQ的maxihpm0_fpd_aclk,AXI Interconnect的所有时钟输入。300MHz用于视频数据流的传输时钟,因为图像传感器输出的MIPI数据流为高速通路,这里我们设置VDMA的时钟较快一些。300MHz连接至MIPI CSI-2 所需的video_aclk,AXI4-Stream Subset Converter所需的aclk,vdma所需的m_axi_s2mm_aclk, s_axis_s2mm_aclk,AXI SmartConnect所需的aclk,ZYNQ MPSOC所需的saxihp0_fpd_aclk, saxihp1_fpd_aclk。

    复位功能我们需要添加两个Processor System Reset IP核。分别用作200M时钟和300M时钟的同步复位信号。手动将IP核的slowest_sync_clk与clk_out连接,peripheral_aresetn与各个IP核的复位端口连接,ext_reset_in与ZYNQ的输出复位信号pl_resetn0连接。最后全部连接完毕的电路图如下所示

    10. 点击Validate Design。提示没有Error和Critical warning。在Sources菜单栏右键BLOCK DESIGN文件,点击Create HDL wrapper, 生成硬件代码。然后进行常规步骤,SYNTHESIS, IMPLEMENTATION, GENERATE BITSTREAM。成功后导出硬件文件,选择include bitstream。然后点击Launch SDK。

     

    Xilinx SDK 软件工程建立

    1. 点击File->New->Application project, 输入工程名字GS_MIPI_UDP,点击Next,选择IWIP UDP PERF CLIENT。点击FINISH。右键生成的GS_MIPI_UDP_bsp,选择BSP settings, 修改standalone串口打印为uart1,修改Iwip202中temac_adapter_options中phy_link_speed为1000Mbps。点击OK。会重新生成BSP。

    2. 软件工程主要实现的功能是,初始化MIPI CSI-2 IP核,VDMA,网口。配置两路VDMA,四个缓冲区的地址设置(因为我们的图像传感器为TOF相机,一次外部触发会有4个相位帧的产生,同时有4个元数据行的产生,因此设置为4个缓冲区)。网口配置,建立UDP连接,FPGA板的MAC地址绑定,电脑的IP地址和端口绑定。VDMA开始搬运图像数据流后,从DDR中分别读取4个相位帧数据和Metadata数据。将数据按每个包1280字节放在数据包缓冲区,开始UDP传输。

    3. 主要修改main.c, udp_perf_client.c, udp_perf_client.h。点击Project->Build ALL。会在Debug中生成GS_MIPI_UDP.elf。

     

    在线调试

    1. 在线调试是烧写FLASH的前提,先验证代码的功能正确与否。连接JTAG线,电源线,串口线,网线 电脑和FPGA之间。点击Xilinx->program FPGA, 如果有错误,检查FPGA板的BOOT顺序,连接线是否牢固。成功后,右键GS_MIPI_UDP,点击Run as->Launch on hardware,(需要单步调试,点击Debug as->Launch on hardware)。打印信息无误,可以用任务管理器查看网口的数据大小,有稳定的数据,则代表网口已经跑起来了。可以连接图像传感器,用WireShark抓包后,查看数据格式,转存数据,用MATLAB恢复图像。

     

    烧写FLASH

    1. 点击File->New->Application project, 输入名字FSBL,点击Next,选择Zynq MP FSBL, 从FLASH运行必需的启动文件。右键GS_MIPI_UDP,选择Create BOOT image,添加所需文件,FSBL.elf, 比特流文件,GS_MIPI_UDP.elf。点击Create image。

    由于我的FPGA型号与SDK默认检测到的型号对不上,我的是xazu3eg系列,但SDK检测到的是xczu3eg系列。因此这一步Create image不能成功生成BOOT.bin。于是改用XSCT命令行方式生成BOOT.bin。方法是点击Xilinx->XSCT Console,输入命令,切换文件夹路径为bootimage,声明器件为xazu3eg,成功生成BOOT.BIN。

    cd D:/sgao_prj/WangYue_Project/GS_project/GS_MIPI_UDP/GS_MIPI_UDP.sdk/GS_UDP_ZYNQ/bootimage
    
    
    bootgen -image "GS_MIPI_UDP.bif" -arch zynqmp -w -o i "BOOT.bin" -packagename xazu3eg -log trace

    然后点击Xilinx->Program Flash 等待烧写成功。

     

    整个MIPI数据接收,转网口发送的工程建立完毕。主要需要 各主要IP核的使用方法,IP核之间的连接,对xilinx SDK Iwip perf UDP Client示例代码的理解,添加自己的VDMA配置代码,DDR数据读取与VDMA搬运速度相匹配的转发逻辑代码。对Xilinx ZYNQ UltraScale+ MPSoC这个强大芯片的理解与应用又上了一层。和我上一篇博客的Altera FPGA 相结合起来,加上3D TOF 图像传感器套件就组成完整的硬件应用。Altera FPGA负责上电配置TOF相机,Sensor输出的MIPI数据由ZYNQ MPSOC接收,并转存数据为4个相位帧和4个元数据行,通过千兆以太网以UDP协议发送到PC端。PC端采集数据后,通过MATLAB回复图像、视频流。

     

    展开全文
  • zynqmp (ultra96-v2)mipi 链接raspberry pi v2.1摄像头模组 一linux+petalinux_rootfs实现 ubuntu16.04的移植参考 移植ubuntu16.04到arm/aarch64 需要做的修改如下: 1.修改petalinux的config文件如下 2.重新...
  • ultra96通过mipi接口 连接树莓派的v2.1摄像头 环境为vivado2019.1 petalinux2019.1 重要参考 https://github.com/gtaylormb/ultra96v2_imx219_to_displayport 主要看一下自己的对应接口,和ultra96的40pin-60pin的...
  • package --boot --format BIN --fsbl images/linux/zynqmp_fsbl.elf --u-boot images/linux/u-boot.elf --pmufw images/linux/pmufw.elf --fpga images/linux/*.bit --force 7.进入ultra96-v2_design_mipicamera/src...
  •   Xilinx官方提供了Zynq MPSoC的应用例程,包括Base Trd和VCU Trd,从Vivado硬件到Petalinux工程介绍的很详细,源代码也都是开源的。为了做到一个工程覆盖所有设计,这些Trd的代码极其规划化和模块化,包罗万象,...
  • 一、双目视觉智能平台概述 双目视觉智能平台以双路CMOS传感器IMX214+XC7Z100FPGA为基础,支持双路1080P60fs视频输入,ZYNQFPGA支持FPGA预处理和双ARM计算。... 二、硬件资源1FMC双目MIPI模块FL0214 F...
  • 双目视觉智能平台 双目视觉智能平台以双路CMOS传感器IMX214+XC7Z100FPGA为基础,支持双路1080P60fs视频输入,ZYNQFPGA支持FPGA预处理和双ARM计算。... 硬件资源1FMC双目MIPI模块FL0214 FMC双目M...
  • 一、双目视觉智能平台概述 双目视觉智能平台以双路CMOS传感器IMX214+XC7Z100FPGA为基础,支持双路... FMC双目MIPI模块FL0214为MIPI接口的2路1300万像素的CMOS摄像头模块。FL0214模块带有2个MIPI接口的摄像头模...
  •   Xilinx官方提供了TPG、MIPI、SDI、HDMI和FILE等接口作为图像的输入源,在工程中例化为V4L2架构设备,供上层软件调用。TPG全称为Test Pattern Generator,为FPGA逻辑产生的一个模拟图像源,可提供一系列不同模式...
  • OKA40i-C4核方案,采用的是全志科技的工控行业平台级处理器,采用了4核的处理器,包括丰富的接口,包括常用的接口,支持双屏异显和多种显示接口RGB/MIPI/双LVDS/HDMI,支持多路摄像头输入,DVP in*2/CVBS in*4。...
  • FZ3A原理图.pdf

    2020-06-17 13:07:40
    主芯片采用Xilinx公司的Zynq UltraScale+ MPSoCs EG系列的芯片,型号为XAZU3EG-1SFVC784I。PS端挂载了2片DDR4(2GB,32bit),1片8GB eMMC FLASH存储芯片和1片256Mb的QSPI FLASH。 外围接口包含2个USB接口(1个USB...
  • FZ3B-2019-11-15.pdf

    2020-06-12 11:02:24
    主芯片采用 Xilinx 公司的 Zynq UltraScale+ MPSoCs EG 系列的芯片,型号为 XAZU3EG-1SFVC784I。PS 端挂载了 4 片 DDR4(4GB,64bit),1 片 8GB eMMC FLASH 存储芯片和 1 片 256Mb 的 QSPI FLASH。外围接口包含 2 ...
  • FZ3B硬件手册.pdf

    2020-06-12 11:20:33
    主芯片采用 Xilinx 公司的 Zynq UltraScale+ MPSoCs EG 系列的芯片,型号为 XAZU3EG-1SFVC784I。PS 端挂载了 4 片 DDR4(4GB,64bit),1 片 8GB eMMC FLASH 存储芯片和 1 片 256Mb 的 QSPI FLASH。外围接口包含 2 ...
  • <div><p>I'...to something higher than 6 and try to flood my board with many requests then some tx buffers are lost and never freed. <p>For network testing I use wrk benchmarking tool with command: ...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
热门标签
关键字:

mipizynq