USB主機
USB主機在USB系統中處于中心地位。并且,對USB及其連接的設備有著(zhù)特殊的責任。主機控制著(zhù)所有對USB的訪(fǎng)問(wèn)一個(gè)外設。只有主機允許才有權力訪(fǎng)問(wèn)總線(xiàn)。主機同時(shí)也監測著(zhù)USB的結構。USB主機包括三層:設備驅動(dòng)程序,USB系統軟件,USB主控制器(主機的總線(xiàn)接口)。另外,還有兩個(gè)軟件接口:USB驅動(dòng)USBD接口,主機控制驅動(dòng)(HCD)接口。
USB數據流
從邏輯上講,USB數據的傳輸是通過(guò)管道進(jìn)行的。USB系統軟件通過(guò)缺省管道(與端點(diǎn)0相對應)管理設備。設備驅動(dòng)程序通過(guò)其它的管道來(lái)管理設備的。功能接口實(shí)際的數據傳輸過(guò)程是這樣的:設備驅動(dòng)程序通過(guò)對USBD接口(USB driver interface)的調用,發(fā)出輸入輸出請求(IRPI/O Request Packet)。USB驅動(dòng)程序接到請求后調用HCD接口(host controller driver interface),將IRP轉化為USB的傳輸(transfer),一個(gè)IRP可以包含一個(gè)或多個(gè)USB傳輸; 然后HCD將USB傳輸分解為總線(xiàn)操作(transaction),由主控制器以包(packet)的形式發(fā)出。需要注意的是,所有的數據傳輸都是由主機開(kāi)始的,任何外設都無(wú)權開(kāi)始一個(gè)傳輸。
IRP是由操作系統定義的,而USB傳輸與總線(xiàn)操作是USB規范定義的。為了進(jìn)一步說(shuō)明USB傳輸,我們引出幀frame的概念。 幀:USB總線(xiàn)將1ms定義為一幀,每幀以一個(gè)SOF包為起始,在這1ms里USB進(jìn)行一系列的總線(xiàn)操作。引入幀的概念主要是為了支持與時(shí)間有關(guān)的總線(xiàn)操作。 為了滿(mǎn)足不同外設和用戶(hù)的要求,USB提供了四種傳輸方式:控制傳輸,同步傳輸,中斷傳輸,批傳輸。它們在數據格式,傳輸方向,數據包容量限制,總線(xiàn)訪(fǎng)問(wèn)限制等方面有著(zhù)各自不同的特征:
控制傳輸(Control Transfer)
1.通常用于配置/命令/狀態(tài)等情形
2.其中的設置操作setup和狀態(tài)操作status的數據包具有USB定義的結構。因此控制傳輸只能通過(guò)消息管道進(jìn)行
3.支持雙向傳輸
4.對于高速設備,允許數據包最大容量為81632或64字節。對于低速設備,只有8字節一種選擇
5.端點(diǎn)不能指定總線(xiàn)訪(fǎng)問(wèn)的頻率和占用總線(xiàn)的時(shí)間,USB系統軟件會(huì )做出限制
6 具有數據傳輸,保證在必要時(shí)可以重試
同步傳輸(Isochronous Transfer)
1.是一種周期的連續的傳輸方式,通常用于與時(shí)間有密切關(guān)系的信息的傳輸
2.數據沒(méi)有USB定義的結構數據流管道
3.單向傳輸。如果一個(gè)外設需要雙向傳輸,則必須使用另一個(gè)端點(diǎn)
4.只能用于高速設備,數據包的最大容量可以從0到1023個(gè)字節
5.具有帶寬保證,并且保持數據傳輸的速率恒定。每個(gè)同步管道每幀傳輸一個(gè)數據包
6.沒(méi)有數據重發(fā)機制,要求具有一定的容錯性
7.與中斷方式一起占用總線(xiàn)的時(shí)間不得超過(guò)一幀的90%
中斷傳輸(Interrupt Transfer)
1.用于非周期的自然發(fā)生的數據量很小的信息的傳輸,如鍵盤(pán)鼠標等
2.數據沒(méi)有USB定義的結構數據流管道
3.只有輸入這一種傳輸方式即外設到主機
4.對于高速設備允許數據包最大容量為小于或等于64字節,對于低速設備,只能小于或等于8字節
5.具有最大服務(wù)周期保證,即在規定時(shí)間內保證有一次數據傳輸
6.與同步方式一起占用總線(xiàn)的時(shí)間不得超過(guò)一幀的90%
7.具有數據傳輸保證在必要時(shí)可以重試
批傳輸(Bulk Transfer)
1.用于大量的對時(shí)間沒(méi)有要求的數據傳輸
2.數據沒(méi)有USB定義的結構數據流管道
3.單向傳輸,如果一個(gè)外設需要雙向傳輸,則必須使用另一個(gè)端點(diǎn)
4.只能用于高速設備,允許數據包最大容量為81632或64字節
5.沒(méi)有帶寬的保證,只要有總線(xiàn)空閑就允許傳輸數據,優(yōu)先級小于控制傳輸
6.具有數據傳輸,保證在必要時(shí)可以重試,以保證數據的準確性
| |
| | USB總線(xiàn)協(xié)議
所有總線(xiàn)操作都可以歸結為三種包的傳輸:任何操作都是從主機開(kāi)始的,主機以預先排好的時(shí)序發(fā)出一個(gè)描述操作類(lèi)型,方向外設地址,以及端點(diǎn)號(這將在以下部分給予解釋)的包。我們稱(chēng)之為令牌包(Token Packet)。然后在令牌中指定的數據發(fā)送者發(fā)出一個(gè)數據包或者指出它沒(méi)有數據可以傳輸。而數據的目的地一般要以一個(gè)確認包(Handshake Packet)作出響應,以表明傳輸是否成功。
域的類(lèi)型
同步域(SYNC field)。所有的包都起始于SYNC域,它被用于本地時(shí)鐘與輸入信號的同步。并且在長(cháng)度上定義為8位。SYNC的最后兩位作為一個(gè)記號,表明PID域(標識域)的開(kāi)始。在以后的敘述中SYNC域將被省去。
標識域(Packet Identifier Field)。對于每個(gè)包PID都是緊跟著(zhù)SYNC的。PID指明了包的類(lèi)型及其格式。主機和所有的外設都必須對接收到的PID域進(jìn)行解碼。如果出現錯誤或者解碼為未定義的值,那么這個(gè)包就會(huì )被接收者忽略。如果外設接收到一個(gè)PID,它所指明的操作類(lèi)型或者方向不被支持,外設將不作出響應。
地址域(Address Field)。外設端點(diǎn)都是由地址域指明的。它包括兩個(gè)子域外設地址和外設端點(diǎn)。外設必須解讀這兩個(gè)域。其中有任何一個(gè)不匹配,這個(gè)令牌就會(huì )被忽略。
外設地址域(ADDR)。指定了外設,它根據PID所說(shuō)明的令牌的類(lèi)型,指明了外設是數據包的發(fā)送者或接收者。ADDR共6位,因此最多可以有127個(gè)地址。一旦外設被復位或上電,外設的地址被缺省為0,這時(shí)必須在主機枚舉過(guò)程中被賦予一個(gè)獨一的地址。而0地址只能用于缺省值而不能分配作一般的地址。
端點(diǎn)域(ENDP)。有4位,它使設備可以擁有幾個(gè)子通道,所有的設備必須支持一個(gè)控制端點(diǎn)0(endpoint 0)。低速的設備最多支持2個(gè)端點(diǎn)0和一個(gè)附加端點(diǎn)。高速設備可以支持最多16個(gè)端點(diǎn)。
幀號域(Frame Number Field)。這是一個(gè)11位的域,指明了目前幀的排號。每過(guò)一幀(1ms),這個(gè)域的值加1,到達最大值XFF后,返回0。這個(gè)域只存在于每幀開(kāi)始時(shí)的SOF令牌中,SOF令牌在下面將詳細介紹。
數據域(Data Field)。范圍是01023字節,而且必須是整數個(gè)字節。
CRC校驗。包括令牌校驗和數據校驗。
包的類(lèi)型
令牌包(Token Packed) 其中包括:IN(輸入),OUT(輸出),SETUP(設置)和SOF(Start of Frame幀起始)四種類(lèi)型。
對于OUT和SETUP來(lái)說(shuō),ADDR和ENDP中所指明的端點(diǎn)將接收到主機發(fā)出的數據包,而對IN來(lái)說(shuō),所指定的端點(diǎn)將輸出一個(gè)數據包。
Token和SOF在三個(gè)字節的時(shí)間內,以一個(gè)EOP(End of Packet)結束。如果一個(gè)包被解碼為T(mén)oken包,但是并沒(méi)有在3個(gè)字節時(shí)間內以EOP結束,它就會(huì )被看作非法或被忽略。
數據包包括Data0和Data1兩種類(lèi)型。這兩種包的定義是為了支持數據觸發(fā)。同步數據包包含了PIDDATA和CRC三個(gè)域。
應答包(Handshake Packet)僅包含一個(gè)PID域。Handshake用來(lái)報告數據傳輸的狀態(tài),只有支持流控制的傳輸類(lèi)型,控制中斷和批傳輸才能返回Handshake。
| | |