找回密码
 注册
关于网站域名变更的通知
查看: 566|回复: 1
打印 上一主题 下一主题

转——威视锐ZYNQ开发板-ZingSK-CMOS视频采集与网络传输显示

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-5-8 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    转——威视锐ZYNQ开发板-ZingSK-CMOS视频采集与网络传输显示

    . U, l1 O$ B, w2 B3 b9 T2 p2 i( W* h3 _8 Z. X; K
    一、概述
    ZingSK开发套件采用核心板加底板的方式,方便用户使用自定义的低成本的底板. ZingSK配套的底板也拥有丰富的接口, ZingSK外观如图1.
    图1-1
    本实例主要使用底板上的网络接口和扩展接口,扩展接口将CMOS模块的视频接入,并通过软硬件协同设计的方法来实现CMOS视频采集和千兆以太网的传输以及PC上的视频显示.
    CMOS芯片将采集到的视频输入到ZYNQ PL部分,通过Xilinx提供的VideoIn_to_AXIStream的IP将数据转为AXI Stream的流格式,为保证传输速度,使用VDMA的IP将视频流数据转为MemoryMap的形式,通过PS与PL的HP高速接口DMA到外部的DDR3中;嵌入式Linux下使用应用程序对VDMA进行控制,使用socket接口进行网络传输,将DDR3中的数据传输到PC的内存中,再做显示;
    整体框图如图2所示.
    图1-2
    实例程序主要由两部分组成,硬件平台的搭建和嵌入式软件部分.
    硬件平台的搭建,主要是PL部分,如添加视频输入IP, VDMA以及控制IO等,PS部分,如配置DDR3,程序固化方式(SD卡, NAND Flash, SPI Flash),调试接口串口的配置以及IIC控制器的配置.
    嵌入式软件,主要分为FSBL部分和Linux下的驱动和应用程序;FSBL主要完成IIC控制器的初始化,并CMOS输入芯片;Linux下完成各部分的驱动程序及控制程序.
    二、快速启动
    CMOS视频网络传输可通过以下几步来完成测试.
    1. 准备工作,
    a. 主机、网线;
    b. 6V-2A电源;
    c. ZingSK开发套件;
    2. 将提供的附件,复制到TF中, 附件清单见表1-1;
    3. 将ZingSK的启动模式调成TF卡模式,如下图;
    图2-1
    4. 开发板连接6 V电源(JP1),不要打开电源。
    图 2-2
    5. 将包含了例程所需二进制文件的TF卡,插入到ZingSK开发板的TF卡插槽内。
    图 2-3
    6. 用USB Type-A -USB Mini-B 电缆连接开发板UART与电脑。
    图 2-4
    7. 将CMOS摄像头和网线连接到下图标识位置。
    图2-5
    8. 使用“设备管理器”,以确定COM端口。 打开一个串口调试程序,配置为115200/8/n/1/n。
    图 2-6
    图 2-7
    9. 打开电源开关(SP1) ,开发板上电运行。
    图 2-8
    10. 在串口调试工具的窗口将会显示Linux的引导过程。
    图 2-9
    11. 约半分钟左右,Linux启动完成将自动运行测试例程,然后打开上位机软件All_player.exe,选择“NET”方式,点击“link”。
    上位机软件将会有图像输出。
    效果图
    三、硬件平台搭建
    嵌入式平台的主要分为PS和PL两部分配置.
    使用XPS,配置ZYNQ的处理器PS部分,外设中选择下图.
    图3-1
    选择UART0为了输出调试信息,选择IIC0是使用该控制器来配置HDMI输出芯片SiI9134;
    其它都为默认配置,根据板卡实际的DDR3芯片,配置DDR3控制器,作为程序的内存空间;如图7
    图3-2
    PL部分主要是添加必要的IP来完成CMOS的采集和HDMI的输出.使用到的IP如下图.
    四、嵌入式软件设计1.FSBL设计
    软件主要分为两部分,FSBL与Linux下的程序;FSBL主要完成ZYNQ平台的
    启动,内存的初始化,IO的中断初始化,以及CMOS与HDMI的配置;
    FSBL中主要的C程序如下,具体函数请参阅官方手册;
    IIC0的控制,
    //初始化IIC控制器
    XIicPs_LookupConfig(…);
           XIicPs_CfgInitialize(…);
       //设置IIC时钟频率
    XIicPs_SetSClk(…);
    //发送数据
    iic_writex(… );
    IIC1配置CMOS的具体配置参数如下,
    {0x20,0xc0,0x00},// Mirror Row and Columns
    {0x09,0x03,0x37},// Exposure
    {0x05,0x00,0x00},// H_Blanking  //
    {0x06,0x00,0x19},// V_Blanking
    {0x0A,0x80,0x00},// change latch
    {0x2B,0x00,0x0b},// Green 1 Gain
    {0x2C,0x00,0x0f},// Blue Gain
    {0x2D,0x00,0x0f},// Red Gain
    {0x2E,0x00,0x0b},// Green 2 Gain
    {0x10,0x00,0x51},// set up PLL power on
    {0x11,0x19,0x04}, // 25M
    {0x12,0x00,0x04},// PLL_p1_Divider
    {0x10,0x00,0x53},// set USE PLL
    {0x98,0x00,0x00},// disble calibration
    {0x01,0x03,0xe8},// set start row
    {0x02,0x03,0xe8},// set start column
    {0x03,0x03,0xbf},
    {0x04,0x06,0x3F},
    {0x22,0x00,0x01},// set row mode in bin mode
    {0x23,0x00,0x01},// set column mode  in bin mode
    {0x49,0x00,0xA8},// row black target //49s
    {0x0B,0x00,0x01} //   RESTART(U)
    2.嵌入式Linux软件设计
    硬件平台:ZingSK开发套件
    开发环境:Windows7-32位、VMware 9.0 + Ubuntu 12.04、ARM- xilinx- linux-gnueabi交叉编译环境
    嵌入式Linux: zynq_base_trd_14.3(基于ZingSK修改)
    本例程运行需要一系列二进制文件如下表所示:
    文件名
    描述
    BOOT.BIN
    由EDK bootgen工具创建,包含 FSBL (First Stage Boot Loader), FPGA bit-stream, U-Boot(基于zynq_base_trd_14.3构建)
    uImage
    Linux kernel(基于zynq_base_trd_14.3内核编译)
    devicetree.dtb
    Device Tree Blob
    uramdisk.image.gz
    根文件系统
    init.sh
    运行应用程序
    cmos_tcp.elf
    测试程序
    表1-1
    1)、Device Tree修改部分:
    修改显示模式为1080P:
    xylon-video-params {
    pixel-data-invert = <0>;
    pixel-clock-active-high = <1>;
    pixel-component-format = "ARGB";
    pixel-component-layer = <0>,<1>;
    active-layer = <0>;
    videomode = "1920x1080";
    ……
    2)、应用程序流程:
    应用代码片段:
    VDMA设置,CMOS->VDMA->DDR:
    if ((fd_vdma = open("/dev/xvdma", O_RDWR)) < 0)
    {
    printf("Cannot open device node xvdma\n");
    // exit(1);
    }
    xvdma_dev.device_id = vdma_id;
    if (ioctl(fd_vdma, XVDMA_GET_DEV_INFO, &xvdma_dev) < 0)
    {
    printf("%s: Failed to get info for device id:%d", __func__, vdma_id);
    }
    if(vdma_direction == DMA_DEV_TO_MEM) // frome device to memory
    {// rx
    chan_cfg.chan = xvdma_dev.rx_chan;
    buf_info.chan = xvdma_dev.rx_chan;
    buf_info.mem_type = DMA_DEV_TO_MEM;
    }
    else // from memory to devie
    {
    chan_cfg.chan = xvdma_dev.tx_chan;
    buf_info.chan = xvdma_dev.tx_chan;
    buf_info.mem_type = DMA_MEM_TO_DEV;
    }
    …….
    配置CMOS摄像头API:
    void setup_cmos_camera(int cmd, int value)
    {
    int fd;
    fd = open ("/dev/mt9p031",O_RDWR);
    if (fd < 0) {
    perror("open");
    //exit(-1);
    }
    printf ("\n/dev/mt9p031 opened, fd=%d\n",fd);
    if(ioctl(fd, cmd, &value) < 0)
    perror("ioctl");
    close(fd);
    }
    网络套接字:
    if((listenfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
    {
    perror("fail to socket!");
    exit(-1);
    }
    bzero(&myaddr, sizeof(myaddr));
    myaddr.sin_family = PF_INET;
    myaddr.sin_port = htons(8000);
    myaddr.sin_addr.s_addr = htons(INADDR_ANY);
    if(bind(listenfd, (SA *)&myaddr, sizeof(myaddr)) < 0)
    {
    perror("fail to bind!");
    exit(-1);
    }
    listen(listenfd, 10);
    ……
    捕获一帧图像:
    int get_frame(unsigned char *frame_rgb, unsigned char *video_base_address)
    {
    int i;
    unsigned char *in_ptr = video_base_address;
    unsigned char *out_ptr = frame_rgb;
    in_ptr = video_base_address;
    for(i = 0; i < FRAME_HEIGHT; i++) {
    mEMCpy(out_ptr, in_ptr, FRAME_WIDTH * 4);
    in_ptr += STRIDE_LENGTH;
    out_ptr += FRAME_WIDTH * 4;
    }
    return 0;
    }
    五、实例小结
    本实例主要利用ZYNQ的逻辑部分去完成视频的采集显示,利用ZYNQ
    的PS部分运行Linux操作系统,从而完成复杂的控制与人机界面工作.
    运行操作系统后,可以实现复杂的界面程序,并可方便的使用鼠标键盘,网络等接口,体现出ZYNQ的另一优势.

    / w# e2 [) g; @6 C/ c7 p; J8 x

    该用户从未签到

    2#
    发表于 2019-5-8 17:54 | 只看该作者
    发帖是心得 回帖是美德
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-2 16:58 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表