USB2.0概述及協(xié)議基礎(chǔ)

目錄

Ⅰ USB總線接口
1 USB接口標(biāo)準(zhǔn)
2 USB總線信號(hào)
3 USB數(shù)據(jù)編解碼和位填充
4 USB拓?fù)浣Y(jié)構(gòu)
5 USB邏輯部件

Ⅱ USB設(shè)備
1 USB設(shè)備供電方式
2 USB設(shè)備插入檢測(cè)機(jī)制
3 USB設(shè)備狀態(tài)
4 USB設(shè)備枚舉過程
5 USB描述符

Ⅲ USB傳輸
1 USB傳輸格式  
2 包packet  
3 事務(wù)transaction
4 傳輸transfer

USB是通用串行總線(Universal Serial Bus)的縮寫。在USB1.0和USB1.1版本中私杜,只支持1.5Mb/s的低速(low-speed)模式和12Mb/s的全速(full-speed)模式蔬螟,在USB2.0中惜颇,又加入了480Mb/s的高速模式。


USB應(yīng)用范圍

ⅠUSB總線接口


1 USB接口標(biāo)準(zhǔn)

標(biāo)準(zhǔn)的USB連接器有A型、B型和Mini B型颠黎,每個(gè)型號(hào)又分為插頭和插座。


USB接口標(biāo)準(zhǔn)

2 USB總線信號(hào)

USB使用差分傳輸模式狭归,兩根數(shù)據(jù)線D+和D-。

差分信號(hào)1:D+>2.8V文判,D-<0.3V唉铜;
差分信號(hào)0:D->2.8V,D+<0.3V律杠。
  • J狀態(tài)和K狀態(tài)
    低速下:D+為“0”,D-為“1”是為“J”狀態(tài)竞惋,“K”狀態(tài)相反柜去;
    全速下:D+為“1”,D-為“0”是為“J”狀態(tài)拆宛,“K”狀態(tài)相反嗓奢;
    高速同全速。
  • SE0狀態(tài)
    D+為“0”浑厚,D-為“0”
  • IDLE狀態(tài)
    低速下空閑狀態(tài)為“K”狀態(tài)股耽;
    全速下空閑狀態(tài)為“J”狀態(tài);
    高速下空閑狀態(tài)為“SE0”狀態(tài)钳幅。

針對(duì)全速模式物蝙,有以下幾個(gè)重要信號(hào):

  • Reset信號(hào)
    主機(jī)在要和設(shè)備通信之前會(huì)發(fā)送Reset信號(hào)來把設(shè)備配置到默認(rèn)的未配置狀態(tài)。即SE0狀態(tài)保持10ms敢艰。
  • Resume信號(hào)
    20ms的K狀態(tài)+低速EOP
  • Suspend信號(hào)
    3ms以上的J狀態(tài)
  • SOP信號(hào)
    從IDLE狀態(tài)切換到K狀態(tài)
  • EOP信號(hào)
    持續(xù)2位時(shí)間的SE0信號(hào)诬乞,后跟隨1位時(shí)間的J狀態(tài)
  • SYNC信號(hào)
    3個(gè)重復(fù)的K、J狀態(tài)切換钠导,后跟隨2位時(shí)間的K狀態(tài)
suspend震嫉、resume信號(hào)

SYNC信號(hào)

3 USB數(shù)據(jù)編解碼和位填充

USB采用NRZI(非歸零編碼)對(duì)發(fā)送的數(shù)據(jù)包進(jìn)行編碼。即:
輸入數(shù)據(jù)0牡属,編碼成“電平翻轉(zhuǎn)”票堵;輸入數(shù)據(jù)1,編碼成“電平不變”


NRZI編碼

位填充是為了保證發(fā)送的數(shù)據(jù)序列中有足夠多的電平變化逮栅。填充的對(duì)象時(shí)輸入數(shù)據(jù)悴势,即先填充后編碼窗宇。數(shù)據(jù)流中每6個(gè)連續(xù)的“1”,就要插入1個(gè)“0”瞳浦。
接收方解碼NRZI碼流担映,然后識(shí)別出填充位,并丟棄它們叫潦。


位填充

4 USB拓?fù)浣Y(jié)構(gòu)

USB是一種主從結(jié)構(gòu)的系統(tǒng)蝇完,主機(jī)叫做Host,從機(jī)叫做Device矗蕊。Device包括USB function和USB HUB短蜕。

USB總線基于分層的星狀拓?fù)浣Y(jié)構(gòu),以HUB為中心傻咖,連接周圍設(shè)備朋魔。總線上最多可連接127個(gè)設(shè)備卿操。Hub串聯(lián)數(shù)量最多5個(gè)警检。


USB拓?fù)浣Y(jié)構(gòu)
USB體系結(jié)構(gòu)

5 USB邏輯部件

USB邏輯部件

Ⅱ USB設(shè)備


1 USB設(shè)備供電方式

USB設(shè)備有兩種供電方式:
1)自供電設(shè)備:設(shè)備從外部電源獲取工作電壓
2)總線供電設(shè)備: 設(shè)備從VBUS(5v)取點(diǎn)

對(duì)總線供電設(shè)備,區(qū)分低功耗和高功耗USB設(shè)備害淤。
低功耗設(shè)備是最大功耗不超過100mA扇雕。
高功耗設(shè)備是枚舉時(shí)最大功耗不超過100mA,枚舉完成配置結(jié)束后功耗不超過500mA窥摄。

設(shè)備在枚舉工程中镶奉,通過配置描述符來向主機(jī)報(bào)告它的供電方式和功耗要求的。

2 USB設(shè)備插入檢測(cè)機(jī)制


沒有設(shè)備連上主機(jī)時(shí)崭放,主機(jī)的D+和D-都在低電平(SE0狀態(tài))哨苛,當(dāng)SE0狀態(tài) 持續(xù)一段時(shí)間了,就被主機(jī)認(rèn)為是斷開狀態(tài)币砂。
當(dāng)設(shè)備連上主機(jī)時(shí)建峭,主機(jī)檢測(cè)到某一數(shù)據(jù)線電平拉高并持續(xù)一段時(shí)間,就認(rèn)為有設(shè)備連上來了决摧。主機(jī)必須在復(fù)位設(shè)備前迹缀,立即采樣總線狀態(tài)來判斷設(shè)備的速度。

3 USB設(shè)備狀態(tài)

USB設(shè)備有插入蜜徽、供電祝懂、初始化、分配地址拘鞋、配置和掛起六中狀態(tài)砚蓬,其狀態(tài)轉(zhuǎn)移圖如下。


USB設(shè)備狀態(tài)

4 USB設(shè)備枚舉過程

對(duì)應(yīng)USB設(shè)備的狀態(tài)盆色,host對(duì)USB設(shè)備會(huì)有以下活動(dòng):



在枚舉過程中灰蛙,都是使用控制傳輸祟剔。

  • 復(fù)位階段
    USB主機(jī)檢測(cè)到USB設(shè)備插入后,就會(huì)對(duì)設(shè)備復(fù)位摩梧。USB設(shè)備在總線復(fù)位后其地址為0物延,這樣主機(jī)就可以通過地址0和那些剛剛插入的設(shè)備通信。USB主機(jī)往地址為0的設(shè)備的端點(diǎn)0發(fā)送獲取設(shè)備描述符的標(biāo)準(zhǔn)請(qǐng)求仅父。設(shè)備會(huì)將設(shè)備描述符返回給主機(jī)叛薯,主機(jī)在成功獲取到數(shù)據(jù)包后,就會(huì)返回一個(gè)確認(rèn)數(shù)據(jù)包給設(shè)備笙纤,從而進(jìn)入接下來的分配地址階段耗溜。
  • 分配地址階段
    主機(jī)對(duì)設(shè)備又一次復(fù)位,就進(jìn)入到分配地址階段省容。主機(jī)往地址為0的設(shè)備的端點(diǎn)0發(fā)送一個(gè)設(shè)置地址的請(qǐng)求抖拴,新的設(shè)備地址就包含在建立過程的數(shù)據(jù)包中。具體的地址由主機(jī)負(fù)責(zé)管理腥椒,主機(jī)會(huì)分配一個(gè)唯一的地址給剛接入的設(shè)備阿宅。設(shè)備在收到這個(gè)建立過程后,就會(huì)進(jìn)入到狀態(tài)過程笼蛛。設(shè)備等待主機(jī)請(qǐng)求狀態(tài)返回洒放,收到狀態(tài)請(qǐng)求后,設(shè)備就返回0長(zhǎng)度的狀態(tài)數(shù)據(jù)包伐弹。如果主機(jī)確認(rèn)該狀態(tài)包已經(jīng)正確收到,就會(huì)發(fā)送應(yīng)答包ACK給設(shè)備榨为,設(shè)備在收到這個(gè)ACK之后惨好,就要啟用新的設(shè)備地址了。這樣設(shè)備就分配到了一個(gè)唯一的設(shè)備地址随闺。
  • 獲取描述符階段
    獲取描述符可以形象地表述如下:

Host:你是什么設(shè)備日川?

Device:12 01 0100....Device Descriptor
Host:你有幾種功能?
Device:09 02 09....Configuration Descriptor
Host:每個(gè)功能有幾個(gè)接口矩乐?
Device:09 04 00....Interface Descriptor
Host:每個(gè)接口使用哪幾個(gè)端點(diǎn)龄句?
Device:06 05 82....Endpoint Descriptor
Host:好了,我知道你是誰(shuí)了散罕,開始傳輸設(shè)備吧分歇!
Device:OK,Read Go!

5 USB描述符

USB描述符有以下11類:


每種描述符的第一個(gè)字節(jié)描述該描述符包含的字節(jié)數(shù)目欧漱,第二個(gè)節(jié)描述該描述的類型职抡。

  • Device Descriptor


  • Configuration Descriptor


  • Interface Descriptor


  • Endpoint Descriptor


  • String Descriptor


Ⅲ USB傳輸


1 USB傳輸格式

USB總線上傳輸數(shù)據(jù)是以包(packet)為基本單位的,必須把不同的包組織成事務(wù)(transaction)才能傳輸數(shù)據(jù)误甚。
USB協(xié)議規(guī)定了四種傳輸(transfer)類型:批量傳輸缚甩、同步傳輸谱净、中斷傳輸和控制傳輸。其中擅威,批量傳輸壕探、同步傳輸和中斷傳輸每傳輸一次數(shù)據(jù)都是一個(gè)事務(wù),控制傳輸包括三個(gè)過程郊丛,建立過程和狀態(tài)過程分別是一個(gè)事務(wù)李请,數(shù)據(jù)過程則可能包含多個(gè)事務(wù)。


2 包packet

一個(gè)包被分為不同域宾袜,根據(jù)不同類型的包捻艳,所包含的域是不一樣的。但都要以同步域SYNC開始庆猫,緊跟一個(gè)包標(biāo)識(shí)符PID认轨,最終以包結(jié)束符EOP來結(jié)束這個(gè)包。


packet的組成
  • PID域
    PID是用來標(biāo)識(shí)一個(gè)包的類型的月培。它共有8位嘁字,只使用4位(PID0PID3),另外4位是PID0PID3的取反杉畜,用來校驗(yàn)PID纪蜒。

    PID

    PID規(guī)定了四類包:令牌包、數(shù)據(jù)包此叠、握手包和特殊包纯续。同類的包又各分為具體的四種包。
    包類型

    僅在幀首傳輸一次SOF包灭袁。

  • 地址域
    地址共占11位猬错,其中低7位是設(shè)備地址,高4位是端點(diǎn)地址茸歧。


    地址
  • 幀號(hào)域
    幀號(hào)占11位倦炒,主機(jī)每發(fā)出一個(gè)幀,幀號(hào)都會(huì)自加1软瞎,當(dāng)幀號(hào)達(dá)到0x7FF時(shí)逢唤,將歸零重新開始計(jì)數(shù)。

  • 數(shù)據(jù)域
    根據(jù)傳輸類型的不同涤浇,數(shù)據(jù)域的數(shù)據(jù)長(zhǎng)度從0到1024字節(jié)不等鳖藕。


    數(shù)據(jù)長(zhǎng)度
  • CRC域


    CRC校驗(yàn)
A. 令牌包

令牌包有四種:

  • OUT: 通知設(shè)備將要輸出一個(gè)數(shù)據(jù)包
  • IN: 通知設(shè)備返回一個(gè)數(shù)據(jù)包
  • SETUP: 只用在控制傳輸中,也是通知設(shè)備將要輸出一個(gè)數(shù)據(jù)包只锭,與OUT令牌的區(qū)別是:只使用DATA0數(shù)據(jù)包吊奢,且只能發(fā)到device的控制端點(diǎn)
  • SOF: 在每幀開始時(shí)以廣播的形式發(fā)送,針對(duì)USB全速設(shè)備,主機(jī)每1ms產(chǎn)生一個(gè)幀页滚,USB主機(jī)會(huì)對(duì)當(dāng)前幀號(hào)進(jìn)行統(tǒng)計(jì)召边,每次幀開始時(shí)通過SOF包發(fā)送幀號(hào)。

OUT/IN/SETUP令牌包沒有幀號(hào)域和數(shù)據(jù)域裹驰。


OUT/IN/SETUP令牌包結(jié)構(gòu)

SOF令牌包沒有地址域和數(shù)據(jù)域隧熙。


SOF令牌包結(jié)構(gòu)
B.數(shù)據(jù)包

數(shù)據(jù)包沒有地址域和幀號(hào)域。根據(jù)transfer的類型不同幻林,數(shù)據(jù)包最大長(zhǎng)度有所不同贞盯。


數(shù)據(jù)包結(jié)構(gòu)
C.握手包

握手包有四種可選:

  • ACK: 傳輸正確完成
  • NAK: 設(shè)備暫時(shí)沒有準(zhǔn)備好接收數(shù)據(jù),或沒有準(zhǔn)備好發(fā)送數(shù)據(jù)
  • STALL: 設(shè)備不能用于傳輸
  • NYET/ERR: 僅用于高速傳輸沪饺,設(shè)備沒有準(zhǔn)備好或出錯(cuò)

握手包僅有PID域躏敢。


握手包結(jié)構(gòu)

3 事務(wù)transaction

事務(wù)可以分成三類

  • setup事務(wù):主機(jī)用來向設(shè)備發(fā)送控制命令
  • 數(shù)據(jù)輸入事務(wù):主機(jī)用來從設(shè)備讀取數(shù)據(jù)
  • 數(shù)據(jù)輸出事務(wù):主機(jī)用來向設(shè)備發(fā)送數(shù)據(jù)

事務(wù)組成:Token packet + Data packet + 可選的Handshake packet

4 傳輸transfer

USB協(xié)議定義了四種傳輸類型:控制傳輸(Control transfer)、大容量數(shù)據(jù)傳輸(Bulk transfer)整葡、同步傳輸(Isochronous transfer)和中斷傳輸(Interrupt transfer)件余。

傳輸類型 特點(diǎn) 應(yīng)用場(chǎng)景
控制傳輸 非周期性,突發(fā) 命令和狀態(tài)的傳輸
大容量傳輸 非周期性遭居,突發(fā) 數(shù)據(jù)可以占用任意帶寬啼器,容忍延遲
同步傳輸 周期性 持續(xù)性傳輸,傳輸與時(shí)效相關(guān)的信息俱萍,并且在數(shù)據(jù)中保存時(shí)間戳的信息
同步傳輸 周期性端壳,低頻率 允許有延遲的通信
A.大容量傳輸 bulk transfer
bulk transfer流程圖

圖中一個(gè)方框表示一個(gè) Packet,灰色的包表示主機(jī)發(fā)出的包枪蘑,白色的包表示Device 發(fā)出的包损谦。批量傳輸是可靠的傳輸,需要握手包來表明傳輸?shù)慕Y(jié)果岳颇。若數(shù)據(jù)量比較大照捡,將采用多次批量事務(wù)傳輸來完成全部數(shù)據(jù)的傳輸,傳輸過程中數(shù)據(jù)包的PID 按照 DATA0-DATA1-DATA0-…的方式翻轉(zhuǎn)赦役,以保證發(fā)送端和接收端的同步麻敌。
一次批量傳輸( Transfer)由 1 次到多次批量事務(wù)傳輸( Transaction)組成栅炒。


bulk transfer
B.中斷傳輸 interrupt transfer
interrupt transfer流程圖

中斷傳輸在流程上除不支持 PING 之外掂摔,其他的跟批量傳輸是一樣的。他們之間的區(qū)別也僅在于事務(wù)傳輸發(fā)生的端點(diǎn)不一樣赢赊、支持的最大包長(zhǎng)度不一樣乙漓、優(yōu)先級(jí)不一樣等這樣一些對(duì)用戶來說透明的東西。
這里所說的中斷释移,跟硬件上的中斷是不一樣的叭披,它不是由設(shè)備主動(dòng)發(fā)出一個(gè)中斷請(qǐng)求,而是由主機(jī)保證在不大于某個(gè)時(shí)間間隔內(nèi)安排一次傳輸玩讳。
主機(jī)在排定中斷傳輸任務(wù)時(shí)涩蜘,會(huì)根據(jù)對(duì)應(yīng)中斷端點(diǎn)描述符中指定的查詢間隔發(fā)起中斷傳輸嚼贡。中斷傳輸有較高的優(yōu)先級(jí),僅次于同步傳輸同诫。


中斷傳輸
C.同步傳輸 Isochronous transfer
Isochronous transfer流程圖

同步傳輸是不可靠的傳輸粤策,所以它沒有握手包,也不支持 PID 翻轉(zhuǎn)误窖。主機(jī)在排定事務(wù)傳輸時(shí)叮盘,同步傳輸有最高的優(yōu)先級(jí)。


同步傳輸
D.控制傳輸 Control transfer

一次控制傳輸分為三(或兩個(gè))個(gè)階段:建立( Setup)霹俺、 數(shù)據(jù)( DATA)(可能沒有)以及狀態(tài)( Status)柔吼。 每個(gè)階段都由一次或多次事務(wù)傳輸組成。

  • 建立過程 setup stage
    使用一個(gè)建立事務(wù)丙唧,如下:
    control transfer的setup stage流程圖
  • 數(shù)據(jù)過程 data stage
    數(shù)據(jù)過程是可選的愈魏。一個(gè)數(shù)據(jù)過程包含一筆或者多筆數(shù)據(jù)事務(wù)。數(shù)據(jù)過程的第一個(gè)數(shù)據(jù)包必須是DATA1包艇棕,然后每次正確傳輸一個(gè)數(shù)據(jù)包就在DATA0和DATA1之間交替蝌戒。
  • 狀態(tài)過程 status stage
    狀態(tài)過程也是一筆批量事務(wù)。狀態(tài)過程只使用DATA1包沼琉。

設(shè)備枚舉過程中各種描述符的獲取以及設(shè)置地址和設(shè)置配置等北苟,都是通過控制傳輸來實(shí)現(xiàn)的。


控制傳輸

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末打瘪,一起剝皮案震驚了整個(gè)濱河市友鼻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闺骚,老刑警劉巖彩扔,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異僻爽,居然都是意外死亡虫碉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門胸梆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敦捧,“玉大人,你說我怎么就攤上這事碰镜【ぢ眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵绪颖,是天一觀的道長(zhǎng)秽荤。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么窃款? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任课兄,我火速辦了婚禮,結(jié)果婚禮上晨继,老公的妹妹穿的比我還像新娘第喳。我一直安慰自己,他們只是感情好踱稍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布曲饱。 她就那樣靜靜地躺著,像睡著了一般珠月。 火紅的嫁衣襯著肌膚如雪扩淀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天啤挎,我揣著相機(jī)與錄音驻谆,去河邊找鬼。 笑死庆聘,一個(gè)胖子當(dāng)著我的面吹牛胜臊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伙判,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼象对,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了宴抚?” 一聲冷哼從身側(cè)響起勒魔,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菇曲,沒想到半個(gè)月后冠绢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡常潮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年弟胀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊式。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孵户,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垃帅,到底是詐尸還是另有隱情延届,我是刑警寧澤剪勿,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布贸诚,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏酱固。R本人自食惡果不足惜械念,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望运悲。 院中可真熱鬧龄减,春花似錦、人聲如沸班眯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)署隘。三九已至宠能,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間磁餐,已是汗流浹背违崇。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诊霹,地道東北人羞延。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像脾还,于是被迫代替她去往敵國(guó)和親伴箩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容