普通的消費(fèi)者使用USB設(shè)備的時(shí)候是不需要了解USB本身到底是怎么回事的,實(shí)際上,這樣的人對(duì)USB到底是怎么回事都是處于無知的狀態(tài)。無知,同時(shí)又享受著USB帶來的便利,這種無知其實(shí)是很幸福的。
對(duì)于工程師來說,無知就常常意味著無能。你沒有辦法在無知的情況下進(jìn)行思考,自然也沒有辦法開展相關(guān)的工作,要想把它變成安生立命的基礎(chǔ),或是僅僅滿足求知的欲望,那就唯有從了解開始學(xué)習(xí),使自己成為有知的狀態(tài),然后在遇到問題的時(shí)候就有了很好的思考基礎(chǔ),從而能夠展開思考并且確定自己應(yīng)該采取的行動(dòng),這樣才有可能從中獲得正面的結(jié)果。
USB的規(guī)范既要滿足已有應(yīng)用的需求,又要滿足不斷增加的帶寬要求,就從1.0版本發(fā)展到了3.0版本(雙向5Gbps),又在2013年進(jìn)入了3.1時(shí)代,最終把它的速度提升到了雙向10Gbps的水平。
雙向同時(shí)進(jìn)行的通訊是無法和USB 2.0以前的單一總線雙向輪流進(jìn)行的通訊方法兼容的,所以,USB 3.0以后的最大的變化并不是速度提高了,而是變成了雙總線的結(jié)構(gòu):
為了持續(xù)兼容于過去的標(biāo)準(zhǔn),很顯然,USB 2.0的總線將持續(xù)存在下去,我想這種狀況將持續(xù)到低速設(shè)備消亡以后才會(huì)發(fā)生改變。所以,首先認(rèn)識(shí)USB 2.0的做法將具有比較長久的價(jià)值。我們今天關(guān)注的重點(diǎn)是USB 2.0以前版本的數(shù)據(jù)傳輸方法。
實(shí)際有效的數(shù)據(jù)傳輸大多是通過二進(jìn)制的數(shù)據(jù)表達(dá)方式來進(jìn)行的,由于二進(jìn)制數(shù)據(jù)的每個(gè)位只有兩個(gè)狀態(tài),其實(shí)現(xiàn)方法相對(duì)比較簡單。對(duì)于低速的數(shù)據(jù)傳輸來說,用高低不同的電壓信號(hào)就可以表達(dá)一個(gè)數(shù)據(jù)位的兩種狀態(tài),其驅(qū)動(dòng)電路和接收電路都非常簡單。但是,USB是用于不同設(shè)備之間的遠(yuǎn)距離傳輸?shù)?,在這種情況下,用電壓傳遞信號(hào)變得很不可靠,所以,它采用了電流傳遞信號(hào)的方法。下圖是USB 2.0規(guī)范中提供的收發(fā)器接口電路示意圖:
一個(gè)典型的USB 2.0收發(fā)器就是由這樣的接口加上數(shù)據(jù)串并行轉(zhuǎn)換器、數(shù)據(jù)時(shí)鐘恢復(fù)電路以及一個(gè)ULPI(UTMI+ Low Pin Interface)接口和其它一些輔助電路構(gòu)成的。
為了在USB總線上傳遞信息,驅(qū)動(dòng)器的內(nèi)部會(huì)有一個(gè)電流源(標(biāo)稱值為17.78mA),它被一個(gè)高速開關(guān)輪流切換引導(dǎo)至D+或D-。當(dāng)電流被引導(dǎo)至D+時(shí),它就對(duì)外表達(dá)了一個(gè)信號(hào)狀態(tài)J;如果電流被引導(dǎo)至D-,它對(duì)外表達(dá)的信號(hào)狀態(tài)是K。由J和K組成的信號(hào)序列來源于原始數(shù)據(jù),它們之間是通過不歸零反向編碼的方法來進(jìn)行轉(zhuǎn)換的:
如上圖所示,以0和1組成的二進(jìn)制串行數(shù)據(jù)經(jīng)過NRZI編碼后形成的J/K序列送入前面圖中的LS/FS Driver或High Speed Current Driver,其輸出就呈現(xiàn)為總線上的連續(xù)不斷的數(shù)據(jù)流了。
如果要將電壓信號(hào)在傳輸線上進(jìn)行傳輸,由于傳輸線是有阻抗的,其信號(hào)幅度會(huì)隨著線路的延長而衰減,到了接收端,很可能信號(hào)幅度已經(jīng)變得不足以被檢出正確的數(shù)據(jù)了,而電流信號(hào)則不會(huì)有這個(gè)問題。當(dāng)然了,電流信號(hào)的傳輸也會(huì)受到線路阻抗的影響,其脈沖形狀也會(huì)發(fā)生變化,但相對(duì)來說就要更好些。
以我的直覺來看,除了傳輸?shù)目煽啃酝猓捎秒娏餍盘?hào)傳輸數(shù)據(jù)對(duì)于及時(shí)發(fā)現(xiàn)外設(shè)的接入和拔出非常有好處。由于發(fā)送器的輸出是電流源,當(dāng)沒有負(fù)載的時(shí)候,有電流輸出的端子就總是會(huì)處于高壓狀態(tài),而當(dāng)負(fù)載接入的時(shí)候,其電壓馬上就降低了,這是非常方便檢測(cè)電路的設(shè)計(jì)的。
要進(jìn)行通訊,收發(fā)兩端的同步是非常重要的。同步分為兩種,一種是數(shù)據(jù)位的同步,一種是數(shù)據(jù)包的同步。
位同步要求收發(fā)兩側(cè)要有同步運(yùn)作的時(shí)鐘,這個(gè)時(shí)鐘的信息是包含在NRZI編碼之中的。在數(shù)據(jù)與NRZI編碼的轉(zhuǎn)換過程中,一個(gè)為0的數(shù)據(jù)位將造成NRZI編碼的狀態(tài)發(fā)生變化,為1的數(shù)據(jù)位則不會(huì)。編碼發(fā)生變化的信息是很重要的,它正好對(duì)應(yīng)著信號(hào)發(fā)生變化的地方,接收端的數(shù)據(jù)時(shí)鐘恢復(fù)電路利用此信息將與發(fā)端同步的時(shí)鐘恢復(fù)出來,然后再延遲一點(diǎn)時(shí)間后讀入狀態(tài)信息,就可以得到與發(fā)端相同的J/K數(shù)據(jù)流,再經(jīng)過反向的NRZI編碼,原始數(shù)據(jù)就可以被恢復(fù)出來了。
由于NRZI編碼僅在數(shù)據(jù)為0的時(shí)候發(fā)生變化,如果長時(shí)間出現(xiàn)連續(xù)的1就會(huì)造成NRZI編碼持續(xù)處于一種狀態(tài),其中便沒有了時(shí)鐘信息,數(shù)據(jù)時(shí)鐘恢復(fù)電路的時(shí)鐘輸出就可能失去與發(fā)端的同步。為了避免這個(gè)問題的發(fā)生,USB規(guī)范規(guī)定:如果數(shù)據(jù)串中連續(xù)出現(xiàn)了6個(gè)1,其后就要插入一個(gè)為0的數(shù)據(jù)位。這樣就可使接收器在7個(gè)數(shù)據(jù)位的傳輸時(shí)間內(nèi)至少會(huì)看到一次編碼信號(hào)的狀態(tài)轉(zhuǎn)換,從而保證其時(shí)鐘恢復(fù)電路不至于丟掉同步狀態(tài)。當(dāng)然了,這些插入的數(shù)據(jù)需要在接收端再把它們消除掉以恢復(fù)原始數(shù)據(jù)。
一個(gè)含有多個(gè)連續(xù)1的原始數(shù)據(jù)包被插入0后再進(jìn)行編碼的過程如下圖所示,其中的Stuffed Bit箭頭所指的地方就是新插入的為0的數(shù)據(jù)位。
上圖中標(biāo)識(shí)為Sync Pattern的信息被稱為同步模板,它們的作用是告訴收方后面的信息就是我要發(fā)送的數(shù)據(jù)包了,所以它們所起的作用就是數(shù)據(jù)包的同步。如果沒有包同步,收方就不會(huì)知道信息是從何時(shí)開始的,因而不能正確地理解收到的信息。
LS/FS通訊的數(shù)據(jù)包同步信號(hào)是由3個(gè)KJ序列緊接2個(gè)K狀態(tài)構(gòu)成的,如下圖所示:
高速通訊的同步頭要長許多,它包含了15個(gè)KJ序列和緊接著的2個(gè)K狀態(tài),總共有32個(gè)信號(hào)周期。考慮到高速通訊的速度提高了幾十倍,32個(gè)信號(hào)周期其實(shí)并不算太長。
USB總線上需要傳遞的數(shù)據(jù)可以分為4種類型:用于控制的數(shù)據(jù),設(shè)備和主機(jī)之間的連接過程就需要傳輸這種數(shù)據(jù)(地址、端口編號(hào)等);批量數(shù)據(jù),主機(jī)與打印機(jī)、掃描儀之類的外設(shè)間的通訊以這類數(shù)據(jù)為主;中斷信息,這種信息的出現(xiàn)時(shí)間是不確定的,但又需要系統(tǒng)做出及時(shí)的響應(yīng),這與MCU應(yīng)用中的中斷信號(hào)很類似;同步數(shù)據(jù),它們?cè)跁r(shí)序上有嚴(yán)格的要求,而且需要按照一定的節(jié)奏進(jìn)行,一旦不同步,接收方的感覺就會(huì)很差,所以在傳輸時(shí)需要安排出足夠的帶寬與其配合,攝像頭、話筒等外設(shè)所拾取的信息用這種方式進(jìn)行傳輸就比較好。
USB屬于輪詢總線,所有的通訊都是在主機(jī)的控制下進(jìn)行的,外設(shè)只有在收到主機(jī)的詢問數(shù)據(jù)包時(shí)才可以進(jìn)行響應(yīng),告訴主機(jī)自己沒有數(shù)據(jù)或是把它要發(fā)送的數(shù)據(jù)打包發(fā)給主機(jī),主機(jī)在收到以后要進(jìn)行回應(yīng),至少它得說明收到的信息是否正確吧,所以一次正常的通訊至少會(huì)有三個(gè)數(shù)據(jù)包需要傳輸。
USB規(guī)范把一個(gè)主機(jī)應(yīng)用和一個(gè)設(shè)備之間的傳輸通道稱為管道,這種管道并不真實(shí)存在,屬于一種邏輯實(shí)體。由于應(yīng)用眾多,外設(shè)也很多,所以可以有很多管道同時(shí)存在,這有點(diǎn)像現(xiàn)實(shí)中的物流系統(tǒng)的樣子。當(dāng)我向京東下了一個(gè)訂單的時(shí)候,我和京東之間就建立起了一個(gè)管道,京東將通過此管道把貨物送到我指定的地方,這個(gè)管道直到我收到貨物、京東也收到確認(rèn)信息以后才會(huì)消失。當(dāng)我需要京東的后續(xù)服務(wù)如退貨、返修之類的需求時(shí),一條新的管道又會(huì)建立起來。而在我做這些事情的時(shí)候,也有其他人在和京東之間做著同樣的事情。這個(gè)物流系統(tǒng)與USB不一樣的地方是它不是輪詢式的,因?yàn)榫〇|不會(huì)主動(dòng)來詢問我要不要什么東西。但是,京東為了做成更多的業(yè)務(wù),它會(huì)想辦法吸引我多去它那里選擇商品,這又屬于廣告性質(zhì)了,這有點(diǎn)像USB主機(jī)在總線上發(fā)布廣播信息:“我要關(guān)機(jī)了,你們大家配合一下?!敝劣谕庠O(shè)會(huì)不會(huì)配合,那是另外一回事了。
-
驅(qū)動(dòng)器
+關(guān)注
關(guān)注
53文章
8255瀏覽量
146552 -
數(shù)據(jù)傳輸
+關(guān)注
關(guān)注
9文章
1915瀏覽量
64658
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論