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 状态值。 这是因为否则将在一个 CPU 上更新这些值的 HCD 与在另一个 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 数据速率 |
|
端点返回的数据量大于端点的最大数据包大小或剩余缓冲区大小。“Babble”。 |
|
从端点读取的数据未填充指定的缓冲区,并且在 |
|
设备已移除。 通常以其他错误的突发开始,因为集线器驱动程序不会立即检测到设备移除事件。 |
|
ISO 传输仅部分完成(仅在 |
|
ISO 疯狂,如果发生这种情况:注销并回家 |
|
URB 已由 |
|
由于某些无法解决的问题,设备或主机控制器已被禁用,例如物理断开连接。 |
由 usbcore 函数返回的错误代码¶
注意
还期望其他提交和传输状态代码
usb_register()
:
|
注册新驱动程序时出错 |
usb_get_*/usb_set_*()
, usb_control_msg()
, usb_bulk_msg()
|
超时在传输完成之前已过期。 |