目錄
Ⅰ 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總線接口
1 USB接口標(biāo)準(zhǔn)
標(biāo)準(zhǔn)的USB連接器有A型、B型和Mini B型颠黎,每個(gè)型號(hào)又分為插頭和插座。
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)
3 USB數(shù)據(jù)編解碼和位填充
USB采用NRZI(非歸零編碼)對(duì)發(fā)送的數(shù)據(jù)包進(jìn)行編碼。即:
輸入數(shù)據(jù)0牡属,編碼成“電平翻轉(zhuǎn)”票堵;輸入數(shù)據(jù)1,編碼成“電平不變”
位填充是為了保證發(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è)警检。
5 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)移圖如下。
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è)包。
-
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ù)域裹驰。
SOF令牌包沒有地址域和數(shù)據(jù)域隧熙。
B.數(shù)據(jù)包
數(shù)據(jù)包沒有地址域和幀號(hào)域。根據(jù)transfer的類型不同幻林,數(shù)據(jù)包最大長(zhǎng)度有所不同贞盯。
C.握手包
握手包有四種可選:
- ACK: 傳輸正確完成
- NAK: 設(shè)備暫時(shí)沒有準(zhǔn)備好接收數(shù)據(jù),或沒有準(zhǔn)備好發(fā)送數(shù)據(jù)
- STALL: 設(shè)備不能用于傳輸
- NYET/ERR: 僅用于高速傳輸沪饺,設(shè)備沒有準(zhǔn)備好或出錯(cuò)
握手包僅有PID域躏敢。
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
圖中一個(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)組成栅炒。
B.中斷傳輸 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
同步傳輸是不可靠的傳輸粤策,所以它沒有握手包,也不支持 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)的。
參考資料