USB 错误代码¶
- 修订:
2004-10-21
这是(希望)所有可能的错误代码(及其解释)的文档,这些错误代码可以从 usbcore 返回。
其中一些由主机控制器驱动程序 (HCD) 返回,设备驱动程序只能通过 usbcore 看到它们。通常,除了传输速度相关的行为和某些故障的报告方式外,所有 HCD 的行为都应相同。
由 usb_submit_urb()
返回的错误代码¶
非 USB 特有的
0 |
URB 提交顺利 |
|
没有内存用于分配内部结构 |
USB 特有的
|
URB 已处于活动状态。 |
|
指定的 USB 设备或总线不存在 |
|
指定的接口或端点不存在或未启用 |
|
主机控制器驱动程序不支持此类型 urb 的排队。(视为主机控制器错误。) |
|
|
|
ISO:未指定 |
|
主机控制器驱动程序无法调度那么多 ISO 帧。 |
|
URB 中指定的管道类型与端点的实际类型不匹配。 |
|
|
|
控制 URB 的设置数据包中的 wLength 值与 URB 的 transfer_buffer_length 不匹配。 |
|
此请求将过度占用为定期传输(中断、同步)保留的 USB 带宽。 |
|
由于某些无法解决的问题,设备或主机控制器已被禁用。 |
|
由于设置了 |
|
由于设备已挂起,URB 被拒绝。 |
|
控制 URB 不包含设置数据包。 |
由 in urb->status
或 iso_frame_desc[n].status
(对于 ISO)返回的错误代码¶
USB 设备驱动程序只能在完成处理程序中测试 urb 状态值。这是因为否则 HCD 在一个 CPU 上更新这些值和设备驱动程序在另一个 CPU 上测试它们之间会存在竞争。
即使已报告错误,传输的 actual_length 也可能为正数。这是因为传输通常涉及多个数据包,因此一个或多个数据包可能会在错误停止进一步的端点 I/O 之前完成。
对于同步 URB,只有当 URB 被取消链接、设备被移除、主机控制器被禁用或总传输长度小于请求长度并且设置了 URB_SHORT_NOT_OK
标志时,urb 状态值才为非零。同步 URB 的完成处理程序应该只看到 urb->status
设置为零、-ENOENT
、-ECONNRESET
、-ESHUTDOWN
或 -EREMOTEIO
。单个帧描述符状态字段可能会报告更多状态代码。
0 |
传输成功完成 |
|
URB 由 |
|
URB 仍在挂起,尚无结果(也就是说,如果驱动程序看到这个,这是一个错误。) |
|
|
请注意,控制器硬件通常不区分 a)、b) 和 c) 情况,因此驱动程序无法判断是否存在协议错误、未能响应(通常由设备断开连接引起)或其他一些故障。 |
|
|
在规定的总线周转时间内未收到响应数据包。此错误可能会报告为 |
|
同步 USB 消息函数使用此代码来指示超时在传输完成之前已过期,并且 HC 没有报告其他错误。 |
|
端点停顿。对于非控制端点,使用 |
|
在 IN 传输期间,主机控制器从端点接收数据的速度快于写入系统内存的速度 |
|
在 OUT 传输期间,主机控制器无法从系统内存中足够快地检索数据,以跟上 USB 数据速率 |
|
端点返回的数据量大于端点的最大数据包大小或剩余缓冲区大小。“废话”。 |
|
从端点读取的数据未填充指定的缓冲区,并且在 |
|
设备已被移除。通常先出现其他错误的爆发,因为集线器驱动程序不会立即检测到设备移除事件。 |
|
ISO 传输仅部分完成(仅在 |
|
ISO 疯狂,如果发生这种情况:注销并回家 |
|
URB 由 |
|
由于某些无法解决的问题(例如物理断开连接),设备或主机控制器已被禁用。 |
由 usbcore 函数返回的错误代码¶
注意
也期望其他提交和传输状态代码
usb_register()
:
|
注册新驱动程序期间出错 |
usb_get_*/usb_set_*()
、usb_control_msg()
、usb_bulk_msg()
|
超时在传输完成之前已过期。 |