USB 设备枚举失败:“设备描述符读取/64,错误 -32”

问题描述 投票:0回答:4

我正在使用 ST 微控制器开发 ttyACM 设备,并且使用相同的代码,我的主机有时可以成功枚举它(如下),但有时它只是转储以下消息。错误-32是什么意思?

[无法一一列举]

usb 1-2.1: new full speed USB device number 62 using ehci_hcd
usb 1-2.1: device descriptor read/64, error -32
usb 1-2.1: device descriptor read/64, error -32
usb 1-2.1: new full speed USB device number 63 using ehci_hcd
usb 1-2.1: device descriptor read/64, error -32
usb 1-2.1: device descriptor read/64, error -32
usb 1-2.1: new full speed USB device number 64 using ehci_hcd
usb 1-2.1: device not accepting address 64, error -32
usb 1-2.1: new full speed USB device number 65 using ehci_hcd
usb 1-2.1: device not accepting address 65, error -32
hub 1-2:1.0: unable to enumerate USB device on port 1

[成功的结果]

usb 1-3.1: new full speed USB device number 45 using ehci_hcd
usb 1-3.1: New USB device found, idVendor=0483, idProduct=5740
usb 1-3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-3.1: Product: ChibiOS/RT Virtual COM Port
usb 1-3.1: Manufacturer: HelloWord
usb 1-3.1: SerialNumber: 262
usb 1-3.1: configuration #1 chosen from 1 choice
cdc_acm 1-3.1:1.0: This device cannot do calls on its own. It is not a modem.
cdc_acm 1-3.1:1.0: ttyACM0: USB ACM device

非常感谢。

linux linux-kernel usb embedded-linux microcontroller
4个回答
12
投票

AFAIK 状态 -32 表示“管道损坏”(EPIPE)。说明usb通讯(协议)有问题。例如,USB 设备无法正确响应 USB 请求,并且发送一些主机不期望的数据或发送的数据不足。也可能还有其他原因。

第一条消息表明来自主机的“获取设备描述符”和“设置地址”请求存在问题。这些是主机在枚举过程开始时发送的基本请求。如果 USB 设备无法成功满足这些请求,您就无法进一步操作。


2
投票

此错误可能是由于片上 USB 设备的时钟频率错误造成的。检查您的时钟树配置。频率应为48MHz。如果稍有偏差,则枚举可能有时会成功,有时会失败。如果偏离了,枚举总是会失败。可能存在各种错误,包括您列出的错误。


0
投票

我已在一台笔记本电脑中安装了 XCP-NG 服务器,但由于以下错误,我的系统也无法启动:USB 3-1 设备描述符读取/64,错误 32

我尝试了很多事情。甚至断开 USB 端口。

直到我想起我已经删除了 Xen 的默认 SR 存储库。于是我就去查看/etc/fstab文件

[root@xcpserver2 ~]# cat /etc/fstab
LABEL=root-jvgtod    /         ext3     defaults,noatime   1  1
LABEL=swap-jvgtod          swap      swap   defaults   0  0
LABEL=logs-jvgtod    /var/log         ext3     defaults,noatime   0  2
/opt/xensource/packages/iso/XenCenter.iso   /var/xen/xc-install   iso9660   loop,ro   0  0

默认 SR 存储库正在尝试获取最后一行的内容。我尝试评论它,它成功了! :) 我的结论是,当 /etc/fstab 文件出现问题时,它也会显示此错误。我希望它有帮助!

所以,我的 /etc/fstab 文件现在看起来像这样,它解决了问题:

[root@xcpserver2 ~]# cat /etc/fstab
LABEL=root-jvgtod    /         ext3     defaults,noatime   1  1
LABEL=swap-jvgtod          swap      swap   defaults   0  0
LABEL=logs-jvgtod    /var/log         ext3     defaults,noatime   0  2
#/opt/xensource/packages/iso/XenCenter.iso   /var/xen/xc-install   iso9660   loop,ro   0  0

0
投票

可能是输入输出内存管理单元(IOMMU)的问题

就我而言,当在 BIOS 中禁用 IOMMU 时,就会发生这种情况。所以首先,尝试在 BIOS 中启用 IOMMU

然后要支持 AMD-ViVT-d 需要设置启动选项

amd_iommu=on
intel_iommu=on
以防止出现以下错误:

xhci_hcd AMD-Vi: Event logged [IO_PAGE_FAULT domain]

还可能需要

iommu=pt
iommu=soft
。它可以解决 Nvidia 或蓝牙设备的一些问题


永久设置启动选项,请将其添加到

GRUB_CMDLINE_LINUX_DEFAULT
中的
/etc/default/grub
,然后运行:

sudo update-grub

sudo grub-mkconfig -o /boot/grub/grub.cfg


如果您使用 USB 启动设备,则在选定的 GRUB 菜单条目上按

e
在启动前编辑条目,并在 menuentry 块内的 linux 命令末尾添加启动选项,然后使用
ctrl-x
保存。它将避免您在安装时启动时断开 USB

© www.soinside.com 2019 - 2024. All rights reserved.