USB基礎知識

2021-08-30 22:57:22 字數 2897 閱讀 3274

[url]

[size=medium]

**:

usb 介紹

usb 協議有嚴格的層次結構。在所有 usb 系統中,只有乙個主裝置,到主計算機的的 usb 介面稱為 主控器(host controller)。主控器有兩個標準――開放主控器介面(compaq 的 open host controller inte***ce,ohci)和通用主控器介面(intel 的 universal host controller inte***ce,uhci)。這兩個標準提供了同樣的能力,並可用於所有的 usb 裝置,uhci 的硬體實現更簡單一些,但是需要更複雜的裝置驅動程式(因而 cpu 的負荷更大一些)。

usb 物理互連是分層的星形拓樸,最多有七層。乙個 hub 是每個星形的中心,usb 主機被認為是 root hub。每一段連線都是 hub 與 usb 裝置的點對點連線,後者可以是為系統提供更多附加點的另乙個 hub,也可以是乙個提供功能的某種裝置。主機使用主/從協議與 usb 裝置通訊。這種方式解決了包衝突的問題,但是同時也阻止了附加的裝置彼此建立直接通訊。

所有傳輸的資料都是由主控器發起的。資料從主機流向裝置稱為 下行(downstream)或者 輸出(out)傳輸,資料從裝置流向主機稱為 上行(upstream)或者 輸入(in)傳輸。資料傳輸發生在主機和 usb 裝置上特定的 端點(endpoint) 之間,主機與端點之間的資料鏈結稱為 管道 (pipe)。乙個給定的 usb 裝置可以有許多個端點,主機與裝置之間資料管道的數量與該裝置上端點的數量相同。乙個管道可以是單向或者是雙向的,乙個管道中的資料流與所有其他管道中的資料流無關。

usb 網路中的通訊可以使用下面四種資料傳輸型別中的任意一種:

控制傳輸:這些是一些短的資料報,用於裝置控制和配置,特別是在裝置附加到主機上時。

批量傳輸:這些是數量相對大的資料報。像掃瞄器或者 scsi 介面卡這樣的裝置使用這種傳輸型別。

中斷傳輸:這些是定期輪詢的資料報。主控器會以特定的間隔自動發出乙個中斷。

像串列埠一樣,計算機上每乙個 usb 埠都由 usb 控制器指定了乙個惟一的標識數字(埠 id)。當 usb 裝置附加到 usb 埠上時,就將這個惟一埠 id 分配給這台裝置,並且 usb 控制器會讀取 裝置描述符。裝置描述符包括適用於該裝置的全域性資訊、以及裝置的 配置資訊。配置定義了一台 usb 裝置的功能和 i/o 行為。一台 usb 裝置可以有乙個或者多個配置,這由它們相應的配置描述符所描述。每乙個配置都有乙個或者多個 介面,它可以視為乙個物理通訊渠道;每乙個介面有零個或者多個端點,它可以是資料提供者或者資料消費者,或者同時具有這兩種身份。介面由介面描述符描述,端點由端點描述符描述。並且一台 usb 裝置可能還有字串描述符以提供像廠商名、裝置名或者序列號這樣的附加資訊。

usb 裝置、usb 驅動、usb 應用程式

1.usb 裝置硬體部分

a.這個硬體的標識是用的 vender id 和 product id, 即「廠家標識」和「產品標識」

b.這個硬體規定了各個 end point (端點) 的性質, 讀/寫 及 型別 (control/interrupt/bulk/isochronous)

c.這個硬體的韌體裡面有 deviceiocontrol 的實現部分, 規定了這個函式的具體引數和動作

2.usb 裝置驅動

①硬體介面

a.需要識別 vender id 和 product id

b.對每個 endpoint 的每個 i/o 分配乙個 pipe, 並且起乙個名字作為軟體介面

c.做 deviceiocontrol 的介面

②軟體介面

a.guid, 驅動程式的標識, 每個驅動程式使用不同的 guid, guid 是識別驅動的, 與硬體無關 (驅動程式公升級版本 guid 不能修改)

b.硬體介面裡面的 b: pipe 名字是軟體介面, 這個 pipe 名字純粹由驅動定義的, 和硬體無關, 公升級驅動不能改 pipe 的名字

c.硬體介面裡面的 c 的各個引數也是軟體的介面, 這些引數是由硬體帶來的, 不是驅動規定的, 當然也可以在驅動裡面轉義, 隱藏裝置的真實情況

③這個驅動程式是用 winddk 編譯的, 可以用文字編輯器或其他開發工具的編輯器程式設計序**, 然後呼叫 winddk 編譯

3.讀寫 usb 口的程式

①與驅動的介面

a.利用驅動程式裡面的 guid 找出裝置的檔名, 用 createfile 函式開啟裝置。我前面的程式裡面的 openusbdevice 就是這個作用

b.通過 a.得到的裝置檔名和驅動程式裡面的 pipe 名開啟 pipe, 訪問這個 pipe 對應的 usb 端點 (讀寫資料)

c.使用 a.的 createfile 得到的控制代碼, 通過 deviceiocontrol 實現裝置規定的動作

②有關需要的資料

a.vender id, product id 和 guid 一般在驅動程式的 .inf 檔案裡面能看到, 如果找不到就需要和廠家聯絡

b.pipe 的名字是驅動程式規定的, 需要有驅動程式的資料才能知道

c.deviceiocontrol 的引數需要有驅動程式的資料或者硬體資料才能知道

③這個程式一般用 c/c++ 直接編寫, 如果使用其他語言(vb/pb等)需要呼叫 c/c++ 編的 dll

usb 驅動程式可以到登錄檔裡面找到:

"hkey_local_machine\\system\\controlset001\\enum\\usb\\vid_廠家標識&pid_產品標識\\驅動程式"

裡面的 classguid 就是驅動程式的 guid 標識, 例如

相當於程式的: define_guid(usb_driver_guid, 0x36fc9e60,0xc465,0x11cf,0x80,0x56,0x44,0x45,0x53,0x54,0x00,0x00);

另外在這個登錄檔鍵裡面還可找到有關裝置的其他描述, 例如 devicedesc = "usb mass storage device" 等

USB基礎知識

開始對usb感興趣了,學習一下usb驅動,趁著現在剛好在做usb裝置驅動。先了解一下usb的大概知識 1.先看一下維基百科的介紹 usb分組格式 usb的分組格式和早期的網際網路分組格式非常相似,要了解usb連線原理就一定要先了解分組格式。2.了解一下vid和pid 摘自 什麼是 usb 廠商 id...

USB基礎知識

1.usb是什麼?usb是universal serial bus的縮寫,中文譯為通用序列匯流排。2.一些重要概念 主機 host 和裝置 device 介面 inte ce 管道 pipe 是主機與裝置端點資料傳輸的連線通道,代表了主機的資料緩衝區與裝置端點間互動資料的能力。管道包括資料流管道和訊...

USB基礎知識

q usb是什麼?a usb是通用序列匯流排 universal serial bus 的縮寫。q usb的優點有哪些?a 支援熱插拔 hot plugging或hot swap 即帶電插拔。即插即用 pnp,即plug and play 也是usb設計的初衷之一。傳輸速度快。標準統一。攜帶方便。支...