USB開發步驟之標準篇
通用串行總線(Universal Serial Bus)
?? 是用于將適用USB的外圍設備連接到主機的外部總線結構,其主要是用在中速和低速的外設。USB是通過PCI總線和PC的內部系統數據線連接,實現數據的傳送。
??? USB同時又是一種通信協議,他支持主系統(host)和USB的外圍設備(device)之間的數據傳送,在USB的網絡協議中,每個USB的系統有且 只有一個host,因此,很多的朋友問我是否可以將兩臺PC的USB口通過A-A頭連接起來,是否可以實現通信,這樣是不行的,因為對于電腦主板上的 USB設備,都是host,如果連起來就是兩個host的通信,這樣一來的一個USB的系統有了兩個的host,與它的網絡協議沖突。 Anchorchip出了一個可以直接連接的設備(好象是AN2720SC),實際上是一個由兩個背靠背的USB的device組合起來的一塊芯片,要賣 80多個刀樂,太貴了,呵呵!
USB的優點有以下幾條:
USB為所有的USB外設提供了單一的、易于操作的標準的連接類型。這樣一來就簡化了USB外設的設計,同時也簡化了用戶在判斷哪個插頭對應哪個插槽時的任務,實現了單一的數據通用接口。
USB排除了各個設備象鼠標、調制解調器、鍵盤和打印機設備對去系統資源的需求,因而減少了硬件的復雜性和對端口的占用,整個的USB的系統只有一個端口和一個中斷,節省了系統資源。
USB支持熱插拔(hot plug),也就是說在不關PC的情況下可以安全的插上和斷開USB設備,動態的加載驅動程序。其他普通的外圍連接標準,如SCSI設備等必須在關掉主機的情況下才能增加或移走外圍設備。
USB支持PNP。當插入USB設備的時候,計算機系統檢測該外設并且通過自動的加載相關的驅動程序來對該設備進行配置,并使其正常工作。
USB在設備供電方面提供了靈活性。USB直接連接到Hub或者是連接到Host的設備可以通過USB電纜供電,也可以通過電池或者其它的電力設備來供電,或使用兩種供電方式的組合.并且支持節約能源的掛機和喚醒模式。
USB提供全速12Mbps的速率和低速1.5Mbps的速率來適應各種不同類型的外設。
針對不能處理突然發生的非連續傳送的設備,如音頻和視頻設備,USB可以保證其固定帶寬。
為了適應各種不同類型外圍設備的要求,USB提供了四種不同的數據傳送類型。
USB使得多個外圍設備可以跟主機通信。
USB的目的:1,使用方便 2,可以提供實時的數據給PC 3,端口的靈活擴展性
?? USB標準可以在www.usb.org/developer中找到,并且你還可以在該站點找到另外的一個USB的測試工具:usbcomp.exe,它 包含一個usbcheck的工具可以檢測到設備是否一些USB的高層次的要求。同時它還有一個usbcheck的工具可以檢測HID(human interface device)的設備。而Win98還有一個"Ignore hubs"(Memphis only)的檢測窗口。在W2K DDK中包含的一個USBView的工具可以看出系統中所有的USB總線以及USB總線上的所有的設備。
USB論壇(USB forum)的成員每年只需要支付$2500就可以獲得一個Vendor ID,其實,每個Vendor ID的零售價格只是$200,不過每個USB論壇的成員可以在關于USB的支持方面可以得到許多的好處。(對于俺們中國人來說,去弄一個什么USB成員是 很浪費錢的)
USB的設備類型(device class)
??? 雖然USB設備都會表現USB的一些基本的特征。但是,USB的設備還是可以分成多個不同類型,同類型的設備可以擁有一些共同的行為特征和工作協議,從而使設備的驅動程序的書寫變得簡單一些。下表中就給出一些基本的USB的設備類型分類。
設備類型(device class) 設備舉例 類型常量(Class constant)
音頻(audio) 揚聲器 USB_DEVICE_CLASS_AUDIO
通信 MODEM USB_DECICE_CLASS_COMMUNICATIONS
HID 鍵盤 鼠標 USB_DEVICE_CLASS_HUMAN INTERFACE
顯示 監視器 USB_DEVICE_CLASS_MONITOR
物理回應設備 動力回饋式游戲操縱桿 USB_DEVICE_CLASS_PHYSICAL_INTERFACE
電源 不間斷電源供應 USB_DEVICE_CLASS_POWER
打印機? USB_DEVICE_CLASS_PRINTER
大量的存儲器 硬盤 USB_DEVICE_CLASS_STORAGE
HUB? USB_DEVICE_CLASS_HUB
USB的基本特性
每一個設備(device)會有一個或者多個的邏輯連接點在里面,每個連接點叫 endpoint.每個endpoint有四種數據傳送方式:控制(Control)方式傳送;同步(isochronous)方式傳送;中斷 (interrupt)方式傳送;大量(bulk)傳送.但是所有的endpoint0都被用來傳送配置和控制信息。
在host和設備的endpoint之間的連接叫作管道"pipe",endpoint0叫做缺省(default pipe)。
對于同樣性質的一組的endpoint的組合叫做接口(interface),如果一個設備包含不止一個的接口就可以稱之為復合設備(composite device)。
同樣的道理,對于同樣的類型的接口的組合可以稱之為"配置"(configuration)。但是每次只能有一個配置是可用的,而一旦該配置激活,里面的接口和endpoint就都同時可以使用。
host從設備發過來的描述字(descriptors)中來判斷用的是哪個配置,哪個接口等等,而這些的描述字通常是在endpoint0中傳送。
Windows USB 驅動程序接口
系統中的USB的驅動程序完成許多的工作。
實際上對于一些HID的USB設 備,象鍵盤,鼠標和游戲操縱桿之類的設備可以自動的被系統識別并且支持.而除此之外的設備就需要自己寫一個驅動程序來完成硬件和軟件之間的聯系。在核心模 式(kernel mode)下,驅動程序用IOCTL來組織和操作一些由其他部分發過來的要求和命令。而IOCTL又是通過URB(USB request blocks)來實現數據的傳送的。
在正式的介紹USB的驅動程序之前,先還是來看看USB的物理和邏輯結構。
傳輸方式
在USB的數據傳送的方式下,有四種的傳輸方式:控制(Control)同步 (isochronous)中斷(interrupt)大量(bulk)。如果你是從硬件開始來設計整個的系統,你還要正確選擇傳送的方式,而作為一個驅 動程序的書寫者,就只需要弄清楚他是采用的什么工作方式就行了。
通常所有的傳送方式下的主動權都在PC邊,也就是host邊。
控制(Control)方式傳送:控制傳送是雙向傳送,數據量通常較小。USB系統軟 件用來主要進行查詢、配置和給USB設備發送通用的命令??刂苽魉头绞娇梢园?、16、32和64字節的數據,這依賴于設備和傳輸速度??刂苽鬏數湫偷?用在主計算機和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.?
驅動程序的安裝步驟
Windows用設備描述字或者接口描述字來了解到底是什么樣的設備被接入到系統。 Windows初始化的Hardware ID中有設備提供商的ID域(IDVendor,IDProduct,和BCDDevice)。如果你沒有向系統提供一個INF文件的話,系統就會自動選 擇提供一個兼容ID(可能不是工作得很好,就像你買了一個Rockswell的Modem,而你使用標準Modem的驅動程序,你的Modem可能會工作 的有很多的毛病,也可能跑得飛快,電腦的事情,什么都可能發生,就像中國足球........我在九四年就發誓不再為中國足球惱火,可是俺前不久還是罵了 一下那個叫章魚鱗的小伙子,怎么就.......好歹還是一孩子,就原諒一回吧,哎!)
USB的新特性
共享性 一個物理設備可以使用許多不同的pipe
實時性 可以實現和一個設備之間有效的實時通信
動態性 可以實現接口間的動態切換
聯合性 不同的而又有相近的特性的接口可以聯合起來,
多能性 各個不同的接口可以使用不同的供電模式
自動性 缺省的pipe的使用使基系統的建立和配置變得自動并且快速
以上幾個方面只是簡要的介紹了一下USB的標準的一些情況,介紹得非常非常之淺,還有 象USB的host在系統中的唯一性和device的帶寬分布,以及hub,和USB的電氣特性等等,以及網絡分層結構等方面我就不贅述了,在標準里面有 詳細的敘述。鄙人僅致力于用中文給大家一個比較淺顯的介紹,希望不會給大家不正確的引導。(諸位大蝦倘要做USB設備,當閱讀美利堅合眾國之原版文章。切 記,切記!不瞞大家,朕亦十分反感大不列顛國之文字,一日,吾弟問朕,國人何以皆學洋文,朕曰寡人如何得知,料想倘念好洋文,就有機會去誑洋人錢財。)
本來想單獨開一個USB2.0的頁,可是敲中文實在是太麻煩,再加上現在的 USB2.0只是一個DEMO的期間,USB2.0的器件更是沒有,關于USB2.0沒有什么改變,所有的硬件不用改變,就可以跑USB2.0,到時候 400多Mb可以讓你任何的器件都可以通過USB來玩了,不過,現在只是在USB的高速的host和USB的高速HUB間可以有這么高的速度,普通的外設 就差了一些,不知道以后會不會變化!稍后我將給出USB2.0的專題介紹。
評論
查看更多