完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用python脚本调用cyusb.dll,发送数据正常,但是接收数据全是0;用脚本发送数据,用软件接收可以收到;软件发送数据,脚本接收到的全是0,应该是接收到数据了,不知道是哪里出错了,哪位大佬能给个建议。
python脚本: import clr import os import sys import time import ctypes as c import binascii # 添加CyUSB.dll引用 dll_path = os.path.abspath("C:/Users/PDA/Desktop/cypress/CYUSB301/CyUSB.dll") sys.path.append(dll_path) clr.AddReference("C:/Users/PDA/Desktop/cypress/CYUSB301/CyUSB") # 导入CyUSB命名空间 from CyUSB import USBDeviceList, CyConst, CyUSBDevice, CyBulkEndPoint, CyControlEndPoint, CyIsocEndPoint def find_device(vid, pid usb_devices = USBDeviceList(CyConst.DEVICES_CYUSB) device = None for dev in usb_devices: if dev.VendorID == vid and dev.ProductID == pid: device = dev break return device, usb_devices def send_data(device, endpoint_addr, data endpoint = device.EndPointOf(endpoint_addr) if endpoint is None: print(f"无法找到端点地址: {endpoint_addr}") return buffer = bytearray(data) bytes_written = endpoint.XferData(buffer, len(buffer)) print(f"数据发送成功, 发送字节数: {bytes_written}") return bytes_written def receive_data(device, endpoint_addr, size endpoint = device.EndPointOf(endpoint_addr) if endpoint is None: print(f"无法找到端点地址: {endpoint_addr}") return buffer = bytearray(size) endpoint.TimeOut = 20 bytes_read = endpoint.XferData(buffer, len(buffer)) print(f"数据接收成功, 接收字节数: {bytes_read}") print(buffer) print(binascii.b2a_hex(buffer)) return None#buffer[:bytes_read] def main(): # 替换为你的设备的VID和PID VID = 0x04B4 # Vendor ID PID = 0x00F1 # Product ID # 查找并配置设备 usb_devices = USBDeviceList(CyConst.DEVICES_CYUSB) device = usb_devices[VID, PID] if device is None: print("设备未找到") return print("设备已连接") # 设置端点地址(替换为你的设备的端点地址) IN_ENDPOINT = 0x81 # 输入端点地址 OUT_ENDPOINT = 0x01 # 输出端点地址 # 发送数据到设备 out_data = [0xaa, 0xbb, 0xcc, 0xdd, 0x0e, 0x06, 0x07, 0x08, 0x09, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x01, 0xa2, 0x03, 0x04, 0x05, 0xf6, 0xf7, 0x08, 0x09, 0x01, 0x02, 0x03] send_data(device, OUT_ENDPOINT, out_data) time.sleep(1) receive_data(device, IN_ENDPOINT, 1024) # 假设接收64字节数据 print(device.bHighSpeed) # 释放资源 usb_devices.Dispose() if __name__ == "__main__": main() |
|
相关推荐
1个回答
|
|
根据您提供的信息,我将尝试分析可能导致接收数据异常的原因,并提供一些建议。以下是我分析的步骤:
1. 首先,确保您的CyUSB3014设备已正确连接并被系统识别。检查设备管理器以确认设备状态。 2. 检查您的Python脚本是否正确调用了cyusb.dll。从您提供的代码片段来看,您已经成功地添加了CyUSB.dll的引用。但是,请确保您已经导入了CyUSB命名空间并正确使用了其功能。 3. 检查您的脚本是否正确地初始化了CyUSB3014设备。在调用任何发送或接收数据的功能之前,您需要确保设备已正确初始化。 4. 检查您的脚本在发送数据后是否正确地等待接收数据。可能存在发送和接收数据之间的时间差,导致接收到的数据不正确。 5. 检查您的脚本是否正确地处理了接收到的数据。确保您正确地读取了接收缓冲区,并将其转换为所需的数据格式。 6. 如果可能,请尝试使用其他编程语言或工具来测试CyUSB3014设备。这将帮助您确定问题是否出在Python脚本或cyusb.dll上。 7. 检查您的设备驱动程序是否为最新版本。过时的驱动程序可能会导致通信问题。 8. 如果问题仍然存在,您可以尝试联系Cypress技术支持以获取更多帮助。 希望这些建议能帮助您找到问题所在并解决接收数据异常的问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5659 浏览 2 评论
4084 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3599 浏览 9 评论
1209 浏览 8 评论
3503 浏览 7 评论
423浏览 2评论
253浏览 2评论
360浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5661浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
428浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 02:08 , Processed in 0.455583 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号