USB(通用串列匯流排)是用於將適用USB 的外圍設備連接到主機的外部匯流排結構,其主要是用在中速和低速的外設.USB 是通過PCI 匯流排和PC 的內部系統數據線連接實現數據的傳輸.USB 同時又是一種通信協議,他支持主系統(host)和USB 的外圍設備(device)之間的數據傳輸.
USB 的動機
1 連接PC 與電話:PC 具有很強的運算能力,而電話提供最為廣泛的通信互連.運算與通信成為計算機應用的基礎,而計算機與通信是兩個相對獨立發展的產業,USB 旨在提供可以廣泛應用於PC 到電話的互連的普遍性的連接.
2 Plug-and-Play: 從用戶端來看PC 的串列口并行口和鍵盤滑鼠埠都不能Plug-and-Play, USB則提供真正的Plug-and-Play.
3 埠擴展:PC 的已有的串列/并行口等埠只適用於一兩種的外設,並且不易擴展.USB提供雙向低成本低速到中速(USB 2.0 可達480Mb/s)的通用外設匯流排,適用於連接各種各樣的外設並且易於擴展.
USB 的拓樸結構
USB的拓樸結構如圖1
圖1 USB Toplogy
在USB 的網路協議中,每個USB 的系統有且只有一個host ,它負責管理整個USB 系統,包括USB Device 的連接與刪除;Host 與USB Device 的通信總路線的控制等等.Host端有一個Root Hub, 可提供一個或多個USB 下行埠.每個埠可以連接一個USB Hub或一個USB Device. USB Hub 是用於USB 埠擴展的,即USB Hub 可以將一個USB 埠擴展為多個埠.圖1 中的每個Func(Function)就是一個USB Device. 如USB鍵盤,USB滑鼠,USB MODEM, USB硬碟等等.Compound Device 是指帶一個Hub 和一個或多個不可刪除的USB Device 的複合設備.一個USB系統可連接多達127 個Function .
USB 的系統有且只有一個host ,而PC 端的USB 都是Host ,所以將兩台PC 的USB口通過A-A USB 電纜連接起來是不能實現通信.如果將兩個host 連起來通信,這樣一來的一個USB 的系統有了兩個的host ,與它的網路協議衝突.Anchorchip Prolific 等廠家有USB到USB的設備控制器,可以實現兩個USB Host 的相連.
USB 設備
USB 的設備可以接在PC 上的任意的USB 介面上.而使用Hub 還可以擴展使更多的USB設備.連接到系統中USB的Hub 有一個上行的埠(到host), 有多個的下行埠(連接其它的設備) .從而可以使整個的系統可以擴展的連接127 個外設.其中Hub 也算外設.
對於USB 系統來說,USB 的host 永遠在PC 邊,所有的其他連接到host 都稱為設備.在設備與設備之間是無法實現直線通信的,只有通過host 的管理與調節才能夠實現數據的互相傳送.在系統中通常會有一個根Hub ,這個Hub 一般有兩個下行的埠.
USB 的設備類型(device class)
雖然USB 設備都會表現USB 的一些基本的特徵,但是USB 的設備還是可以分成多個不同類型,同類型的設備可以擁有一些共同的行為特徵和工作協議.從而使設備的驅動程序的書寫變得簡單一些.下表中就給出一些基本的USB的設備類型分類:
USB 的優點有以下幾條
傳輸方式
USB有四種的傳輸方式:控制(Control), 同步(isochronous), 中斷(interrupt), 大量(bulk).
如果你是從硬體開始來設計整個的系統,你還要正確選擇傳輸的方式.而作為一個驅動程序的書寫者,就只需要弄清楚他是採用的什麼工作方式就行了.通常所有的傳輸方式下的主動權都在PC 邊,也就是host 邊.
1 控制(Control)方式傳輸:控制傳輸是雙向傳輸,數據量通常較小.USB 系統軟體用來主要進行查詢,配置和給USB 設備發送通用的命令.控制傳輸方式可以包括8,16,32和64 位元組的數據.這依賴於設備和傳輸速度.控制傳輸典型地用在主計算機和USB 外設之間的端點(Endpoint)0 之間的傳輸.但是指定供應商的控制傳輸可能用到其它的端點,
2 同步(isochronous)方式傳輸:同步傳輸提供了確定的帶寬和間隔時間latency) .它被用於時間嚴格並具有較強容錯性的流數據傳輸,或者用於要求恆定的數據傳輸率的即時應用中.例如執行即時通話的網路電話應用時,使用同步傳輸模式是很好的選擇.同步數據要求確定的帶寬值和確定的最大傳輸次數.對於同步傳輸來說,即時的數據傳遞比完美的精度和數據的完整性更重要一些.
3 中斷(interrupt)方式傳輸:中斷方式傳輸主要用於定時查詢設備是否有中斷數據要傳輸.設備的端點模式器的結構決定了它的查詢頻率,從1 到255ms 之間.這種傳輸方式典型的應用在少量的,分散的,不可預測數據的傳輸.鍵盤,操縱桿和滑鼠就屬於這一類型.中斷方式傳輸是單向的並且對於host 來說只有輸入的方式.
4 大量(bulk)傳輸:主要應用在數據大量傳輸傳輸和接受數據上,同時又沒有帶寬和間隔時間要求的情況下,要求保證傳輸.印表機和掃描儀屬於這種類型.這種類型的設備適合於傳輸非常慢和大量被延遲的傳輸,可以等到所有其它類型的數據的傳輸完成之後再傳輸和接收數據.
USB 將其有效的帶寬分成各個不同的幀(frame) ,每幀通常是1ms 時間長.每個設備每幀只能傳輸一個同步的傳輸包.在完成了系統的配置信息和連接之後,USB 的host 就會對不同的傳輸點和傳輸方式做一個統籌安排,用來適應整個的USB 的帶寬.通常情況下同步方式和中斷方式的傳輸會佔據整個帶寬的90% ,剩下的就安排給控制方式傳輸數據.
數據交換(Transactions)
一個transaction 是在host 和設備device之間的不連續相互數據交換,通常由host 開始交換,交換的開始是由Token 的包開始的,接下來是雙方向上的數據包,在數據包傳送完之後,就會由設備device 返回一個握手handshake包.USB系統通過IN,OUT,和SETUP的包來指定USB 地址和endpoint 最多是128 個,0 通常被用來用做預設的傳送配置信息的,並且這些被指定的設備必須通過上面形式的包來回應這種形式的指定.每個SETUP的包包含8 個byte 的數據,數據用來指示傳送的數據類型.對於DATA 數據包來說,設置兩種類型的數據包是為了能夠在傳送數據的時候做到更加的精確.ACK handshake 的包用來指示數據傳送的正確性,而STALL handshake 則表示數據包在傳送的過程中出了故障,並且請示host 重新發數據或者清除這次傳送.PRE 格式的包主要是用在在一個USB 的系統中如果存在不同速率的設備的時候,將不同於匯流排速度的設備中就會回應一個PRE 的包從而會忽略該設備.各種不同類型的包的大小是不同的,DATA的數據包最大是1023bytes.
USB 設備的開發
驅動程序編寫.
USB 的驅動程序和以往的直接跟硬體打交道的WIN95 的VXD 的方式的驅動程序不同它應該是WDM 類型的Windows 下的USB軟體總體框圖如圖2
圖2 USB軟體總體框圖
[admin via 研發互助社區 ] USB(Universal Serial Bus)技術簡述已經有2752次圍觀
http://cocdig.com/docs/show-post-44891.html