跳转到主要内容
瑞苏盈科专栏
我与瑞苏盈科板卡的开发故事

Crosslink-NX应用连载(15):多摄像头采集、聚合和GMSL2远程传输设计

judy 提交于

作者:Hello,Panda;文章来源:ZYNQ分享客

各位朋友们,大家好,今天分享一个MIPI多摄像头聚合和GMSL2远传的小设计。首先请允许我感叹一下,在AI时代,写代码变得越来容易,Codex、Claude 之类的Agent几乎可以代替Coder实现大多数的模块级代码工作,工程师们得以解放生产力将更多的精力投入到Ideal创新、系统级架构设计等工作上去。当然,这一切都以token为基础,token才是AI的硬通货。但相较于提高工作效率带来的收益而言,购买token所需的花费往往可以承受。

其实这次的设计之前有单独分享过,这次只是把基于VC(VCX)的多路MIPI MUX和GMSL2远传整理在一起来聊。

一、功能描述

设计的主要功能是:

  1. 远端SoC通过GMSL2链路配置摄像头模组(OV5640);

  2. FPGA接收多颗OV5640模组输出的MIPI图像数据;

  3. FPGA将接收到的多路图像按VC(VCX)进行聚合,最多可支持16路图像同时接入;

  4. 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所示,硬件配置如下:

  1. 输入MIPI接口配置为4-LANES MIPI D-PHY CSI-2,支持VCX功能;

  2. CFG0配置为XTAL晶振模式(25MHz无源晶振),I2C设备地址默认为0x80;

  3. CFG1配置为COAX模式,6Gbps下行速率,Pixel模式,在使用VCX多摄像头聚合传输时,需要软件重配置为Tunnel模式;

  4. MFP0配置为触发输出(GMSL_TRIG),但OV5640模组未使用该信号;MFP3配置为复位信号(GMSL_RESETN),但默认给OV5640模组的复位信号由I2C接口的IO扩展芯片给出,该信号默认未使用;MFP4配置为通用IO输出,与XHS信号复用同一个FPGA IO;MFP6可用作触发信号的反馈。

  5. 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,其初始化要点如下:

  1. 初始化输入MIPI为4 Lanes非连续时钟模式,使能VCX功能;

  2. 初始化传输模式为Tunneling MODE,数据格式为YUV422 ;

  3. 使能数据发送;

  4. 透传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的初始化配置要点如下:

  1. 按照图4.2所示的数据流路径配置PIPE Mapping和MIPI Port映射相关的寄存器,关闭其它未使用的GMSL和MIPI Port;

  2. 将MIPI模式配置为2x4 Mode,设置MIPI速率为2.5Gbps,并使能VCX功能,配置接收数据的DT类型;

  3. 配置GPIO相关功能;

  4. 打开MIPI开始接收数据。

4.2 系统初始化流程

系统顺序执行初始化流程,先后顺序如下:

  1. MAX96724GTN先关闭MIPI CSI输出,使能Link并执行ONE SHOT复位;

  2. 使能控制通道A并初始化MAX96717内部寄存器;

  3. 初始化配置MAX96724GTN内部寄存器;

  4. 对摄像头模组复位,待复位完成后初始化配置其内部寄存器;

(6)使能FPGA聚合并开启SoC接收MIPI数据。

其他平台相关的配置请用户根据自己的平台对应完成。

需要特别注意的是:在YSPL0015E开发平台上,PCA9548ARGER的访问方式为SMbus兼容模式,也就是说它的一次访问只包括设备地址和命令,不是传统I2C“设备地址+寄存器地址+配置数据”的访问方式,主控端设计I2C程序时需要特别注意这个要点。

五、运行结果

下图9是主控SoC在驱动并接收MUX后的数据后,将其推送到HDMI显示屏上的运行效果。

图9运行效果

点击查看视频