基于Zynq7010和树莓派摄像头的图像采集系统设计
近几年以树莓派为代表的开源硬件平台已经变的非常流行了,基于树莓派摄像头的图像应用也非常多,树莓派摄像头由于使用量比较大,在性价比上已经非常有优势了,XINLINX的Zynq器件在芯片内集成了ARM和FPGA,非常适合需要使用到ARM和FPGA的应用,本文就是基于XINLINX的Zynq7010器件和树莓派摄像头实现了一个多路的图像采集系统设计。 一、硬件设计相关 树莓派的摄像头接口用的30 PIN的FPC接口,只用了一边的15个PIN,具体如下图示:
具体信号说明如下: 1:GND 2:CAM1_DN0 3:CAM1_DP0 4:GND 5:CAM1_DN1 6:CAM1_DP1 7:GND 8:CAM1_CN 9:CAM1_CP 10:GND 11:CAM_GPIO 12:空 13:SCL0 14:SDA0 15:3V3 以上是基于raspberry-pi-4的接口定义,树莓派摄像头使用2lane的MIPI CSI接口,通过I2C信号控制摄像头的传感器芯片,如500万像素摄像头使用的是安森美OV5647传感器芯片,800万像素摄像头使用的是索尼的IMX219传感器芯片。 我们使用Zynq7010的PL部分连接树莓派摄像头,由于该芯片并没有MIPI专用的管脚,需要使用外部的电阻网络实现MIPI电平的匹配,具体实现电路如下:
用LVDS电平接收MIPI HS信号,用HSUL_12电平接收MIPI LP信号,如需要进一步了解,请参考XILINX官方的应用笔记:xapp894-d-phy-solutions.pdf。这里要注意下时钟线CAM1_CN和CAM1_CP要连接到PL的时钟脚上,并且这些信号尽量要放在同一个BANK内并且脚位靠近,否则容易“踩坑”。 XILINX的MIPI DPHY需要个200MHz自由运行的时钟在硬件设计时也要考虑加上,输入到PL侧的时钟管脚即可。 二、软件设计相关 XILINX提供了MIPI CSI-2 Rx Subsystem的IP核用来实现FPGA接收MIPI CSI摄像头数据,这是一个集成一体化的方案,MIPI CSI-2 Rx Subsystem IP的内部已经包含物理层MIPI D-PHY IP, 不再需要单独例化MIPI D-PHY IP。实际上接收子系统有包含有三个子核,分别为MIPI DPHY、MIPI CSI-2 Controller及Video Format Bridge。注意MIPI CSI-2 Rx Subsystem的IP核在vavido 2020.1之前的版本是需要购买授权才能使用,所以推荐使用vavido2020.1版本或者之后的版本进行MIPI CSI2的开发。 MIPI CSI摄像头数据输出的RAW10或者RAW8数据,我们只负责采集这些数据,然后发送到上位机进行后续处理,板卡上并没有进行格式处理或者进行显示等操作,所以不需要用到Video Format Bridge。Zynq7010的PS系统带有I2C接口,用来配置摄像头非常方便,但如果接多路摄像头时,由于摄像头是一样,I2C器件地址也是一样的,我们不能把所有摄像头的I2C接口都连接到一起,通过把PS的I2C接口信号布线到PL侧,PL侧在扩展出多路I2C信号分别连接各个摄像头的方法来解决这个问题。 MIPI CSI-2 Rx Subsystem的IP核的具体配置如下图示:
按上图配置后IP的接口信号及说明如下图示:
注意这里使能了CSI2 Controller Register Interface,可以提供A**线读取IP内部寄存器的状态来进行调试软件和硬件,经常用来调试查看的寄存器有如下: 1、地址偏移0x0_0000, Core ConfigurationRegister, bit0: Core Enable. 2、地址偏移0x0_0004, ProtocolConfiguration Register, bit4~3: Number of lanes. 3、地址偏移0x0_0010, Core StatusRegister, Bit31~16 acket Count. Bit3:Short packet FIFO Full. Bit2:Short packet FIFO not empty. Bit1:Stream Line buffer Full. Bit0:Soft reset/Core disable in progress. 4、地址偏移0x0_0024,Interrupt Status Register, Bit31~16 acket Count. Bit3:Short packet FIFO Full. Bit2:Short packet FIFO not empty. Bit1:Stream Line buffer Full. Bit0:Soft reset/Core disable in progress. 5、地址偏移0x0_0030, Generic ShortPacket Register, Bit23~8:16-bit short packet data. Bit7~6:Virtual channel number. Bit5~0:Generic short packet code. 6、地址偏移0x0_003C, Clock LaneInformation Register, Bit1:Stop state on clock lane. 7、地址偏移0x0_0040/44/48/4C, Lane0/1/2/3 Information Registers, Bit5 etection of stop state. Bit2:Indicates the deskew reception. Bit1 etection of SoT Error. Bit0 etection of SoT Synchronization Error. 8、地址偏移0x0_1000, D-PHY CONTROLRegisters, Bit1:Enable bit for D-PHY. Bit0:Soft reset for D-PHY Controller. 9、地址偏移0x0_1018, D-PHY CL_STATUSRegister, Bit5:Clock lane control error. Bit4:Clock lane is in the Stop state. Bit3:Set after the lane has completed initialization. Bit2:Set to 1 when the core in ULPS (ULP State) mode. Bit1~0:MODE,表示当前处于低功耗(LP)或者高速(HS)或者Escape模式。 10、地址偏移0x0_101C/20/24/28, Lane0/1/2/3 DL_STATUS Register, Bit31~16:Number of packets received on the data lane. Bit6 ata lane is in the Stop state. Bit5:This bit is set after the Data Lane Escape Timeout is elapsed. Write-to-1clears this bit. Bit4:Set after the Data Lane High-Speed Timeout is elapsed. Write-to-1 clears thisbit. Bit3:Set after the lane has completed initialization. Bit2:Set to 1 when the core is in ULPS mode. Bit1~0:MODE,表示当前处于低功耗(LP)或者高速(HS)或者Escape模式。 最后上个我们开发的实物图片:
也是采用核心板加扩展板的形式实现。 三、参考文档 3、www.xilinx.compg232-mipi-csi2-rx.pdf
|