本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Digilent PCam 5的机/成像仪测试平台

发布时间:2022-09-04
分享到:

基于Digilent PCam 5的机/成像仪测试平台

发布时间:2022-09-04
分享到:

由于之前我在图像处理方面做了很多工作,需要测试相机/成像仪。所以本文我将介绍如何创建一个可扩展的测试平台。

介绍
我们之前研究过创建图像处理解决方案,这些解决方案使用使用并行接口的图像传感器或使用 HDMI 接口的相机。

图像传感器的一个常见接口是 MIPI,所以让我们看看我们如何在 Zybo Z7 上构建图像处理设计,它能够同时使用 HDMI 输入和 MIPI 相机接口。

我还想为能够创建一个图像处理系统奠定基础,使我能够快速轻松地测试相机和传感器。因此,该项目的未来升级也将支持并行 Pmod 相机。

然后,我们将能够在我们希望用于输出算法的成像仪之间进行选择。这具有额外的优势,Zybo MIPI 连接器上的引脚已与其他常用的制造商相机对齐,例如 Pi 相机。我们将看看如何在另一个项目中使用 Pi 相机。

什么是 MIPI?
MIPI 是移动行业处理器接口的常用缩写。该接口设计用于使用多个高速串行通道以高带宽进行单向数据传输。

MIPI 有许多不同的层,就像 OSI 模型一样,对于这个应用程序,我们将使用 MIPI DPhy 作为物理层,使用 MIPI 相机串行接口问题 2 (CSI-2) 作为传输图像数据的协议。

Zybo Z7 接口
Zybo Z7 使用扁平柔性电缆 (FFC) 与 MIPI 摄像头连接,其引脚如下所示。使用这个接口,我们最多可以使用两个 MIPI 通道进行图像传输。使用 I2C 连接提供成像器的配置,同时提供两个 GPIO。

这些 GPIO 提供不同的功能,具体取决于我们连接的相机。对于 PCam,我们只需要在引脚 11 上使用 GPIO,这会将通电信号驱动到成像仪。

在某些应用中,我们可能需要提供时钟,但对于 PCam,我们也不需要,因为 PCam 板包含自己的 12 MHz 振荡器。

实际引脚输出如下:

由于 Zynq 7000 没有支持 DPhy 的 IO,因此 Zybo Z7 的设计人员实施了一种 Dphy 兼容方法,该方法使用外部电阻网络来提供高速和低速 MIPI 接口。

FPGA设计
我们的 FPGA 设计将有两个视频输入路径和一个公共视频输出路径。

  • HDMI 视频输入 - 连接到 J9
  • MIPI 视频输入 - 连接到 J2
  • HDMI 视频输出 - 连接到 J8

在内部,我们的 FPGA 架构将使用Digilent Vivado 库中的以下模块。

  • RGB2DVI - 从并行输出视频格式转换为 HDMI / DVI
  • DVI2RGB - 从 HDMI / DVI 转换为并行视频格式
  • MIPI D PHY RX - MIPI D PHY
  • MIPI CSI-2 RX - MIPI CSI-2 IP 模块输出 AXI 流视频
  • AXI 动态时钟 - 动态时钟发生器
  • AXI Bayer to RGB - 将原始图像转换为全彩色图像
  • AXI Gamma Correction - 允许我们执行 Gamma 校正

在 Vivado 库中,我们将使用以下模块

  • Video In to AXIS - 将并行视频输入转换为 AXI 流
  • AXI Stream to Video Out - 将 AXI Stream 转换为并行视频
  • AXIS Switch - 允许在 HDMI 和 MIPI 视频源的 AXIS 流之间切换
  • AXI VDMA - 将视频帧存储在 PS DDR 内存中
  • 子集转换器 - 正确重新映射颜色通道
  • Video Timing Controller - 用于检测和生成视频时序
  • AXI GPIO - 提供热插拔检测信号

我们还需要配置 Zynq PS 以提供以下内容

  • I2C 控制器路由到 EMIO 这是我们将用来配置相机的链接
  • GPIO 一位宽,路由到 EMIO,我们用它来控制 PCam 电源的开启和关闭。
  • 时钟 FS0 = 200 MHz,FS1 = 100 MHz,FS2 = 50 MHz

在时钟方面,AXI Lite 网络的时钟频率为 50 Mhz,AXI Streaming 网络和 DPhy 参考连接到 200 MHz。而动态时钟发生器参考连接到 100 MHz 时钟。

为了帮助接口的集成和测试,我在设计中放置了几个集成逻辑分析仪。您可以在下面看到 MIPI 输入的初始捕获。

由于我们有两个输入,我们需要确保两个输入路径都能按我们的意愿正常工作。

完成设计的平面图:

应用程序软件
完成 FPGA 设计后,我们需要编写应用程序软件来配置 FPGA 内的图像处理内核,并配置 PCam 以实现正确操作。

相机 HDMI 和 MIPI 都将配置为以 720p 分辨率运行。

因此,应用程序 SW 需要执行以下操作

  • 配置 VTC 以生成 720p 的时序
  • 将 VDMA 配置为从 PS DDR 内存读取和写入
  • 配置 GPIO 以提供热插拔检测并为 PCam 供电
  • 启用 DPhy 和 CSI-2 接收器
  • 设置动态时钟发生器以提供正确的像素时钟频率

软件应用的最大部分是通过 I2C 链路配置 PCam。数据表非常全面,但我们需要做的第一件事是确保我们可以与 PCam 通信。

我通过读取寄存器 0x​​3100 并确保响应为 0x78 来做到这一点,这是设备的 I2C 地址。如果我没有收到该值,那么我声明相机未连接,前提是相机已连接下一阶段是初始化相机,然后将相机配置为我们希望操作的模式。

void detect_camera()
{
    XIicPs_Config *iic_conf;
    u32 Status;
    iic_conf = XIicPs_LookupConfig(IIC_cam);
   XIicPs_CfgInitialize(&iic_cam,iic_conf,iic_conf->BaseAddress);
   XIicPs_SetSClk(&iic_cam, IIC_SCLK_RATE);
   SendBuffer[0]= 0x31;
   SendBuffer[1]= 0x00;
   Status = XIicPs_MasterSendPolled(&iic_cam, SendBuffer, 2, IIC_CAM_ADDR);
    if (Status != XST_SUCCESS) {
        print("I2C write error\n\r");
        return XST_FAILURE;
    }
    Status = XIicPs_MasterRecvPolled(&iic_cam, RecvBuffer,1, IIC_CAM_ADDR);
    if (Status != XST_SUCCESS) {
        print("I2C read error\n\r");
        return XST_FAILURE;
    }
    if(RecvBuffer[0] != CAM_ID ){
        print("Camera not detected\n\r");
    }
    else{
        print("Camera detected \n\r");
    }
}

一旦我确定了我们需要在我创建的 PCam 中配置的内容,一个简单的函数将读取数组并将配置数据输出到 PCam。

int  Initial_setting_1 ( u32 *cfg_init , int cfg_init_QTY  )
{
    s32  Status , byte_count;
   int i ;
   u8 SendBuffer[10];
   for(i=0;i<(cfg_init_QTY*2);i+=2){
        SendBuffer[1]=  *(cfg_init + i);
        SendBuffer[0]=  (*(cfg_init + i))>>8;
        SendBuffer[2]=  *(cfg_init + i + 1);
    Status = XIicPs_MasterSendPolled(&iic_cam, SendBuffer, 3, IIC_CAM_ADDR);
    if (Status != XST_SUCCESS) {
        print("I2C read error\n\r");
        return XST_FAILURE;
    }
  usleep(1000);
  }
return XST_SUCCESS;
}
该软件允许我使用 AXIS Switch 在不同的输入源之间切换。

在工作台上测试
当我将所有这些放在一起并在我的工作台上运行应用程序时,它似乎运行良好,为我提供了一个灵活的平台,用于未来测试相机和图像传感器。

使用所有编写的软件,我们可以使用两种视频输入格式。我们还将能够看到性能上的差异。

您可以在此处找到与此项目相关的文件:

本文中所用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Adam Taylor,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论