在usb匯流排上,通過d+和d-兩個資料訊號線來傳輸,而並沒有像i2c匯流排那樣會有一根scl時鐘線來同步,那麼usb匯流排是如何來進行同步兩端訊號傳輸呢?此時我們得來了解一些編碼方式,以便處理因usb線纜所產生的訊號延遲及誤差等問題。
在該編碼試工中,正電平代表邏輯1,負電平**邏輯0,並且每次傳輸完一位資料,訊號都會回到零電平。這樣,在訊號線上會產生3種電平:正電平、負電平、零電平,相應的訊號圖例如下:
從上圖中可看出,每們資料傳輸中都有乙個歸零的過程,這樣接收端只需要在歸零後進行新的取樣,這樣就不需要單獨的時鐘訊號,這實際上相當於把時鐘訊號用歸零處理在傳輸的資料中,這種訊號叫自同步(self-clocking)訊號。
這雖然節省了訊號線,不過還是有它固有的缺點,由於rz編碼訊號中有大部分資料頻寬被用於傳輸「歸零」訊號而浪費掉了。除了省去這個步驟,nrz編碼就產生了,相對於rz編碼,nrz編碼就是不需要「歸零」。
下圖是nrz編碼的訊號圖例:
從上圖可以看到,每一位訊號都不需要「歸零」了,被浪費的頻寬收回了,但又失去了應有的自同步特性,讓我們感覺又回到了起點,那麼先繼續了解nrzi編碼吧。
nrzi編碼與nrz編碼的區別就是nrzi用翻轉來表示乙個邏輯,而訊號保持不變來表示另乙個邏輯。而在usb傳輸的編碼中採用的是nrzi格式,電平翻轉代表邏輯0,電平不變代表1。
下圖是nrzi與nrz的對比圖例:
對於翻轉訊號,可以將其當作一種通知機制,當把nrzi的波形完全翻轉後,其所表示的資料序列仍然是一樣的,對於使用差分訊號線來傳輸的usb尤為方便。
從上面的了解,nrz和nrzi都失去了自同步特性,不過還是可以通過一些技巧來處理。
在usb中,每個資料報的最開始處都有乙個同步域(sync),其值為00000001,在經過nrzi編碼後,就是一串方波,接收方可能過這個同步頭來計算傳送方的頻率,以便用這個頻率來繼續取樣資料訊號。
由於usb所採用的nrzi編碼中,每當邏輯0時就會進行電平翻轉,那麼接收方可通過這個不斷翻轉的訊號來調整同步的頻率,保證資料的正確傳輸。但這仍然存在問題,一旦電平長時間保持不變時,我們無法知道到時傳送的是100個邏輯1,還是1000個邏輯1,即使傳輸的是100個邏輯1,但接收方與傳送方的頻率相差了100分之1,那麼也還是存在可能把資料採集成為99或者101。而usb中採用了bit-stuffing位填充處理,即在連續傳送6個1後面會插入1個0,強制使傳送訊號進行翻轉,從而讓接收方調整頻率,同步接收。而接收方在接收時只要接收到連續的6個1後,直接將後面的0刪除即可恢復資料的原貌。
下圖是原始資料、位填充資料、nrzi編碼資料的乙個圖例:
而接收方只需要將上面接受到的nrzi編碼資料進行解碼,再進行位反填充即可還原為原始資料了。
此種編碼方式除了在usb上使用,還有在cd光碟以及使用光纖傳輸的100base-fx(fast ethernet)等產品、領域。
USB協議學習1
1.usb歷史 usb全稱 universal serial bus 序列匯流排 usb1.0 usb1.1 只支援1.5mb s的低速模式和12mb s的全速模式 usb2.0 又加入了高速模式480mb s usb3.0 5gb s 低速模式 d 有上拉電阻 d 為0 d 為1 我們稱這種狀態為...
Linux USB驅動 1 USB匯流排介紹
usb universal serial bus 通用序列匯流排,是一種外部匯流排標準,用於規範電腦與外部裝置的連線和通訊。usb是在1994年底由英特爾 康柏 ibm microsoft等多家公司聯合提出的,自1996年推出後,已成功替代串列埠和並口,成為當今個人電腦和大量智慧型裝置的必配介面之一...
USB基礎知識1 USB各型插座插頭封裝引腳分布
usb 各型插座插頭引腳分布 注 以下均為插座或插頭的前檢視,即將插座或插頭面向自己。usb a型插座和插頭 usb a型插座引腳分布 usb a型插頭引腳排列分布 usb b型插座和插頭 usb b型插座引腳分布 usb b型插頭引腳分布 usb mini b 插座和插頭 usb mini b型插...