日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀] 轉(zhuǎn)自東海的博客http://6xudonghai.blog.163.com/blog/static/3364062920086253155137/ USB作為一種串行接口,應(yīng)用日益廣泛。如同每個工

轉(zhuǎn)自東海的博客http://6xudonghai.blog.163.com/blog/static/3364062920086253155137/

USB作為一種串行接口,應(yīng)用日益廣泛。如同每個工程設(shè)計人員必須掌握I2C,RS232這些接口一樣,我們也必須掌握usb.

但是usb的接口協(xié)議實在有點費解,linux uhci驅(qū)動作者之一Alan Stern曾經(jīng)就說過“The USB documentation?

is downright evil. Most????of it is just crap, written by a committee. You're better off ignoring

?most?of it ”。

本文將從整體上介紹usb協(xié)議,包括usb host ,usb hub,usb function。希望能給讀者一個總體上的了解。也

因此,文章將分成相應(yīng)的三部分講解。

一。usb function

1。初識usb.usb是一種串行接口協(xié)議,它靠d+,d-兩條數(shù)據(jù)線構(gòu)成的差分線來進行數(shù)據(jù)傳輸,這讓我們非常感興

趣它到底和我們通常熟悉兩線rs232/485有何區(qū)別。了解這種區(qū)別有助于我們對usb作一個深入的了解。那么讓

我們回想一下到底一個兩線rs232的數(shù)據(jù)是如何傳送的,如圖一:

在這里我們的重點在于,我們發(fā)現(xiàn)要在串行口傳送數(shù)據(jù)一個最體碼的要求恐怕就是:要知道數(shù)據(jù)傳輸何時開始,

何時結(jié)束。即如何delimit.那么rs232怎么做的。顯然,在idle(空閑)時,即無數(shù)據(jù)傳送時,數(shù)據(jù)線處于高電

平,等到有數(shù)據(jù)開始傳送,發(fā)送方首先拉低數(shù)據(jù)線(start),表示數(shù)據(jù)傳輸開始,接受端也因為這個“start”信號

開始準(zhǔn)備接受即將到來的數(shù)據(jù),類似一次握手,隨后,在兩者之間的數(shù)據(jù)傳送開始,結(jié)束后主方再次拉高數(shù)據(jù)

線,表示結(jié)束傳輸,自此兩者重新進入Idle狀態(tài)。等待下一輪傳送開始。

了解了rs232,那么我們自然想到usb如何做到這個呢,既然是串行位流傳輸,也理所當(dāng)然的解決這個問題。沒錯,

Usb協(xié)議必然要解決這個問題,讓我們作一個類似rs232的比較吧!類似于rs232,usb的傳輸楨如圖二:

(這里我們暫時忽略這個傳輸所代表的意義)為了說明問題,我們對一些問題簡化,我們定義這樣幾個狀態(tài):
假設(shè)D+,D-分別表示usb信號線的電平信號。那么對于usb full speed function(high speed ,low speed是不

同的),我們定義差分數(shù)據(jù)線上可能出現(xiàn)的四個狀態(tài):

Data J state:D+=1,D-=0;
Data K state:D+=0,D-=1;
SE0:D+=D-=0;
SE1:D+=D-=1;

那么上面的圖中,相應(yīng)的也可表示為圖三:

這個對usb full speed function來說,idle狀態(tài)將處于Data J state,se0表示一楨結(jié)束。看這個圖是不是很像

我們熟悉的rs232。沒錯!?。∷麄兇_實很相似。在無數(shù)據(jù)傳輸時,它們都處于Idle狀態(tài),當(dāng)要開始傳輸數(shù)據(jù)時,

先發(fā)一個sync(同步信號,rs232為start,usb為一sync字節(jié),見協(xié)議說明)信號進行“握手”,而后開始傳輸,

當(dāng)傳輸要結(jié)束時,發(fā)一stop信號(usb為一個se0狀態(tài)表示要結(jié)束傳輸),最后又進入idle態(tài)等待新的傳輸。不過,

你可能更加注意到,他們還是不同的。不同在于usb是按packet進行傳輸?shù)模褪钦f它傳輸?shù)淖钚挝皇莗acket,

而rs232是按字節(jié)傳送的,也即它的最小傳送單位是字節(jié)。既然是按pakcet傳送,想想我們相較于rs232的按字節(jié)

單位傳輸,我們可以得到哪些“好處”。想想看,pakcet的好處不就在于我們可以靈活的定義數(shù)據(jù)的傳送格式,

傳送方式,從而可以適應(yīng)各種各樣的串行設(shè)備,這不就是所謂的“通用串行總線”嗎?

簡介:從本節(jié)開始,我們將介紹usb的傳輸機制。這節(jié)先介紹usb現(xiàn)有傳輸方式的背景知識,做為對下節(jié)將要展開

的四種傳輸類型,描述符,等相關(guān)知識的一個導(dǎo)引。

2。usb傳輸。
我們在上一節(jié)中了解到了usb的“packet”的感念,了解到了usb傳送一個packet總是以sync開始,以eop結(jié)束,

這個稱為delimiter,即標(biāo)記packet的始末。有了packet,我們就可以在usb總線上傳輸數(shù)據(jù)了。但是這還不夠,

比如數(shù)據(jù)傳送方向,即傳回usb主機還是傳下usb從機,數(shù)據(jù)傳送的地址,數(shù)據(jù)傳送的類型(這些后面我們將會知

道)這些信息在傳輸之前是必須搞清楚的,那么這個信息如何得知呢,看來這就需要我們定一套基于packet的

“協(xié)議”了。主機與從機在傳輸中均遵循這套“協(xié)議”,那么這些問題就可以迎刃而解。事實上,usb的一次數(shù)

據(jù)傳輸總是遵循這樣的“協(xié)議”的:

首先,主機發(fā)第1個packet給從機,聲明數(shù)據(jù)傳送方向,數(shù)據(jù)傳輸?shù)刂?,?shù)據(jù)傳輸類型。

其次,主機發(fā)第2個至第n個packet載有實際數(shù)據(jù)
最后,從機返回一個packet是一個ACK包,報告數(shù)據(jù)傳輸?shù)慕Y(jié)果,比如接受出錯或成功等信息,這樣主機

就可以借此了解到這次傳輸情況,從而有可能來作出相應(yīng)措施如決定是否重發(fā)。

這里我們考慮的是主機發(fā)數(shù)據(jù)給從機的情況,那么從機發(fā)數(shù)據(jù)給主機時,是不是也可以這樣呢?當(dāng)然可以,比如

從機要發(fā)數(shù)據(jù)給主機時,也可以采取同主機類似的方式:

首先,從機發(fā)第1個packet給主機,聲明數(shù)據(jù)傳送方向,數(shù)據(jù)傳輸?shù)刂罚瑪?shù)據(jù)傳輸類型。
其次,從機發(fā)第2個至第n個packet載有實際數(shù)據(jù)
最后,主機返回一個packet是一個ACK包,報告數(shù)據(jù)傳輸?shù)慕Y(jié)果,比如接受出錯或成功等信息,這樣從機就可以

借此了解到這次傳輸情況,從而有可能來作出相應(yīng)措施如決定是否重發(fā)。

基本上可以歸結(jié)為一個“三段式”傳輸

這里有人可能注意到了,對這樣一個傳輸機制,從機和主機的功能將是一樣的,因為這樣的實現(xiàn)機制,從機

可能在某一時刻是主機,某一時刻又可能是從機,因為他們要實現(xiàn)同樣的功能。這樣實現(xiàn)起來的復(fù)雜性也將是

一樣的。

注:這里概念或許容易混淆,其實,我們這里的主機(master)和從機(slaver)是一個transceiver,即可收可發(fā)。

相應(yīng)的,在某一時刻,master在發(fā)數(shù)據(jù),我們稱其為transmitter,在接受時我們稱為receiver.對slaver同樣。

我們可能還注意到了,usb這種按pakcet傳輸?shù)姆绞皆趯崿F(xiàn)時已經(jīng)很復(fù)雜了(至少比rs232要復(fù)雜多吧),至少我

們目前看來主從機功能一樣這樣的實現(xiàn)方式似乎還是可行,但是后面我們談到usb host時將會了解到host的功

能是如何的復(fù)雜,以至于讓一個usb function?也帶上如此的功能成本和實現(xiàn)復(fù)雜性將陡然上升。作為面向廣范

應(yīng)用的usb,這是我們不允許的。我們期望的是一個使用usb?的udisk,使用usb的光驅(qū),使用usb的耳麥等等這些

東西不要因為usb而變得昂貴,復(fù)雜。

正是因為這個原因,usb從機的傳輸發(fā)式便由上面的方式改成了下面的方式進行:

首先,主機發(fā)第1個packet給從機,聲明數(shù)據(jù)傳送方向,數(shù)據(jù)傳輸?shù)刂罚瑪?shù)據(jù)傳輸類型。
其次,從機收到主機送來的第一個packet后,再發(fā)第2個至第n個packet載有實際數(shù)據(jù)
最后,主機返回一個packet是一個ACK包,報告數(shù)據(jù)傳輸?shù)慕Y(jié)果,比如接受出錯或成功等信息,這樣從機

就可以借此了解到這次傳輸情況,從而有可能來作出相應(yīng)措施如決定是否重發(fā)。

而對于usb 主機傳輸方式保持不變。


對于這樣的改變,我們馬上就有疑問了:這個改變的傳輸方式是和未改變之前的等價嗎。當(dāng)然,不全等價。問題

在哪里?仔細觀察一下便知,兩者區(qū)別在于第一個packet是由誰發(fā)起的。未改變之前,第一個packet總是由要傳

送數(shù)據(jù)的一方發(fā)起,而改變之后的第一個Packet總是由主機發(fā)起。這樣,就變成如果從機要發(fā)送數(shù)據(jù)給主機時,

總是由主機發(fā)起(第一個packet),然后從機開始傳送。
可能初次接觸我們會感覺怪怪的,怎么從機要給主機發(fā)送數(shù)據(jù)前反而要主機先發(fā)packet給從機。 ?這樣行嗎?

我們要說這樣是可以的,因為通常一次傳輸交互的產(chǎn)生,并非無來由的產(chǎn)生,這些都是由程序員控制的,控制usb

何時收,何時發(fā),及發(fā)給誰?。。?/p>

這里我們就注意到了,usb function(總是作為從機)的功能一下從原來與主機具有相同功能的tranceiver變成

了現(xiàn)在僅具發(fā)送(或接收)功能的transmitter(或Receiver)實現(xiàn)的復(fù)雜性及成本可想而知也就相應(yīng)得減小了。

簡介:本節(jié)介紹usb full speed function的四種傳輸類型。

上節(jié)中我們了解到了usb host?與usb function?之間采用的是一種“非對稱”的傳輸,也就是說,無論usb接受

數(shù)據(jù)還是發(fā)送數(shù)據(jù),都是由usb host首先發(fā)起。即傳輸?shù)牡谝粋€packet總是由usb host發(fā)出的。這個packet將聲

明本次即將進行的數(shù)據(jù)傳輸方向,數(shù)據(jù)傳輸?shù)刂泛蛿?shù)據(jù)傳輸類型。

?

控制傳輸(Control Transfers)

: 或許你已經(jīng)注意到了,一個usb host端口并不是僅僅支持一個Usb function.如圖1,

通過usb hub,一個usb host端口可以連接usb鼠標(biāo),usb鍵盤,Usb寫字板......。要連接這么多東西在同一個

usb host上,我們通常會有一個基本問題,即usb host如何識別這些被連接在它的端口上的設(shè)備呢。正如通常的

主從式通訊系統(tǒng)一樣,如rs485多機通訊,我們通常是用一個特定的地址標(biāo)志每一個從設(shè)備。對這里的usb,我們

采用同樣的方法,將為每個掛接在該usb host上的usb function指定一個特定地址,通過這個特定地址來識別

每個usb function.看來這將是一個usb function在數(shù)據(jù)傳輸之前必須解決的問題--得到它的地址分配。

這個“地址指定”的過程需要usb host通知usb function才能完成,這個交互過程就是一個控制式傳輸。通過

這個“控制式傳輸”,usb host將指定地址給usb function ,以為即將進行的正式通訊做好準(zhǔn)備工作。這里細心

的讀者可能已經(jīng)注意到了,既然usb host總要分配地址給usb function才能進行正式的數(shù)據(jù)傳輸工作,那么

usb host將如何與一個初始時未分配地址的usb function進行交互來分配地址呢。這里,是這樣解決的:

usb協(xié)議保留了一個“通用地址”0,usb host 通過這個地址0來和初始未分配地址的usb function進行通訊,進行一

些初始的準(zhǔn)備工作,諸如這里的為它非配一個特定地址。后面我們就會了解到,usb除了配置地址外,還有一些

其它參數(shù)需要事先主從雙方達成共識。這些參數(shù)也都是通過控制式傳輸完成的。一個Usb 的控制式傳輸如圖二:

一個Usb的控制式傳輸分為兩個或三個階段進行傳輸:setup stage,data stage(視情況而定),status stage。

?

首先是setup stage,聯(lián)系上節(jié)所說的Usb傳輸模式,usb Host總是先發(fā)起第一個packet--這里它 首先發(fā)起setup, 之后發(fā)起以data0為起始的setup data, 最后usb function回應(yīng)ack結(jié)束一次交互。 其次如果有data stage,類似的,還是按照上節(jié)說的usb傳輸模式, usb host總是先發(fā)起第一個Packet--Out(或in), 之后usb host(或usb function)發(fā)起以data1為起始的payload data, 最后Usb fuction(或usb host)回應(yīng)ack結(jié)束一次交互。 如果數(shù)據(jù)未傳完,繼續(xù)data stage,同上繼續(xù)。 最后是status stage,類似的, usb host首先發(fā)起第一個Packet--in(或out), 之后usb function(或usb host)發(fā)起以data1為起始的Null data(0長度), 最后Usb host(或usb function)回應(yīng)ack結(jié)束一次交互。

?


如此,整個控制式傳輸結(jié)束。 你或許有疑問,data stage為什么進行了多次而非一次完成?實際上,usb總是將

一批大量的數(shù)據(jù)分成了許多小段來進行傳輸,稱為一個pay load。這樣傳輸?shù)哪康氖侨菀讓鬏斶M行控制。既然

一次大量的數(shù)據(jù)總是被分成一段一段來分次傳輸,那么這里就出現(xiàn)了一個需要事先確定的參數(shù)(wMaxPacketSize):即每次即這個小段有多大。這個參數(shù)如地址指派一樣,正式傳輸之前需要事先達成共識。通過控制式傳輸,現(xiàn)在我們

已經(jīng)完成了usb function的地址指定等參數(shù)的設(shè)置工作,下一步可以進行正式的數(shù)據(jù)傳輸了。

塊傳輸(bulk Transactions

我們終于等到usb function 配置完成,現(xiàn)在我們的任務(wù)是要傳送一批數(shù)據(jù),這里可以使用批量數(shù)據(jù)傳輸(bulk Transactions)。 一個批量傳輸總是按照如圖所示方式進行,

首先,usb host發(fā)起第一個Packet--in(或out),表示要開始數(shù)據(jù)傳輸了。 其次,usb function(或usb host)發(fā)起以data1(或data0)為起頭的payload data,開始一次交互。 再其次,usb host(或Usb function)發(fā)起ack回應(yīng)這次交互。 如果數(shù)據(jù)還為傳完,繼續(xù)上述過程,即: 首先,usb host再次發(fā)起一個Packet--in(或out),表示又要開始數(shù)據(jù)傳輸了。 其次,usb function(或usb host)發(fā)起以data0(或data1)為起頭的payload data,開始又一次交互。 再次,usb host(或Usb function)發(fā)起ack回應(yīng)這次交互。如此繼續(xù)直至傳輸完成。

這里的疑問依然是為什么一次可能傳完的數(shù)據(jù)為什么分成多次進行傳輸,原因在上次介紹控制式傳輸式已經(jīng)說明。

后面我們就會明白,為什么這樣可以方便控制傳輸過程。 仔細看看控制式的data stage采用的傳輸方式,是否

就是批量傳輸方式呢?!注意,每次payload data的“牽頭人”(preamble)在輪番掉換,先是data1,接著data0,

再是data1,......如此接替,只要有一次交互出現(xiàn)問題,這個接替規(guī)則就會被打破進而被Usb host識別而發(fā)現(xiàn)

傳輸異常。所以這個交替的“牽頭人”規(guī)則是可靠數(shù)據(jù)傳輸?shù)乃扇〉拇胧┲弧?/p>

?

同步傳輸(Isochronous Transactions)和中斷式傳輸(Interrupt Transactions

在批量數(shù)據(jù)傳輸中,觸發(fā)一次批量數(shù)據(jù)傳輸總是“被動”的,就是說需要數(shù)據(jù)傳輸時Usb host并不會主動發(fā)起

傳輸,而是需要得到你的指令。當(dāng)你告訴它:“一切ok,讓我們開始吧!” 這時它才開始數(shù)據(jù)傳輸。這種方式

顯然在某些情況下并不適合。比如音視頻流,你無法要求它聽從你的“指揮”,讓它等你發(fā)指令給usb host,

然后開始一次傳輸。我們需要的是一種“及時”傳輸。一個好的方案就是設(shè)置一個timer,按照tick發(fā)起usb傳輸。

這個tick通常以1ms(usb full speed)為最小單位。這時,可以設(shè)置為每次1ms tick出現(xiàn),usb host“自動”發(fā)起一

次數(shù)據(jù)傳輸。那么這種方案具體如何來實現(xiàn)呢?看來最基本的要素便是一個發(fā)出tick的timer,而這個“timer”

需要usb host和usb function(事實上還要包括usb hub)雙方均能“看到”,從而協(xié)調(diào)工作,否則單方面的

timer又有何意義?這個"timer"(或tick)在usb中使用一個特殊的packet實現(xiàn),即是SOF。這個SOF由USB HOST?

相當(dāng)精確的以每1.00 ms ±0.0005 ms的時間周期發(fā)送給usb device,來在二者之間定時。從而usb function能

夠“及時”的了解到“現(xiàn)在時刻”。 現(xiàn)在我們在usb host和usb function之間建立起了“對時”機制。那么接下

來看看剛才設(shè)想的“自動”傳輸如何實現(xiàn)。事實上,一旦usb host及usb function雙方建立了一種時間機制,那

么這種“自動”傳輸是很容易實現(xiàn)的。usb 實現(xiàn)同步式傳輸或中斷式傳輸總是以一種類似于批量數(shù)據(jù)傳輸?shù)姆绞?/p>

進行的,唯一不同的是傳輸?shù)挠|發(fā)不再是“被動”的,而是由SOF所建立的tick觸發(fā)。

首先,時間到達,usb host發(fā)起第一個Packet--in(或out),表示要開始數(shù)據(jù)傳輸了。 其次,usb function(或usb host)發(fā)起以data1(或data0)為起頭的payload data,開始一次交互。 再其次,如果是中斷式傳輸,usb host(或Usb function)發(fā)起ack回應(yīng)這次交互,如果是同步式傳輸, 該步跳過。

如此重復(fù)上述步驟,即usb host等待下一個tick到達,并開始新一輪的交互。

這里我們注意到了,同步式傳輸和中斷式傳輸二者雖然都是時間觸發(fā),但是中斷式傳輸需要ack應(yīng)答,而相反,

同步式傳輸不需要。這個最大的區(qū)別決定了同步式傳輸是一種非可靠傳輸,但是因此換來了更多的usb傳輸時間。

也因此,同步式傳輸?shù)?payload data(對應(yīng)wMaxPacketSize )通常相較于其他傳輸方式比較大,因為它消掉了

ack所占有數(shù)據(jù)傳輸時間。這里還有一個地方值得注意的是tick的設(shè)定,這個tick也是需要事先usb host 和

usb function達成共識的參數(shù)之一。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉
<pre id="1hwpj"><nav id="1hwpj"></nav></pre>