作者:Hello,Panda;文章来源:ZYNQ分享客
各位朋友们,大家好,今天分享一个MIPI多摄像头聚合和GMSL2远传的小设计。首先请允许我感叹一下,在AI时代,写代码变得越来容易,Codex、Claude 之类的Agent几乎可以代替Coder实现大多数的模块级代码工作,工程师们得以解放生产力将更多的精力投入到Ideal创新、系统级架构设计等工作上去。当然,这一切都以token为基础,token才是AI的硬通货。但相较于提高工作效率带来的收益而言,购买token所需的花费往往可以承受。
其实这次的设计之前有单独分享过,这次只是把基于VC(VCX)的多路MIPI MUX和GMSL2远传整理在一起来聊。
一、功能描述
设计的主要功能是:
远端SoC通过GMSL2链路配置摄像头模组(OV5640);
FPGA接收多颗OV5640模组输出的MIPI图像数据;
FPGA将接收到的多路图像按VC(VCX)进行聚合,最多可支持16路图像同时接入;
FPGA将聚合后的MIPI数据发送到GMSL2 Serdes芯片(MAX96717)。
下图1是以4路OV5640输入、聚合和发送为例的功能框图。

图1 应用功能框图
二、硬件描述
设计基于开发套件YSPL-0015E,如下图2所示。

图2 YSPL0015E四摄像头聚合传输开发套件
电路包括聚合FPGA一片、四颗OV5640摄像头模组(配置为1-lane MIPI,YUV422 720P输出)、MAX96717 GMSL2串行器一颗(支持12V PoC)。FPGA采集四颗OV5640摄像头模组输出的YUV422图像后,利用MIPI VC通道特性将其通过MIPI CSI-2发送到MAX96717后远程传输到后端接收器。“聚合板”与主控Deserdes接收器之间通过具有PoC功能的50Ω同轴电缆线连接,同轴电缆下行图像传输速率6Gbps。
实现远程传输的MAX96717是本多摄像头聚合传输的关键电路,见下图3所示

图3 MAX96717 Serdes电路图
如图3所示,硬件配置如下:
输入MIPI接口配置为4-LANES MIPI D-PHY CSI-2,支持VCX功能;
CFG0配置为XTAL晶振模式(25MHz无源晶振),I2C设备地址默认为0x80;
CFG1配置为COAX模式,6Gbps下行速率,Pixel模式,在使用VCX多摄像头聚合传输时,需要软件重配置为Tunnel模式;
MFP0配置为触发输出(GMSL_TRIG),但OV5640模组未使用该信号;MFP3配置为复位信号(GMSL_RESETN),但默认给OV5640模组的复位信号由I2C接口的IO扩展芯片给出,该信号默认未使用;MFP4配置为通用IO输出,与XHS信号复用同一个FPGA IO;MFP6可用作触发信号的反馈。
MAX96717映射了两组I2C信号,其中MFP9/MFP10为主I2C ,用于MAX96717相关寄存器的配置;MFP7/8为透传I2C,用于对外设进行配置。这两个I2C在Deserdes端(如MAX96724)需要单独映射,分别操控。
三、FPGA软件设计
FPGA软件基于Lattice Radaint 2024.2.0.3.0版本开发。对OV5640的初始化配置由GMSL2主控端完成,FPGA实现MIPI CSI-2数据接收、多路由聚合和MIPI CSI-2发送功能,软件的整体框架如下图4所示。

图4FPGA聚合软件框图
MIPI接收模块mipi_1lanes_softrx_top_v1使用软核。物理层在官方IP的基础上修改,CSI层自行编写。在接收数据之前需要先通过I2C将MIPI选通开关PI3WVR626的SEL引脚设置为低电平,使之与端口A选通接入OV5640信号。
数据聚合模块mipi_mux_yuv_v2实现将4组YUV422数据聚合成为一组数据发出,通过FIFO来实现时钟域转换,输入4组YUV422数据的时钟为150MHz;输出的一组数据时钟为MIPI Byte时钟,为156.25MHz。
聚合采用MIPI CSI-2 Spec2.0支持的VCX,对应4bit VC编号为0~3。调度采用轮转模式(Round Robin),即设计一个状态机轮转判断六组输入数据,有数据则发送,发送完毕后跳转到下一个状态;没有数据则直接跳转到下一个状态,如此循环。
mipi csi-2模块mipi_dpycsi2tx_top_v1实现CSI-2层发送数据和D-PHY物理层时序参数设定。CSI-2层生成MIPI发送时序和计算HDR ECC、数据CRC等。按照MIPI D-PHY物理层时序规范生成发送时序控制信号。
需要特别注意的是,在MAX96717工作在Tunneling MODE时,需要满足数据包间最小时间间隔要求,见下图5所示。

图5 MAX96717最小包间隔时序图
D-PHY物理层调用MIPI硬核将LANE速率配置成为1.25Gbps,4Lanes,非连续时钟模式或连续时钟模式。FPGA引脚分配见下表1。
表1FPGA引脚分配

在Radiant2024.2上的编译结果见下图6所示,从图6可以看出,在嵌入调试器的情况下逻辑占用24%,EBR使用28个,有很大的资源裕量。

图6 Radiant编译结果
四、 主控端Deserdes配置概要
Deserdes主控端各家的设计大同小异,本章仅为我调试平台的配置,朋友们可作为参考。
配置MAX96717的6Gbps模式Deserdes芯片必须使用MAX96724GTN才能支持。在硬件上,CFG0需10kΩ电阻下拉到地使能I2C通信模式;CFG1必须使用10kΩ电阻下来到地使能6Gbps GMSL2速率。PoC供电需满足300mA瞬时、250mA连续载流能力。
4.1 MAX96717初始化
MAX96717初始化配置通过MAX96724GTN在远端完成,其像素流路径见下图7所示。

图7 MAX96717数据流
I2C地址选用默认地址0x80,其初始化要点如下:
初始化输入MIPI为4 Lanes非连续时钟模式,使能VCX功能;
初始化传输模式为Tunneling MODE,数据格式为YUV422 ;
使能数据发送;
透传I2C通道配置为直通透传模式准备初始化摄像头模式寄存器。
4.2 OV5640摄像头模组初始化
远端(SoC)通过解串器将OV5640配置成为如下表2所示。
表2 OV5640配置参数表

4.3 MAX96724GTN初始化
为了满足带宽要求和VCX发送时的行间隙要求,调试SoC将MIPI设置为4Lane,Lane速率为2.5Gbps/Lane,硬件连接到PORT-A,配置以为2x4 D-PHY模式,数据模式为Tunnel。因此,按这边调试所用主控SoC实际MIPI接入情况,MAX96724GTN的数据流如下图8所示。

图8MAX96724GTN数据流路径
MAX96724GTN的初始化配置要点如下:
按照图4.2所示的数据流路径配置PIPE Mapping和MIPI Port映射相关的寄存器,关闭其它未使用的GMSL和MIPI Port;
将MIPI模式配置为2x4 Mode,设置MIPI速率为2.5Gbps,并使能VCX功能,配置接收数据的DT类型;
配置GPIO相关功能;
打开MIPI开始接收数据。
4.2 系统初始化流程
系统顺序执行初始化流程,先后顺序如下:
MAX96724GTN先关闭MIPI CSI输出,使能Link并执行ONE SHOT复位;
使能控制通道A并初始化MAX96717内部寄存器;
初始化配置MAX96724GTN内部寄存器;
对摄像头模组复位,待复位完成后初始化配置其内部寄存器;
(6)使能FPGA聚合并开启SoC接收MIPI数据。
其他平台相关的配置请用户根据自己的平台对应完成。
需要特别注意的是:在YSPL0015E开发平台上,PCA9548ARGER的访问方式为SMbus兼容模式,也就是说它的一次访问只包括设备地址和命令,不是传统I2C“设备地址+寄存器地址+配置数据”的访问方式,主控端设计I2C程序时需要特别注意这个要点。
五、运行结果
下图9是主控SoC在驱动并接收MUX后的数据后,将其推送到HDMI显示屏上的运行效果。

图9运行效果

