目录

前言

尽管现在USB技术飞速发展,USB传输的速度在不断的提高,但是CY7C68013这款芯片在某些低速场景下仍然适用。因此,基于Python开发出其对应的上位机具有一定的现实需求。然而,笔者在实际开发过程中遇到了很多问题,最致命的问题就是Python如何接收到USB传来的数据,即驱动的安装。

现有的文章综合体来说给出了一个解决方案,但是写的比较晦涩难懂,亦或是不能解决笔者在实际开发中遇到的问题,故写下这篇文章记录一下基于Pyusb库的CY7C68013芯片上位机开发。

1、驱动安装

驱动的应该遵循以下步骤安装:

1)安装CySuiteUSB_3_4_7_B204.exe,这个是厂家提供的驱动,据说不适用于win10系统,后面需要更新;

2)在插上CY7C68013设备,在资源管理器中找到设备,手动更新驱动,指定文件夹为Win7_8_10_Drivers(文末提供);

3)下载libusb-1.0.20的压缩包,选择MS64\dll\libusb-1.0.dll,复制到C:\Windows\System32(文末提供libusb-1.0.dll,以及libusb-1.0.20的压缩包)

4)选择同目录下的libusb-1.0.lib到Python环境,我用的环境是conda的Python,所以就复制到C:\Anaconda3\Lib下(文末提供libusb-1.0.lib)

5)此时,务必使用zadig再一次安装驱动,打开zadig,找到设备EZ-USB,它默认的驱动是CYUSB,需要更新为libusb-win32,这一个过程时间可能稍长。另外,经过这一个操作以后,在win中的资源管理器里面已经找不到设备了,但是不妨碍我们使用,并且在开发中USB口不能够更换,否者也会找不到设备;

6)安装pyusb库,pycharm中可能找不到这个库,直接在Terminal中输入 pip install pyusb,回车即可

7)至此,USB的驱动已经全部开发完毕。

2、USB开发

在python开发USB真的非常简单,只需要简单的几句代码,对于高速的数据传输,建议新开一个线程专门用来接收数据

import usb.util

class MyUSB:

"""

操作USB相关的类

"""

# USB设备初始化

def __init__(self, idVendor=0x04B4, idProduct=0x1004): # idVendor=0x04B4, idProduct=0x1004

super().__init__()

self.USBData = 0 # USB接收到的数据

self.USBUpdateFlag = False # USB接收到数据更新

# USB设备信息

self.idVendor = idVendor

self.idProduct = idProduct

# USB设备对象

self.dev = None

# 接收USB数据

def rx_loop(self):

self.dev = usb.core.find(idVendor=self.idVendor, idProduct=self.idProduct)

if self.dev is None:

raise ValueError('Device not found')

else:

self.dev.set_configuration()

while True:

try:

a = self.dev.read(0x86, 1024, 1000)

print(a)

except Exception as e:

print(e)

# 写USB数据

def tx_loop(self):

while True:

try:

data = self.dev.write() # write(endpoint, data, timeout = None)

print(data)

except Exception as e:

print(e)

3、一些资源

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐