1. 程式人生 > >關於USB端點,寫得不錯——收錄一下…

關於USB端點,寫得不錯——收錄一下…

USB裝置中的唯一可定址部分是裝置端點。端點是主機與裝置之間通訊的目的或來源。控制端點可以雙向傳輸資料,而其它端點只能在單方向傳輸資料。主機和裝置的通訊最終作用於裝置上的各個端點,它是主機與裝置間通訊流的一個邏輯終端。每個USB裝置有一個唯一的地址,這個地址是在裝置連上主機時,由主機分配的,而裝置中的每個端點在裝置內部有唯一的端點號。這個端點號是在設計裝置時給定的。每個端點都是一個簡單的連線點,或者支援資料流進裝置,或者支援其流出裝置,兩者不可兼得。基於PnP機制,裝置被列舉時,它必須向主機報告各個端點的特性,包括端點號,通訊方向,端點支援的最大包大小,頻寬要求等 (其中端點支援的最大包大小叫做資料有效負載)。每個裝置必須有端點0,它用於裝置列舉和對裝置進行一些基本的控制功能。除了端點0,其餘的端點在裝置配置之前不能與主機通訊,只有向主機報告這些端點的特性並被確認後才能被啟用。

管道是一個USB通訊裝置上的一個端點和主機上軟體之間的聯絡。體現了主機快取和端點間傳送資料的能力。有流和訊息兩種不同且互斥的管道通訊格式。流指不具有USB定義格式的資料流。流通道中的資料是流的形式,也就是該資料的內容不具有USB要求的結構。資料從流通道一端流進的順序與它們從流通道另一端流出時的順序是一樣的,流通道中的通訊流總是單方向的。對於在流通道中傳送的資料,USB認為它來自同一個客戶。USB系統軟體不能夠提供使用同一流通道的多個客戶的同步控制。在流通道中傳送的資料遵循先進先出原則。流管道只能連到一個固定號碼的端點上,或者流進,或者流出。而具有這個號碼的另一個方向的端點可以被分配給其它流通道。流通道支援同步傳送,中斷傳送和批量傳送;訊息指具有某種USB定義的格式的資料流。訊息通道與端點的關係同流通道與端點的關係是不同的。首先,主機向USB裝置發出一個請求;接著,就是資料的傳送;最後,是一個狀態階段。為了能夠容納請求/資料/狀態的變化,訊息通道要求資料有一個格式,此格式保證了命令能夠被可靠地傳送和確認。訊息通道允許雙方向的資訊流,雖然大多數的通訊流是單方向的。特別地,預設控制通道也是一個訊息通道。當客戶程式通過USB管道傳送或接收資料時,它首先呼叫Win32 APl,呼叫最終將使功能驅動程式收到一個IRP。而驅動程式的工作就是把客戶的請求引導到有正確端點的管道上。它把請求提交到匯流排驅動程式,匯流排驅動程式再把請求分解成多個事務,然後這些事務被送往匯流排。總線上的資訊流以每毫秒一幀資料的形式流動。匯流排驅動程式必須安排好多個事務以使它們能被裝入同一幀中。