通过libusb实现PC与ZYNQ之间的USB通信

1 概述

        libusb是一个免费的跨平台USB库,本文在windows平台下使用libusb库开发上位机程序与ZYNQ的USB接口进行数据收发测试。libusb可以支持WinUSB驱动,因此为ZYNQ的USB接口设备安装WinUSB驱动。

        libusb网址:https://libusb.info/

        windows下开发指南:https://github.com/libusb/libusb/wiki/Windows

libusb库

        在https://libusb.info/可以下载libusb库,目前的最新版本是1.0.23。解压后的目录如下:

通过libusb实现PC与ZYNQ之间的USB通信_第1张图片

        使用VS作为上位机驱动的开发环境,因此需要使用MS32或者MS64文件夹下的dll和lib文件。以及include里的头文件。

ZYNQ裸机程序设计

        PS端的USB接口作为Endpoint Device。设计了3个Endpoint,分别为:

  • Endpoint 0:control endpoint
  • Endpoint 1:BULK endpoint
  • Endpoint 2:interrupt endpoint

        分别对应控制传输、块传输和中断传输。

通过libusb实现PC与ZYNQ之间的USB通信_第2张图片

        USB的PID设为0x0007,PID设为0x0001。

        设计USB设备的字符串描述。

通过libusb实现PC与ZYNQ之间的USB通信_第3张图片

4 上位机测试程序设计 

         PC机作为HOST,调用libusb的API函数设计上位机程序,分别测试电脑与开发板USB接口之间的BULK和interrupt模式传输速率。实现如下功能:

  • PC->ZYNQ BULK模式发送数据
  • PC->ZYNQ->PC BULK模式数据回环
  • PC->ZYNQ interrupt模式发送数据
  • PC->ZYNQ->PC interrupt模式数据回环

5 USB驱动安装

        安装libusb驱动。使用Zadig软件生产使用WinUSB内核的USB驱动,选择Create New Device。

通过libusb实现PC与ZYNQ之间的USB通信_第4张图片

        选择advance mode

通过libusb实现PC与ZYNQ之间的USB通信_第5张图片

        选择提取驱动文件。

通过libusb实现PC与ZYNQ之间的USB通信_第6张图片

        输入设备名称ZYNQ USB DEVICE,VID 0x0007,PID0x0001。

通过libusb实现PC与ZYNQ之间的USB通信_第7张图片

        选择驱动文件提取的存放目录,然后点击Extract Files

通过libusb实现PC与ZYNQ之间的USB通信_第8张图片

        完成后,打开驱动文件所在目录,可以找到生成的驱动文件。

通过libusb实现PC与ZYNQ之间的USB通信_第9张图片

         对于Win10系统,首先要禁用数字签名。将开发板USB口与电脑连接,将程序通过SDK下载到开发板中,此时电脑设备管理器提示发现新的USB设备。选择设备,安装上述目录下已经生成的USB驱动程序。

6 USB传输速率测试 

6.1 BULK模式

6.1.1 PC向ZYNQ单向发送

        8字节包

通过libusb实现PC与ZYNQ之间的USB通信_第10张图片

        64字节包

通过libusb实现PC与ZYNQ之间的USB通信_第11张图片

         256字节包

通过libusb实现PC与ZYNQ之间的USB通信_第12张图片

        1024字节包

通过libusb实现PC与ZYNQ之间的USB通信_第13张图片

        2048字节包

通过libusb实现PC与ZYNQ之间的USB通信_第14张图片

        4096字节包

通过libusb实现PC与ZYNQ之间的USB通信_第15张图片

6.1.2 PC与ZYNQ间数据回环

        实际速率需要将图中的速率乘以2倍

        8字节包

通过libusb实现PC与ZYNQ之间的USB通信_第16张图片

        64字节包

通过libusb实现PC与ZYNQ之间的USB通信_第17张图片

        256字节包

通过libusb实现PC与ZYNQ之间的USB通信_第18张图片

        1024字节包

通过libusb实现PC与ZYNQ之间的USB通信_第19张图片

        2048字节包

通过libusb实现PC与ZYNQ之间的USB通信_第20张图片

        4096字节包

通过libusb实现PC与ZYNQ之间的USB通信_第21张图片

6.2 interrupt模式

6.2.1 PC向ZYNQ单向发送数据

        8字节包

通过libusb实现PC与ZYNQ之间的USB通信_第22张图片

        64字节包

通过libusb实现PC与ZYNQ之间的USB通信_第23张图片

        256字节包

通过libusb实现PC与ZYNQ之间的USB通信_第24张图片

        1024字节包

通过libusb实现PC与ZYNQ之间的USB通信_第25张图片

        2048字节包

通过libusb实现PC与ZYNQ之间的USB通信_第26张图片

        4096字节包

通过libusb实现PC与ZYNQ之间的USB通信_第27张图片

6.2.2 PC与ZYNQ间数据回环

        实际速率需要将图中的速率乘以2倍

        8字节包

通过libusb实现PC与ZYNQ之间的USB通信_第28张图片

        64字节包

通过libusb实现PC与ZYNQ之间的USB通信_第29张图片

        256字节包

通过libusb实现PC与ZYNQ之间的USB通信_第30张图片

        1024字节包

通过libusb实现PC与ZYNQ之间的USB通信_第31张图片

        2048字节包

通过libusb实现PC与ZYNQ之间的USB通信_第32张图片

        4096字节包

通过libusb实现PC与ZYNQ之间的USB通信_第33张图片

你可能感兴趣的:(ZYNQ,usb,arm)