跳转到主要内容

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

匿名 (未验证) 提交于

版权声明:本文为CSDN博主「MmikerR」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MmikerR/article/details/106497732

<strong>1 概述</strong>

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

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

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

<strong>2 libusb库</strong>

https://libusb.info/可以下载libusb库,目前的最新版本是1.0.23。解压后的目录如下:
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

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

<strong>3 ZYNQ裸机程序设计</strong>

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

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

分别对应控制传输、块传输和中断传输。
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

USB的PID设为0x0007,PID设为0x0001。
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

设计USB设备的字符串描述。
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

<strong>4 上位机测试程序设计</strong>

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

<li>PC->ZYNQ BULK模式发送数据</li>
<li>PC->ZYNQ->PC BULK模式数据回环</li>
<li>PC->ZYNQ interrupt模式发送数据</li>
<li>PC->ZYNQ->PC interrupt模式数据回环</li>

<strong>5 USB驱动安装</strong>

安装libusb驱动。使用Zadig软件生产使用WinUSB内核的USB驱动,选择Create New Device。
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

选择advance mode
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

选择提取驱动文件。
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

输入设备名称ZYNQ USB DEVICE,VID 0x0007,PID0x0001。
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

选择驱动文件提取的存放目录,然后点击Extract Files
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

完成后,打开驱动文件所在目录,可以找到生成的驱动文件。
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

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

<strong>6 USB传输速率测试</strong>

<strong>6.1 BULK模式</strong>

<strong>6.1.1 PC向ZYNQ单向发送</strong>

8字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

64字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

256字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

1024字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

2048字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

4096字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

<strong>6.1.2 PC与ZYNQ间数据回环</strong>

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

8字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

64字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

256字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

1024字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

2048字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

4096字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

<strong>6.2 interrupt模式</strong>

<strong>6.2.1 PC向ZYNQ单向发送数据</strong>

8字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

64字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

256字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

1024字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

2048字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

4096字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

<strong>6.2.2 PC与ZYNQ间数据回环</strong>

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

8字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

64字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

256字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

1024字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

2048字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>

4096字节包
<center><img src="http://xilinx.eetrend.com/files/2021-12/%E5%8D%9A%E5%AE%A2/100556402-23…; alt=""></center>