我在 Macbook Air 和连续流式传输十六进制数据的微控制器传感器之间有一个 USB 连接。我正在尝试在 Python 中使用 PyUSB 来获取数据。我使用 PyUSB 像这样连接到微控制器:
import usb
dev = usb.core.find(idVendor=0xXXXX, idProduct=0xXXXX)
dev.set_configuration()
cfg = dev.get_active_configuration()
intf = cfg[(0,0)]
ep = usb.util.find_descriptor(intf,custom_match = lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)
然后我尝试使用 dev.read() 方法将设备中的数据读取到数组中,该方法第一次起作用:
dev.read(0x1,100,100)
这产生了一个长度为 100 的数组,但是在我多次调用 dev.read(0x1,100,100) 之后(并获得了更多数组),我开始收到此错误:
dev.read(0x1,100,100)
Traceback (most recent call last):
File "stdin", line 1, in <module>
File "/Users/dimachy/anaconda/lib/python2.7/site-packages/usb/core.py", line 918, in read
self.__get_timeout(timeout))
File "/Users/dimachy/anaconda/lib/python2.7/site-packages/usb/backend/libusb1.py", line 777, in bulk_read
timeout)
File "/Users/dimachy/anaconda/lib/python2.7/site-packages/usb/backend/libusb1.py", line 880, in __read
_check(retval)
File "/Users/dimachy/anaconda/lib/python2.7/site-packages/usb/backend/libusb1.py", line 560, in _check
raise USBError(_str_error[ret], ret, _libusb_errno[ret])
usb.core.USBError: [Errno 60] Operation timed out
为什么会这样?我怀疑我不了解缓冲区在数据传输过程中如何在各个地方存储数据,但无法找到对正在发生的事情的明确解释。