pyusb使用

pyusb使用

1、安装pyusb

pip install pyusb

安装完成后运行以下代码查找所有usb设备

import usb.util

# with pure PyUSB
for dev in usb.core.find(find_all=True):
    print(dev)

注意:如果出现usb.core.NoBackendError: No backend available报错则说明需要安装libusb

2、安装libusb

pip install pyocd

查找所有usb设备

import libusb_package

# with pyocd/libusb-package
for dev in libusb_package.find(find_all=True):
    print(dev)
    print("-------"*10)

3、往usb写入数据

import usb.core
import usb.util
import os
import libusb_package
import usb.backend.libusb1

libusb1_backend = usb.backend.libusb1.get_backend(find_library=libusb_package.find_library)

dev = usb.core.find(idVendor=0x03eb, idProduct=0x2421, backend=libusb1_backend)
# print("dddd:", dev)
# was it found?
if dev is None:
    raise ValueError('Device not found')

# set the active configuration. With no arguments, the first
# configuration will be the active one
dev.set_configuration()

packet = [85, 170, 17, 1, 0, 31, 102, 153]
packet = packet + (64-len(packet))*[0]

dev.write(0x01, packet, timeout=1000)
data = dev.read(0x81, 64, timeout=1000)
print(data)

获取配置信息并配置usb然后读取数据

import usb.core
import usb.util
import os
import libusb_package
import usb.backend.libusb1

libusb1_backend = usb.backend.libusb1.get_backend(find_library=libusb_package.find_library)

dev = usb.core.find(idVendor=0x03eb, idProduct=0x2421, backend=libusb1_backend)

# was it found?
if dev is None:
    raise ValueError('Device not found')

dev.set_configuration()
cfg = dev.get_active_configuration()
intf = cfg[(0, 0)]

#  match the first OUT endpoint
epo = usb.util.find_descriptor(intf, custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)
epi = usb.util.find_descriptor(intf, custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN)

# print("eeeee11: ", epo)
# print("eeeee22: ", epi)

packet = [85, 170, 17, 1, 0, 31, 102, 153]
packet = packet + (64-len(packet))*[0]

epo.write(packet, timeout=1000)
data = epi.read(64, timeout=1000)
print(data)

注意:当遇到usb.core.USBError: [Errno 5] Input/Output Error报错时

1)检查usb打开的是否正确

2)检查写入的数据长度是否正确

3)检查写入的端点是否正确,往usb写如家要往“ENDPOINT 0x1: Interrupt OUT”中写数据,读数据要从“ENDPOINT 0x81: Interrupt IN”中读数据

posted @ 2024-02-04 14:29  平平无奇小辣鸡  阅读(1266)  评论(0编辑  收藏  举报