gpt4 book ai didi

assembly - 使用 LIB-USB 传输随机字节数时如何修复 "Error -5"?

转载 作者:行者123 更新时间:2023-12-01 03:01:56 25 4
gpt4 key购买 nike

我在使用 LIB-USB 的 USB 项目时遇到问题. USB 设备基于 PIC18F4550,具有单个控制端点。 PC 前端是用 MSVC 编写的,使用 Lib-Usb 1.12。

在 PC 端,程序首先设置配置,声明接口(interface),然后发送(和接收)控制消息(特定于供应商),所有这些都成功。在传输了看似随机的字节数之后(100 到 2000 之间的任意位置),传输停止并显示 。错误 rc=-5 从 usb_control_msg 调用返回。

在 PC 端,调用如下所示:

ret = usb_set_configuration(udev, 1);  
ret = usb_claim_interface(udev, 0);
ret = usb_control_msg(udev, USB_TYPE_VENDOR|USB_RECIP_DEVICE, CMD_RESET, 0, 0, buffer, 0, 100);
ret = usb_control_msg(udev, 0xC0, GET_FIFO_DATA, 0, 0, buffer, 8, 100);

最后一个调用,实际上是从 USB 设备获取数据,连续运行了很多次,但总是在以这种方式传输随机数量的字节(总共 100 到 2000 个)后终止。将管道更改为 EP1 会执行相同的操作,但最终会出现相同的错误。

在 USB 设备 (PIC) 端,描述符非常简单,只有 EP0 管道,如下所示:
Device
db 0x12, DEVICE ; bLength, bDescriptorType
db 0x10, 0x01 ; bcdUSB (low byte), bcdUSB (high byte)
db 0x00, 0x00 ; bDeviceClass, bDeviceSubClass
db 0x00, MAX_PACKET_SIZE ; bDeviceProtocol, bMaxPacketSize
db 0xD8, 0x04 ; idVendor (low byte), idVendor (high byte)
db 0x01, 0x00 ; idProduct (low byte), idProduct (high byte)
db 0x00, 0x00 ; bcdDevice (low byte), bcdDevice (high byte)
db 0x01, 0x02 ; iManufacturer, iProduct
db 0x00, NUM_CONFIGURATIONS ; iSerialNumber (none), bNumConfigurations
Configuration1
db 0x09, CONFIGURATION ; bLength, bDescriptorType
db 0x12, 0x00 ; wTotalLength (low byte), wTotalLength (high byte)
db NUM_INTERFACES, 0x01 ; bNumInterfaces, bConfigurationValue
db 0x00, 0xA0 ; iConfiguration (none), bmAttributes
db 0x32, 0x09 ; bMaxPower (100 mA), bLength (Interface1 descriptor starts here)
db INTERFACE, 0x00 ; bDescriptorType, bInterfaceNumber
db 0x00, 0x00 ; bAlternateSetting, bNumEndpoints (excluding EP0)
db 0xFF, 0x00 ; bInterfaceClass (vendor specific class code), bInterfaceSubClass
db 0xFF, 0x00 ; bInterfaceProtocol (vendor specific protocol used), iInterface (none)

实际的框架是 Bradley Minch 的汇编语言框架。

如果有人在我很想听之前遇到过此类问题,因为我已经尝试了几乎所有方法来解决它,包括使用不同的管道(EP1,结果相同),之前检查 PIC 上的 UOWN 位写入管道,与 PC 主机握手(在写入数据之前,PC 必须首先发送供应商特定的命令)但无济于事。

最佳答案

它现在有效!

当然,我现在感觉“像一袋锤子一样聪明” 如果我仔细阅读第 18 节,我会注意到关于在 Vusb 和接地之间添加一个 220nF 电容器的行。在 pin18 和地之间添加了一个 470nF 的电容,这就是它所需要的......现在可靠的传输。
"I forgot to read the fine print" 的另一个案例

关于assembly - 使用 LIB-USB 传输随机字节数时如何修复 "Error -5"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/243173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com