目录
一、安装pyusb
二、下载工具zadig
三、确认目标USB设备
四、为目标设备安装USB驱动
五、测试代码
六、小结
1. 关于环境搭建
2. 关于总线上的数据
环境:
Win10专业版+Python3.8.7
一、安装pyusb
命令
pip install pyusb |
二、下载工具zadig
Zadig是一个图形化工具,可以为USB设备一键选择所需安装的所有驱动。
下载链接:Zadig - USB driver installation made easy (akeo.ie)
下载得到的应该是一个可执行文件zadig-2.7.exe
三、确认目标USB设备
设备管理器中的目标USB设备应该是“其他设备”,且驱动应该是没有在安装的。
四、为目标设备安装USB驱动
双击打开zadig-2.7.exe,选中目标设备,可核对设备名称以及设备PID和VID。
单击“Install Driver”
安装中
安装结束,关闭对话框即可。
这时候PC上的USB设备状态发生了改变
五、测试代码
USB设备有两个端点,且属于Bulk端点,端点描述符如下:
===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x82 -> Direction: IN - EndpointID: 2
bmAttributes: 0x02 -> Bulk Transfer Type
wMaxPacketSize: 0x0200 = 0x200 max bytes
bInterval: 0x00
===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x03 -> Direction: OUT - EndpointID: 3
bmAttributes: 0x02 -> Bulk Transfer Type
wMaxPacketSize: 0x0200 = 0x200 max bytes
bInterval: 0x00
要进行数据通信,需要关注三个字段:(1)端点号(2)端点类型(3)端点最大包长
文件:bulk_ep_wr.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
import usb.util
import sys
dev = usb.core.find(idVendor= 0x0000, idProduct= 0xFF00)
if dev is None:
raise ValueError('Device not found')
#print(dev) #USB设备的枚举信息
#设备配置,使能端点
dev.set_configuration()
#定义端点写函数
def write_bulk_out_ep(data):
while(True):
try:
data = dev.write(0x03, data, 1000) #write(endpoint, data, timeout = None)
print(data)
break
except Exception as e:
print(e)
#定义端点读写函数
def read_bulk_in_ep(len):
while(True):
try:
data = dev.read(0x82, len, 3000) #read(endpoint, size_or_buffer, timeout = None)
print(data)
break
except Exception as e:
print(e)
#数据写测试
data = [0x02] * 512
write_bulk_out_ep(data)
#数据读测试
#read_bulk_in_ep(512)
脚本的功能就是数据读写,即往OUT端点写512个字节,从IN端点中读出512字节。
数据通信设计USB协议内容,USB硬件端点FIFO要被数据接收方读走(且读完)才能继续进行下一笔数据通信,可以理解为Device与Host之间的数据传输是同步操作的。比如:HOST往OUT端点写一笔512字节的数据,Device要先读走,否则Host无法发出下一笔。
总线上数据如下:
六、小结
1. 关于环境搭建
单独安装libusb-win32没法解决问题,会有如下错误:
usb.core.USBError: [Errno 2] Entity not found
或者:
permission denied 等等错误。
这是因为,除了libusb-win32还需要安装libusbK等库,我们可以看zadig安装了哪一些:
所以单独去安装这些东西,就会有各种各样的问题(漏安装,版本不兼容等),最好的做法就是直接使用zadig一次性安装完毕。
2. 关于总线上的数据
Bushound工具可以下发数据,但是没法读数据。包括一些大型的协议分析仪设备,当HOST端读走IN端点FIFO里面的数据后,总线上才能抓到数据。