0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

C29F_xilinx_inc 来源:赛灵思 作者:赛灵思 2022-02-19 19:23 次阅读

1 概述

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

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

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

2 libusb库

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

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

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

3 ZYNQ裸机程序设计

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

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

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

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

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

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

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

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

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通信

选择advance mode

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

选择提取驱动文件。

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

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

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

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

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

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

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

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

6 USB传输速率测试

6.1 BULK模式

6.1.1 PC向ZYNQ单向发送

8字节包

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

64字节包

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

256字节包

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

1024字节包

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

2048字节包

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

4096字节包

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

6.1.2 PC与ZYNQ间数据回环

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

8字节包

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

64字节包

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

256字节包

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

1024字节包

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

2048字节包

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

4096字节包

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

6.2 interrupt模式

6.2.1 PC向ZYNQ单向发送数据

8字节包

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

64字节包

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

256字节包

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

1024字节包

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

2048字节包

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

4096字节包

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

6.2.2 PC与ZYNQ间数据回环

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

8字节包

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

64字节包

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

256字节包

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

1024字节包

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

2048字节包

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

4096字节包

通过libusb实现PC和ZYNQ之间的USB通信
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    7900

    浏览量

    264002
  • 通信
    +关注

    关注

    18

    文章

    5974

    浏览量

    135861
  • PC
    PC
    +关注

    关注

    9

    文章

    2066

    浏览量

    154030
收藏 人收藏

    评论

    相关推荐

    如何实现51单片机与PC机的串行通信

    51单片机与PC机的串行通信是一种常见的通信方式,它允许单片机通过串行接口与PC机进行数据交换。这种通信
    的头像 发表于 10-21 11:35 413次阅读

    如何实现ESP32-S2 CDC与PC端的通信

    CDC数据包完全没有。 目前S2 USB OTG的资料实在太少,不知道到底要如何实现S2 CDC与PC端的通信
    发表于 06-25 08:29

    使用Cypress驱动的设备,无法通过libusb_open打开设备怎么解决?

    而且Cypress的官方驱动似乎跟 libusb 不兼容,因为我使用 Cypress 驱动的设备,无法通过 libusb_open打开设备,但是基于 winusb 的驱动可以
    发表于 05-22 06:30

    使用libusb可以打开libusb设备,但是无法烧写固件,怎么解决?

    我使用libusb可以打开libusb设备,但是无法烧写固件,我需要在执行烧录固件之前,还需要做什么步骤
    发表于 05-21 07:40

    libusb + STM32F4 + USB3300软件运行中异常关闭,,如何清除USB软件异常关闭后的残余数据?

    libusb + STM32F4 + USB3300软件运行中异常关闭,ARM发送给PC的数据,PC没有读 软件重启后,读回的数据错位。刚开始收到的是上次的残余数据。怎么处理能清除残余
    发表于 04-22 07:42

    STM32L476 run报错Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED的原因?

    project 没错误, 但是run的话console会有报错,求大神指导。 Error: libusb_open() failed with LIBUSB
    发表于 04-10 07:57

    STM32H743以太网与高速USB同时工作遇到的疑问求解

    报文的时候,高速USB也进行收发报文,则USB通信会偶发性异常,PC端使用的是libusbPC
    发表于 04-09 07:53

    关于stm32u575芯片作为usb device和PC实现双向通信的疑问

    平台:STM32U575qii-EV板 模块:USBX,ThreadX 目的:stm32u575芯片作为usb device和PC实现双向通信,device为HID Custom类 现
    发表于 03-13 06:56

    CYUSB3014与PC通信几小时后断开的原因?怎么解决?

    PC是WIN7系统,PC端APP通过USB3与下位机通信几个小时以后,通信就会断开,
    发表于 02-29 08:14

    cy7c68013a固件已经配置成异步slave模式,是否有MCU用IO口控制cy7c68013a通过数据总线来实现PCUSB通信

    cy7c68013a的固件已经配置成异步slave模式,是否有MCU用IO口控制cy7c68013a通过数据总线来实现PCUSB通信
    发表于 02-27 08:14

    如何排查FPGA与USB之间的芯片通信问题?

    ”,而在SBBulkSourceSink固件中没有显示这个错误,可不可以证明我的FPGA和USB之间通信成功?另外,我该如何排查FPGA与USB之间
    发表于 02-27 06:46

    什么是USB HOST、USB Slave和USB OTG?它们之间有什么区别?

    什么是USB HOST、USB Slave和USB OTG?它们之间有什么区别? USB(通用串行总线)是一种用于连接设备的
    的头像 发表于 02-02 15:32 1.2w次阅读

    请问双电源供电的USB设备如何与PC通信

    双电源供电的USB设备如何与PC通信
    发表于 01-24 07:19

    USB设备之间是怎么同步时钟的?所有USB设备的时钟频率都是一致的吗?

    USB设备之间是怎么同步时钟的?是所有USB设备的时钟频率都是一致的吗? USB设备之间的时钟同步是通过
    的头像 发表于 01-16 14:42 2176次阅读

    USB接口不能直接通过双头USB数据线直连的主要原因

    USB接口不能直接通过双头USB数据线直连的主要原因包括以下几点。 首先,USB接口的设计目标是实现全球统一的外设接口标准。为了
    的头像 发表于 01-09 14:00 1599次阅读