通用串行總線-USB簡介
usb簡介:
傳輸方式
在USB的數據傳送的方式下,有四種的傳輸方式:控制(Control)同步(isochronous)中斷 (interrupt)大量(bulk)。如果你是從硬件開始來設計整個的系統,你還要正確選擇傳送的方式,而作為一個驅動程序的書寫者,就只需要弄清楚他是采用的什么工作方式就行了。
通常所有的傳送方式下的主動權都在PC邊,也就是host邊。
控制(Control)方式傳送:控制傳送是雙向傳送,數據量通常較小。USB系統軟件用來主要進行查詢、配置和給USB設備發送通用的命令。控制傳送方式可以包括8、16、32和64字節的數據,這依賴于設備和傳輸速度??刂苽鬏數湫偷赜迷谥饔嬎銠C和USB外設之間的端點(Endpoint)0之間的傳輸,但是指定供應商的控制傳輸可能用到其它的端點。
同步(isochronous)方式傳送:同步傳輸提供了確定的帶寬和間隔時間(latency)。它被用于時間嚴格并具有較強容錯性的流數據傳輸,或者用于要求恒定的數據傳送率的即時應用中。例如執行即時通話的網絡電話應用時,使用同步傳輸模式是很好的選擇。同步數據要求確定的帶寬值和確定的最大傳送次數。對于同步傳送來說,即時的數據傳遞比完美的精度和數據的完整性更重要一些。
中斷 (interrupt)方式傳送:中斷方式傳輸主要用于定時查詢設備是否有中斷數據要傳送。設備的端點模式器的結構決定了它的查詢頻率,從1到255ms 之間。這種傳輸方式典型的應用在少量的分散的、不可預測數據的傳輸。鍵盤、操縱桿和鼠標就屬于這一類型。中斷方式傳送是單向的并且對于host來說只有輸入的方式。
大量(bulk)傳送:主要應用在數據大量傳送傳送和接受數據上,同時又沒有帶寬和間隔時間要求的情況下,要求保證傳輸。打印機和掃描儀屬于這種類型。這種類型的設備適合于傳輸非常慢和大量被延遲的傳輸,可以等到所有其它類型的數據的傳送完成之后再傳送和接收數據。
USB 將其有效的帶寬分成各個不同的楨(frame),每楨通常是1ms時間長。每個設備每楨只能傳送一個同步的傳送包。在完成了系統的配置信息和連接之后, USB的host就會對不同的傳送點和傳送方式做一個統籌安排,用來適應整個的USB的帶寬。通常情況下,同步方式和中斷方式的傳送會占據整個帶寬的 90%,剩下的就安排給控制方式傳送數據。
USB的低層結構
USB設備
USB的設備可以接在PC上的任意的USB接口上。而使用HUB還可以擴展使更多的USB設備連接到系統中,USB的HUB有一個上行的端口(到host),有多個的下行端口(連接其它的設備),從而可以使整個的系統可以擴展的連接127個外設,其中HUB也酸外設。對于USB系統來說,USB的host永遠是PC邊,所有的其他連接到host都稱為設備,在設備與設備之間是無法實現直線通信的,只有通過host的管理與調節才能夠實現數據的互相傳送.在系統中,通常會有一個根HUB,這個HUB一般有兩個下行的端口。
一個PC可以擁有一個或多個的USB host控制器。一般有兩種類型的控制器:UHCI(USB host控制器接口),OHCI(開放的host控制器接口)。Windows的USB類驅動程序對于每一種的控制器類型都有一種miniclass驅動程序來支持。
USB的物理信號
USB 的電纜有四根線,兩根傳送的是5V的電源,有一些直接和電源HUB相連的設備可以直接利用它來供電。另外的兩根是數據線,數據線是單工的,在整個的一個系統中的數據速率是一定的,要么是高速,要么是低速,沒有一個可以中間變速的設備來實現數據碼流的變速.在這一點上,USB和1394有明顯的差別。
USB的總線可以在不使用的時候被掛起,這樣一來就可以節約能源。
在有些時候的總線還有可能擋機(stall),比如說象數據傳送的時候突然被打斷,這個時候通過host的重新配置可以實現總線的重新工作。
低層協議
USB的物理協議規定了大多數的在總線上的數據格式,通常一個全速的數據楨可以最多有的1500bytes,而對于低速的楨最多有187bytes。
楨通常是用來分配帶寬給不同的數據傳送方式。同時由于楨結構的規律性,楨的這種特性也可以用來做同步信號來使用。
一個最小的USB的數據塊叫做包(packet),包包括同步信號,包標識(packet ID),CRC和傳送的數據。Packet ID共有以下十種:
token: OUT IN SOF SETUP
data: DATA0 DATA1
handshake: ACK NAK STALL
special: PRE
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.
Start of Frame(SOF)
SOF是host用來指示frame的開頭的。SOF的包包括11個bit的楨序號,從0到0X7FF(i.e. USBD_ISO_START_FRAME_RANGE-1),SOF對于所有的高速設備來說是有效的。
Power
每個設備可以從總線上獲得100mA的電流,如果特殊的向系統申請,最多可以獲得500mA的電流,在掛機的狀態下,電流只有500uA
評論