1. 程式人生 > >USB 虛擬串列埠簡介

USB 虛擬串列埠簡介

1. USB虛擬串列埠簡介

USB虛擬串列埠屬於USB通訊裝置類。在物理層通過USB匯流排,採用虛擬串列埠的方式為主機提供一個物理串列埠。在系統內部,USB控制器提供了一個批量傳輸IN端點和一個批量傳輸的OUT端點,用於資料的接收和傳送,模擬串列埠的RX和TX線。另外USB控制器還提供中斷IN端點,傳送當前串列埠的狀態,實現對串列埠傳輸的控制。串列埠裝置的資料,由系統的串列埠採集,在晶片內完成USB包的封裝,通過USB總線上傳至主機,再由相應的串列埠應用程式進行處理。對使用者來說,看到的是基於串列埠的資料採集和傳輸,而實際上實現的是基於USB協議包的資料傳輸。

1.1      USB CDC協議簡介

USB的CDC類是USB通訊裝置類(Communication Device Class)的簡稱。CDC類是USB組織定義的一類專門給各種通訊裝置(電信通訊裝置和中速網路通訊裝置)使用的USB子類。根據CDC類所針對通訊裝置的不同,CDC類又被分成以下不同的模型:USB傳統純電話業務(POTS)模型,USB ISDN模型和USB網路模型,其中USB傳統純電話業務模型又可分為直線控制模型(Direct Line Control Model)、抽象模型、電話模型,如圖 1.1所示。本文討論的虛擬串列埠就屬於USB 傳統純電話業務模型下的抽象控制模型。

圖 1.1 CDC分類

1.2      Linux下USB虛擬串列埠框架

如圖 1.2所示,Linux實現了gadget.h定義的統一介面,然後上層的各種gadget driver(如serial.c等)呼叫這一套統一的介面可以去實現不同型別的功能,如USB串列埠、U盤、USB乙太網等等。

圖 1.2 USB虛擬串列埠框架

在Linux中通過USB虛擬的其他裝置都需要經過Gadget層的繫結,最終與虛擬的相關裝置進行繫結。有關Gadget的繫結流程在之前的文件中已做過詳細介紹,在此不做過多闡述。