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()
|
超時在傳輸完成之前已過期。 |