0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

C29F_xilinx_inc ? 來(lái)源:賽靈思 ? 作者:賽靈思 ? 2022-02-19 19:23 ? 次閱讀

1 概述

libusb是一個(gè)免費(fèi)的跨平臺(tái)USB庫(kù),本文在windows平臺(tái)下使用libusb庫(kù)開(kāi)發(fā)上位機(jī)程序與ZYNQ的USB接口進(jìn)行數(shù)據(jù)收發(fā)測(cè)試。libusb可以支持WinUSB驅(qū)動(dòng),因此為ZYNQ的USB接口設(shè)備安裝WinUSB驅(qū)動(dòng)。

libusb網(wǎng)址:https://libusb.info/

windows下開(kāi)發(fā)指南:https://github.com/libusb/libusb/wiki/Windows

2 libusb庫(kù)

https://libusb.info/可以下載libusb庫(kù),目前的最新版本是1.0.23。解壓后的目錄如下:

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

使用VS作為上位機(jī)驅(qū)動(dòng)的開(kāi)發(fā)環(huán)境,因此需要使用MS32或者M(jìn)S64文件夾下的dll和lib文件。以及include里的頭文件。

3 ZYNQ裸機(jī)程序設(shè)計(jì)

PS端的USB接口作為Endpoint Device。設(shè)計(jì)了3個(gè)Endpoint,分別為:

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

分別對(duì)應(yīng)控制傳輸、塊傳輸和中斷傳輸。

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

USB的PID設(shè)為0x0007,PID設(shè)為0x0001。

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

設(shè)計(jì)USB設(shè)備的字符串描述。

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

4 上位機(jī)測(cè)試程序設(shè)計(jì)

PC機(jī)作為HOST,調(diào)用libusb的API函數(shù)設(shè)計(jì)上位機(jī)程序,分別測(cè)試電腦與開(kāi)發(fā)板USB接口之間的BULK和interrupt模式傳輸速率。實(shí)現(xiàn)如下功能:

  • PC->ZYNQ BULK模式發(fā)送數(shù)據(jù)
  • PC->ZYNQ->PC BULK模式數(shù)據(jù)回環(huán)
  • PC->ZYNQ interrupt模式發(fā)送數(shù)據(jù)
  • PC->ZYNQ->PC interrupt模式數(shù)據(jù)回環(huán)

5 USB驅(qū)動(dòng)安裝

安裝libusb驅(qū)動(dòng)。使用Zadig軟件生產(chǎn)使用WinUSB內(nèi)核的USB驅(qū)動(dòng),選擇Create New Device。

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

選擇advance mode

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

選擇提取驅(qū)動(dòng)文件。

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

輸入設(shè)備名稱(chēng)ZYNQ USB DEVICE,VID 0x0007,PID0x0001。

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

選擇驅(qū)動(dòng)文件提取的存放目錄,然后點(diǎn)擊Extract Files

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

完成后,打開(kāi)驅(qū)動(dòng)文件所在目錄,可以找到生成的驅(qū)動(dòng)文件。

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

對(duì)于Win10系統(tǒng),首先要禁用數(shù)字簽名。將開(kāi)發(fā)板USB口與電腦連接,將程序通過(guò)SDK下載到開(kāi)發(fā)板中,此時(shí)電腦設(shè)備管理器提示發(fā)現(xiàn)新的USB設(shè)備。選擇設(shè)備,安裝上述目錄下已經(jīng)生成的USB驅(qū)動(dòng)程序。

6 USB傳輸速率測(cè)試

6.1 BULK模式

6.1.1 PC向ZYNQ單向發(fā)送

8字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

64字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

256字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

1024字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

2048字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

4096字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

6.1.2 PC與ZYNQ間數(shù)據(jù)回環(huán)

實(shí)際速率需要將圖中的速率乘以2倍

8字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

64字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

256字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

1024字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

2048字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

4096字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

6.2 interrupt模式

6.2.1 PC向ZYNQ單向發(fā)送數(shù)據(jù)

8字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

64字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

256字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

1024字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

2048字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

4096字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

6.2.2 PC與ZYNQ間數(shù)據(jù)回環(huán)

實(shí)際速率需要將圖中的速率乘以2倍

8字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

64字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

256字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

1024字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

2048字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信

4096字節(jié)包

通過(guò)libusb實(shí)現(xiàn)PC和ZYNQ之間的USB通信
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7947

    瀏覽量

    264795
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6034

    瀏覽量

    136037
  • PC
    PC
    +關(guān)注

    關(guān)注

    9

    文章

    2084

    瀏覽量

    154260
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何實(shí)現(xiàn)51單片機(jī)與PC機(jī)的串行通信

    51單片機(jī)與PC機(jī)的串行通信是一種常見(jiàn)的通信方式,它允許單片機(jī)通過(guò)串行接口與PC機(jī)進(jìn)行數(shù)據(jù)交換。這種通信
    的頭像 發(fā)表于 10-21 11:35 ?988次閱讀

    如何實(shí)現(xiàn)ESP32-S2 CDC與PC端的通信

    CDC數(shù)據(jù)包完全沒(méi)有。 目前S2 USB OTG的資料實(shí)在太少,不知道到底要如何實(shí)現(xiàn)S2 CDC與PC端的通信
    發(fā)表于 06-25 08:29

    使用Cypress驅(qū)動(dòng)的設(shè)備,無(wú)法通過(guò)libusb_open打開(kāi)設(shè)備怎么解決?

    而且Cypress的官方驅(qū)動(dòng)似乎跟 libusb 不兼容,因?yàn)槲沂褂?Cypress 驅(qū)動(dòng)的設(shè)備,無(wú)法通過(guò) libusb_open打開(kāi)設(shè)備,但是基于 winusb 的驅(qū)動(dòng)可以
    發(fā)表于 05-22 06:30

    使用libusb可以打開(kāi)libusb設(shè)備,但是無(wú)法燒寫(xiě)固件,怎么解決?

    我使用libusb可以打開(kāi)libusb設(shè)備,但是無(wú)法燒寫(xiě)固件,我需要在執(zhí)行燒錄固件之前,還需要做什么步驟
    發(fā)表于 05-21 07:40

    libusb + STM32F4 + USB3300軟件運(yùn)行中異常關(guān)閉,,如何清除USB軟件異常關(guān)閉后的殘余數(shù)據(jù)?

    libusb + STM32F4 + USB3300軟件運(yùn)行中異常關(guān)閉,ARM發(fā)送給PC的數(shù)據(jù),PC沒(méi)有讀 軟件重啟后,讀回的數(shù)據(jù)錯(cuò)位。剛開(kāi)始收到的是上次的殘余數(shù)據(jù)。怎么處理能清除殘余
    發(fā)表于 04-22 07:42

    STM32L476 run報(bào)錯(cuò)Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED的原因?

    project 沒(méi)錯(cuò)誤, 但是run的話console會(huì)有報(bào)錯(cuò),求大神指導(dǎo)。 Error: libusb_open() failed with LIBUSB
    發(fā)表于 04-10 07:57

    STM32H743以太網(wǎng)與高速USB同時(shí)工作遇到的疑問(wèn)求解

    報(bào)文的時(shí)候,高速USB也進(jìn)行收發(fā)報(bào)文,則USB通信會(huì)偶發(fā)性異常,PC端使用的是libusb,PC
    發(fā)表于 04-09 07:53

    關(guān)于stm32u575芯片作為usb device和PC實(shí)現(xiàn)雙向通信的疑問(wèn)

    平臺(tái):STM32U575qii-EV板 模塊:USBX,ThreadX 目的:stm32u575芯片作為usb device和PC實(shí)現(xiàn)雙向通信,device為HID Custom類(lèi) 現(xiàn)
    發(fā)表于 03-13 06:56

    CYUSB3014與PC通信幾小時(shí)后斷開(kāi)的原因?怎么解決?

    PC是WIN7系統(tǒng),PC端APP通過(guò)USB3與下位機(jī)通信幾個(gè)小時(shí)以后,通信就會(huì)斷開(kāi),
    發(fā)表于 02-29 08:14

    cy7c68013a固件已經(jīng)配置成異步slave模式,是否有MCU用IO口控制cy7c68013a通過(guò)數(shù)據(jù)總線來(lái)實(shí)現(xiàn)PCUSB通信?

    cy7c68013a的固件已經(jīng)配置成異步slave模式,是否有MCU用IO口控制cy7c68013a通過(guò)數(shù)據(jù)總線來(lái)實(shí)現(xiàn)PCUSB通信,
    發(fā)表于 02-27 08:14

    如何排查FPGA與USB之間的芯片通信問(wèn)題?

    ”,而在SBBulkSourceSink固件中沒(méi)有顯示這個(gè)錯(cuò)誤,可不可以證明我的FPGA和USB之間通信成功?另外,我該如何排查FPGA與USB之間
    發(fā)表于 02-27 06:46

    什么是USB HOST、USB Slave和USB OTG?它們之間有什么區(qū)別?

    什么是USB HOST、USB Slave和USB OTG?它們之間有什么區(qū)別? USB(通用串行總線)是一種用于連接設(shè)備的
    的頭像 發(fā)表于 02-02 15:32 ?1.3w次閱讀

    請(qǐng)問(wèn)雙電源供電的USB設(shè)備如何與PC通信?

    雙電源供電的USB設(shè)備如何與PC通信
    發(fā)表于 01-24 07:19

    USB設(shè)備之間是怎么同步時(shí)鐘的?所有USB設(shè)備的時(shí)鐘頻率都是一致的嗎?

    USB設(shè)備之間是怎么同步時(shí)鐘的?是所有USB設(shè)備的時(shí)鐘頻率都是一致的嗎? USB設(shè)備之間的時(shí)鐘同步是通過(guò)
    的頭像 發(fā)表于 01-16 14:42 ?2416次閱讀

    USB接口不能直接通過(guò)雙頭USB數(shù)據(jù)線直連的主要原因

    ,USB接口不能直接通過(guò)雙頭USB數(shù)據(jù)線直連的主要原因包括以下幾點(diǎn)。 首先,USB接口的設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)全球統(tǒng)一的外設(shè)接口標(biāo)準(zhǔn)。為了
    的頭像 發(fā)表于 01-09 14:00 ?1726次閱讀