前言
最近在使用Python設(shè)計上位機,下位機是ZYNQ7000,兩者通過USB進行數(shù)據(jù)傳輸。該文章是USB通信過程的踩坑記錄
一、安裝所需庫
首先,安裝pyusb和libusb兩個庫,命令如下:
pip install pyusb
pip install libusb
如圖所示:
二、Python測試USB通信
輸入程序:
import usb.core
all_devs = usb.core.find(find_all = True)
for dev in all_devs:
print(dev)
報錯 usb.core.NoBackendError: No backend available,如圖所示:
三、usb.core.NoBackendError: No backend available錯誤解決
安裝libusb1包,命令如下:
pip install libusb1
如圖所示:
找到 libusb-1.0.dll 文件,路徑如圖所示:
將 libusb-1.0.dll 復(fù)制粘貼到如圖所示路徑:
再次運行程序,運行成功,如圖所示:
四、Python測試USB讀寫數(shù)據(jù)
USB設(shè)備的idVendor與idProduct,如果已經(jīng)安裝過驅(qū)動,可以在設(shè)備管理器->USB設(shè)備->屬性中查看,如果USB設(shè)備沒有驅(qū)動,下載Zadig工具(下面會提到,請繼續(xù)往下看)
import usb.core
dev = usb.core.find(idVendor= 0x04B4, idProduct= 0x00F0)
print(dev) #USB設(shè)備的枚舉信息
#設(shè)備配置,使能端點
dev.set_configuration()
#定義端點寫函數(shù)
def write_bulk_out_ep(data):
while(True):
try:
data = dev.write(0x01, data, 1000) #write(endpoint, data, timeout = None)
print(data)
break
except Exception as e:
print(e)
#定義端點讀寫函數(shù)
def read_bulk_in_ep(len):
while(True):
try:
data = dev.read(0x81, len, 3000) #read(endpoint, size_or_buffer, timeout = None)
print(data)
break
except Exception as e:
print(e)
data = bytes.fromhex('7e 7e 00 01 01')
write_bulk_out_ep(data)
read_bulk_in_ep(10)
運行報錯 NotImplementedError: Operation not supported or unimplemented on this platform 忘記截圖了
五、解決 NotImplementedError: Operation not supported or unimplemented on this platform錯誤
下載Zadig工具,給USB設(shè)備安裝或更新驅(qū)動,下載鏈接 https://zadig.akeo.ie/
點擊Option,勾選List All Devices,選擇需要操作的設(shè)備,驅(qū)動選擇WinUSB,點擊Install Driver即可,如圖所示:
注意:
由于下位機的USB驅(qū)動我已經(jīng)安裝,這里是更改驅(qū)動。更改設(shè)備驅(qū)動將會導(dǎo)致該設(shè)備原來的功能不能使用,所以請謹慎操作,最好選擇沒用的設(shè)備或自己開發(fā)的USB設(shè)備進行測試
最終再次運行程序,USB讀寫數(shù)據(jù)成功,如圖所示:
請注意,程序中
usb.core.find(idVendor= 0x04B4, idProduct= 0x00F0)的idVendor和idProduct
dev.write(0x01, data, 1000) 的endpoint:0x01
dev.read(0x81, len, 3000)的endpoint:0x81
根據(jù)自己USB設(shè)備信息的實際情況填寫
希望本文對大家有幫助,上文若有不妥之處,歡迎指正文章來源:http://www.zghlxwxcb.cn/news/detail-724319.html
分享決定高度,學(xué)習(xí)拉開差距文章來源地址http://www.zghlxwxcb.cn/news/detail-724319.html
到了這里,關(guān)于手把手一起完成Python上位機與下位機USB通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!