Python中pyusb的开发及使用

Python中pyusb的开发及使用

因为项目的需求,需要将FPGA端的图像像素数据经过USB2.0协议传输到PC端,因此需要使用python的pyusb库来进行数据的发送和接收。以下纪录在使用pyusb库的方法和所遇到的问题。

一、USB接口介绍

在本次的开发过程中,我的FPGA开发板上所使用的是Cypress公司EZ-USB系列的CY7C68013A驱动芯片进行USB数据传输,CY7C68013A是一款含高速USB2.0通信协议及兼容的8051控制芯片,在此芯片中含16KB的内部RAM,不需外加存储器就可以直接运行固件程序。CY7C68013A的内部8051处理器的工作频率可以为48MHz,24MHz,12MHz,在我的FPGA开发板上使用的是24MHz的作为时钟输入。CY7C68013A内部集成了4个FIFO,大小共为4K字节,用户可以通过设置让其工作在Master或Slave模式。CY7C68013A含有一个I2C接口用于连接外部的EEPROM,用户先把写好的固件程序.iic文件下载到EEPROM,CY7C68013A上电启动时会自动读取EEPROM的程序到内部的RAM开始运行。
本次项目中使用到的CY7C68013A芯片配置固件程序使其工作在Slave FIFO异步读写模式,其中设置EP2、EP4的FIFO为数据输出端口,EP6、EP8的FIFO为数据输入端口,每个端口含有两个512字节的FIFO,如果一个512字节的端口被读空或者写满,硬件会自动切换到另一个512字节的FIFO。关于USB硬件的介绍到此结束,如需更改CY7C68013A的工作模式,端口、信号的配置,可以详细了解CY7C68013A的固件程序进行修改。

二、USB的驱动安装

1、

在此链接下载libusb库。

2、

双击安装,选择对应的usb接口,install ,生成 LibUSB-Win32 文件夹,(一路next就不贴图了)

3、

在LibUSB-Win32 文件夹下的bin目录下,点击inf-wizard安装驱动,生成USB驱动信息,保存在任意目录下。
Python中pyusb的开发及使用_第1张图片
Python中pyusb的开发及使用_第2张图片
Python中pyusb的开发及使用_第3张图片

4、

在设备管理器中选择需要安装的USB接口,选择更新驱动程序,浏览到刚才生成的USB驱动信息的目录,开始更新驱动,完成驱动的安装。
Python中pyusb的开发及使用_第4张图片
Python中pyusb的开发及使用_第5张图片

5、

注意驱动信息中的Vender ID和Product ID
Python中pyusb的开发及使用_第6张图片

三、 pyusb库的安装

这一步没什么细说的,cmd直接运行

pip install pyusb

四、 pyusb的开发

新建python工程,导入需要的USB库,代码如下

import usb.util

# find our device
dev = usb.core.find(idVendor=0x04B4,idProduct=0x1004)
print(dev)
# was it found?
if dev is None:
    raise ValueError('Device not found')

其中的idVendor=0x04B4,idProduct=0x1004,替换为你刚才安装的usb驱动时的Vender ID和Product ID
运行程序会打印出USB 接口的相关信息。
Python中pyusb的开发及使用_第7张图片
接着进行USB的读写,贴代码如下

# set the active configuration. With no arguments, the first
# configuration will be the active one
dev.set_configuration()
def rx_loop():
        while(True):  
            try:
                data = dev.read(0x86,512,1000)  #read(endpoint, size_or_buffer, timeout = None)
                print(data)
            except Exception as e:
                print(e)
            
def tx_loop():
        while(True):  
            try:
                data = dev.write(0x88,0x55,1000)  #write(endpoint, data, timeout = None)
                print(data)
            except Exception as e:
                print(e)

上述的读写模块中的read、write函数中的各参数在其后分别进行了备注,请自行修改
分别运行读写模块进行USB 的读写测试。请注意,因为我所使用到的FPGA开发板上的USB的芯片的特性,4个FIFO 的空间容量为512字节,因此在我上位机的读的模块(read)中设置一次读取的长度为512字节,如果小于512字节将导致读取不到数据的问题发生,同样对应写模块(write),也需要写满512字节后,FPGA端才会接收到PC端发送过去的数据。
到此关于使用python的pyusb库进行USB的开发就算时完成了,因为本次项目所用到的都时USB的基础收发功能,所以程序就比较简略,如需进行更加深入的开发,请自行做进一步的开发。

如需转载,请注明出处

你可能感兴趣的:(python)