靜觀 USB 2.0 的 變更與擴充 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
http://www.2cm.com.tw/docs/serial/14/c01408.htm 靜觀 USB 2.0 的 變更與擴充 2002 4月號 第14期 陳乃塘 2000年4月,USB 2.0的正式規格對外公開,可以從www.usb.org網站下載。姑且不論規格內容之多寡,最受人們矚目的是追加了一個480Mbps的「High Speed」高速版本。單從數字表面來觀察,480Mbps的傳送速率,整整比12Mbps的版本快了40倍之多,一點也不比1394遜色(這裡是指IEEE 1394-1995的1394b而言)。 USB 2.0高速版本擴充更多應用 這個規格的延伸擴張允許更多應用的可能性,受到萬眾矚目的期待。尤其是外部儲存設備(比如說CD-R/CD-RW等),是很理想也切實際的應用。 此規格除了速率的增強之外,尚且維持舊有的資料通信協定,並且可以向下與使用多年、裝機量相當廣泛的USB 1.1規範保有相容性。這是一項極為重要的必備因素。 USB 1.1的資料通信速率有12Mbps的FS-Full Speed以及1.5Mbps的LS-Low Speed,加上USB 2.0特有的HS-High Speed。因此可以輕易地預期未來將有LS/FS/HS的各種裝置存於USB介面匯流排上。然而,實際的使用上需要再研究。 請不要忘了,USB介面之所以能夠連接眾多的裝置數目,乃是藉助於一種「HUB」的裝置。HS的周邊裝置,若是要操作在極速的情況下,勢必不能夠接續在USB 1.1的HUB上,否則速度會被硬生生拉下來。慢速的裝置連接到快速的HUB上,自然不會有問題發生,只是稍嫌浪費而已。 正本清源,將LS/FS/HS在本文中的中文譯詞,做個扼要整理︰ ◆LS-慢速傳輸模式。( 1.5Mbps) ◆FS-全速傳輸模式。(12Mbps) ◆HS-快速傳輸模式。(480Mbps) USB 2.0電氣規格的追加 首先,從電氣特性來針對USB 2.0規格所追加的部分加以描述。 之一:追加HS快速傳送所需的收發器(Transceiver)線路 從收發器電路來仔細觀察,可以發現追加了幾個部分的線路﹕ (1)HS Current Driver- 電流驅動器 (2)HS 差動資料接收器 (3)Transmission Envelope Detector (4)Disconnect Envelope Detector 所謂的「HS Current Driver」是指在D 、D-資料線上,使用一定的電流值來驅動的意思。目的何在呢?一言以蔽之就是為了產生「J狀態」以及「K狀態」。J狀態的定義是:D 信號為400mv,D-信號為零伏特。K狀態的定義是:D-信號為400mv,D 信號為零伏特。 畢竟,USB介面匯流排就那麼四條線罷了,為了讓介面能夠有一些規範,讓動作正常,才會定義了多種狀態。好比說,封包的起始、封包的結束、介面的閒置都是利用狀態的變化來表明。 而這個驅動的電流值規定為17.78mA,因為其數值就是由400/45*2所產生的。 HS差動資料接收器,功用就是為了要檢測出快速模式下的J/K信號。 Transmission Envelope Detector其主要的功用就是要檢測出資料線是處於閒置的狀態,還是資料傳送進行中的狀態。閒置的狀態時,D /D-資料線的電壓值均為零伏。資料傳送進行中的狀態,也就是J/K狀態。因此,我們可以得知-處於閒置狀態時的差動電壓值低於100毫伏特,資料傳送進行中狀態的差動電壓值高於150毫伏特。 Disconnect Envelope Detector顧名思義,就是為了要檢測出下游端裝置是否被抽離而切斷掉。其主要的原理是這樣子的:當下游側的連接端接上了裝置的時候,由於裝置端的終端阻抗的緣故,使得差動電壓落在400mv的程度。一旦裝置被抽離時,由於終端阻抗的切斷,差動電壓則是跑到在800mv的程度。 敬請留意,即使USB 2.0是與USB 1.1維持相容性。在新規格的定義中對於LS/FS的拉高電阻追加了些新規定。USB連接線的特性阻抗為90歐姆,因此LS/FS驅動器的輸出阻抗為45歐姆。 拉高電阻Rpu,有必要能夠依據裝置來切斷/接續。而Rpu連接到"D "資料線上,意味著一件事情。也就是HS快速的裝置,可以作為FS全速裝置來使用。 LS/FS差動接收器,單端接收器,拉低電阻Rpd,則是與USB 1.x的規格,沒什兩樣。 之二︰重置(Reset)時,HS高速檢測的詳細信號交換流程(handshake) 這個歷程是認識USB 2.0相當重要的一環。因為這是HS快速傳輸的精髓。學來是勢必相當艱苦的過程,雖然辛苦,只要安然地度過,肯定對您的功力是有所幫助的。 可以試著想想,當一個裝置連接HS快速的HUB時,這個HUB有必要去確認下游端所連接裝置是LS/FS/HS的哪一類。這個認知的過程,也是USB 2.0的新規定。姑且,以程序的時間關係,來逐點描述如下: 程序一: 對於HS而言,USB介面的重置信號與閒置狀態是一樣的。也就是說D 與D-資料線信號皆為零伏特。這也就是規格中所言的「SE0」狀態。 程序二: SE0狀態持續3ms以上,連接上HS快速裝置的Rpu拉高電阻,先做成全速裝置來動作。此時,USB介面仍然呈現閒置狀態。 程序三: HS快速裝置,會進行一個所謂的「Device Chirp」過程。也就是驅動成1ms以上的K狀態。其目的相當昭然,就是要告知HUB,本裝置是有能力進行高速的傳送機能。(這個Chirp字,翻查字典的解釋,是指小鳥吱喳叫。您可以嘗試著想,透過語言吱吱喳喳來溝通。為此,還是不要翻譯Chirp這個字,直接以原文表示,免得深受文字翻譯後的不明苦) 程序四: 在完成「Device Chirp」過程之後,HUB自然收到這個通知,會回以「Hub Chirp」來告知,來表示本身也可以支援快速的傳輸。「Device Chirp」的一來,與「Hub Chirp」的一往,自然構成最基本的信號交握處理(handshaking)過程。這個「Hub Chirp」的動作,其實即是J/K狀態的交互驅動。因此您可以在波形圖上看到一串脈衝。 程序五: 在彼此的「Chirp」確認之後,表示雙方皆有能力,可以使用快速傳送的方式來通信。那麼,一個疑問點就來了,如果這個「Chirp」信號的交握處理沒有成功,會發生什麼事?其實,也沒什麼大事啦!只是切換成實行LS/FS的傳送方式罷了。 之三︰測試模式(Test Mode) 這是由於對應於HS的收發器,電氣特性上顯得比過去複雜許多。為了讓電氣特性上的測試能夠淺易化,才會規定了測試模式的規範。 這個時候,會藉助於「Set_Feature」命令的運用。允許筆者再度嘮叨一次,所謂的命令是指從主機端送往裝置端的指令。測試模式之下,提供有五個種類的測試。 (1)SE0 NAK測試: 其含意是這樣子的。當接收到「IN令牌」封包之時,必須回返NAK信號封包。 其他以外的時候,由於終端阻抗來驅動SE0的狀態。好處是可以得知封包接收與應答、低電位的輸出電壓等。 (2)HS J測試: HS電流驅動器,只有驅動「D 」資料線時的狀態。這個時候,「D 」資料線理應在高電位的輸出電壓。意思是說,可以偵測這個高電位的狀態。 (3)HS K測試: 觀念同上。HS電流驅動器,只有驅動「D-」資料線時的狀態。這個時候「D-」資料線理應在高電位的輸出電壓。 (4)封包傳送測試: 此測試的含意是指特定封包不停地持續傳送。這帶來怎樣的測試項目呢?比如說,信號上升時間,信號下降時間,以及信號抖動(Jitter)的量測等。 (5)Force Enable測試: 這個測試是針對HS的HUB裝置而來的。他是用來強迫致能HUB裝置的下游側。 試著聯想,HUB裝置的下游側被強迫致能之際,又沒有連接任何裝置時,「Disconnect Envelope Detector」切斷測試就可以做的到。 USB 2.0傳輸協定的追加 可以這麼說,傳輸協定是任何IO的介面,進行雙方溝通的基本要件。就如同人類溝通的語言或手勢一般,彼此能夠瞭解兩方在說什麼,才可以說是在進行溝通。若是協定上有所擴張時,勢必要讓彼此皆能夠知曉。因此,溝通協定的重要性,自然不言可喻。 之一︰封包大小的變更 說到封包大小,又與HS/FS/LS的各個傳送模式唇齒相依。緣此,又不得不必須依照各個傳送模式的順序來敘述這個問題。 先從控制傳送(Control Transfer)來說起,LS/FS/HS的封包大小,分別是這樣子的: ◆LS封包大小 - 0~8 個位元組。 ◆FS封包大小 - 0~64 個位元組。 ◆ HS封包大小 - 0~64 個位元組。 ◆ 其次,大容量傳輸(Bulk Transfer)是這樣子的: ◆FS封包大小 - 0~64 個位元組。 ◆ HS封包大小 - 0~512 個位元組。 ◆ 中斷傳輸(Interrupt Transfer)的封包大小如下: ◆LS封包大小 - 0~8 個位元組。 ◆FS封包大小 - 0~64 個位元組。 ◆ HS封包大小 - 0~1024 個位元組。 ◆ 等時傳輸(Isochronous Transfer)的封包大小如下: ◆FS封包大小 - 0~1023 個位元組。 ◆ HS封包大小 - 0~1024 個位元組。 ◆ 由此得知,快速裝置的大容量傳輸允許到512個位元組。中斷傳輸的封包大小,許可1024個位元組。為了有效率地活用HS的頻寬,USB 2.0在資料框的週期時間躍進了一大步。在USB 1.x的時代,一個資料框的週期時間為1ms,USB 2.0則是規範了125μs的資料框,特別以「Micro-frame」微資料框來稱呼。對於中斷傳輸與等時傳輸,每一個「Micro-frame」之內,允許可以實行3回的資料交易。 之二︰新規制的PID 透過PID,可以識別封包的類別。PID的全名是Packet Identifier。PID的形式有四個種類: 第一類:Token封包。如︰SOF、IN、OUT等。 第二類:資料封包。如DATA0、DATA1等。USB 2.0為了因應HS的需要,在資料封包中追加了另外兩個-DATA2以及MDATA。這兩個封包均是用於快速的等時傳輸。因為,一個「Micro-frame」之內,許可2~3回的資料交易,因而才會導入這樣子的封包。請看圖3,自然豁然開朗。 第三類:Handshake封包。如ACK (Acknowledgement-確認)、NAK(Negative Acknowledge-否定回答)、STALL等。NYET是新追加的封包,意味著「not Yet」,就是還沒有備妥。這是應用於快速模式下的「Ping協定」而產生的。此種觀念的應用,主要是預防送了一堆資料之後,對方回返NAK的否定確認信號,要求再度重送的事態。因為如此般的傳輸是浪費時間,沒有效率的。 畢竟,「Ping協定」是USB 2.0規格中新加入的東西。稍後會針對這個題目,詳細加以說明。同時,NYET也是用於分割式資料交易(Split Transaction)的場合。 第四類:特殊用途的封包。在USB 1.x的場合,只單單定義了PRE封包。USB 2.0 一口氣追加了ERR、SPLIT、PING等封包。PING用於「Ping協定」中。ERR與SPLIT運用於快速的分割式資料交易的場合。 之三︰「Ping協定」 大容量輸出(Bulk-out)與控制輸出(Control-out),適用於「Ping協定」。輸出的含意是指從主機端送往裝置端。 「Ping協定」的出發點就是防止長時間大量資料傳送完畢之際,對方竟然傳回NAK信號,要求重新送一次。如此的狀態就代表著介面被佔掉的時間,成為浪費,介面的使用效率不佳。因此,才會規範了這個協定,期待可以提升介面匯流排的使用效率。 他的機制是這樣子的:主機端在傳送64個位元組(如Control Out傳送)或是512位元組(如Bulk Out傳送)的資料到裝置端之前,先行由主機端送出「Ping封包」,觀察其回應是ACK還是NAK,用來確認裝置是否準備就緒。這個概念與網路上的Ping指令是一致的思維。 規格書中,為了詳細描繪「Ping協定」的動作,利用了狀態遷移圖的方式,對主機端的狀態遷移以及HS快速裝置的狀態遷移,有很清楚的交代。 以主機端狀態遷移圖為範例來說,當送出「Ping封包」之後,如果得到NAK的場合,表示裝置端沒有接收的空間,如果執意地將DATA0/1封包丟往裝置端,很有可能的結局就是依然得到NAK的否定確認回應。因此,圖4的主機端狀態遷移圖,顯示如果送出「Ping封包」之後,得到NAK的場合,並不會傳送「OUT封包」以及「DATA封包」,而是再度傳送「Ping封包」,重複確認。 這就是「Ping協定」的基本精神。 接著下來,利用一個具體的實際範例來闡明「Ping協定」動作的細節。 請留意,從主機端送往裝置端時,使用放大鏡來觀察其細部的話,其走過的足跡卻是,從主機端經過USB介面匯流排,到達快速裝置的控制器,再經過裝置內部的局部匯流排(Local Bus),就可以到達讓裝置動作的韌體。其關連性是相當廣泛的。 以大容量輸出傳送(Bulk Out)來說,USB 2.0的主機端(通常是個人電腦),通常是針對裝置端控制器內的特定端點,傳送512位元組的封包。而裝置端控制器的接收端點,一般是利用兩個512位元組的FIFO(FIFO是First In First Out的元件,通常,是作為緩衝的用途)。 當緩衝器接收完主機端送過來的資料之時,會告知裝置內部的韌體,接收封包已經備妥。如此一來內部的韌體就會藉由局部匯流排,實行將緩衝器的資料傳送到系統的記憶體之中。資料傳送完了之際,會通知控制器,那麼控制器就可以騰出緩衝器的空間來。基於這樣子的思考,HS快速裝置,如何來達到介面匯流排使用的最高效率,就是不產生NAK、NYET的情況下,「OUT封包」、「DATA 0/1封包」以及「ACK」的順序遞送。這樣子的時間,有機會是“9.5 us”的光景。 所以,對於一個工程人員來說,韌體撰寫的應答時間以及資料處理時間,該如何地最佳化,是HS快速裝置設計者,要好好下功夫的一道習題。也是重要的一個環節。 之四︰分割式的資料交易方式(Split Transaction) 開宗明義地說,這種分割式的資料交易方式,也是針對USB 2.0新規中的快速傳送模式,而衍生出來新導入的方式。 畢竟,在LS/FS/HS三種速率的裝置混合於介面的情況下,不希望快速HS的資料傳輸,被LS/FS硬生生拉下來。為了防止這種效率的滑落,才會導入新的傳送方法。 可以這麼來聯想,USB 2.0的主機端,連接到支援快速傳輸的HUB端,而該HUB卻又連接有FS/LS的周邊裝置。因此,主機端到HUB端,傳輸是HS快速的方式,而HUB端到周邊裝置端,傳輸卻是採用慢速/全速的方式。這就是分割式的資料交易方式的精神所在。 基於這個緣故,我們就可以如此來說,分割式的資料交易,可以由三個階段來構成,分別是: 階段一: 主機端與快速HUB端之間的「StartSplit」。細部過程是 SSPLIT OUT DATA0/ACK。 階段二: HUB端到LS/FS周邊裝置端之間的傳送。細部過程是OUT DATA0 ACK。 階段三: 主機端與快速HUB端之間的「CompleteSplit」。細部過程是CSPLIT OUT ACK。 請特別留意上述舉例在階段三的動作,如果當時HUB端到LS/FS周邊裝置端之間的傳送尚未完全結束,HUB端是可以回應「NYET」的信號,要求主機端重新再送一次。 之五︰USB 2.0新規制的描述器文字(Descriptor) 前文已經提過,描述器文字的資料結構通常是表格式資訊,這種描述器文字是用來記載裝置的屬性資料。要能夠正確無誤地與各種裝置維持互容性,這點勢必要維護好。 Device/Configuration/String/Interface/Endpoint是大家所熟悉的描述器文字。新增的標準描述器文字,計有「Device_Qualifier描述器文字」以及「Other_Speed_Configuration描述器文字」。 至於「INTERFACE_POWER描述器文字」,則是定義在USB Interface Power Management Specification之中。 「Device_Qualifier描述器文字」的構成,如表1的記載。 USB 2.0規格對於HUB裝置的亮燈顯示,有一番建議︰當燈號全都熄滅時,表示不能做任何動作。亮綠燈,表示可以動作。亮琥珀色,表示有錯誤發生。綠燈的閃爍,可能是軟體的警示。琥珀色的閃爍,可能是硬體的警示。 《下回待續》 [參考與延伸資訊:] 1. Universal Serial Bus Specification, Revision 2.0, April 27, 2000。 http://www.usb.org/developers/usb20 2. USB Developers Conference 2000/2001發表資料。 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |