《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > USB協議淺析和USB設備設計簡介
USB協議淺析和USB設備設計簡介
姚成虎 王 磊
上海同濟大學電信學院(200092)
摘要: 從實用的角度出發,對USB協議進行了簡單的解釋,并對實際設計USB設備時必須考慮的一些關鍵問題作了比較全面的討論。
關鍵詞: USB協議
Abstract:
Key words :
</a>

摘   要: 從實用的角度出發,對USB協議" title="USB協議">USB協議" title="USB協議">USB協議進行了簡單的解釋,并對實際設計USB設備時必須考慮的一些關鍵問題作了比較全面的討論。
關鍵詞: USB  端點  描述符

   USB(Universal Serial Bus)是近年來應用在PC領域的新型接口技術,它是由一些PC大廠商如Microsoft、Intel等為了解決日益增加的PC外設與有限的主板插槽和端口之間的矛盾而制定的一種通用串行接口。USB接口具有許多優點,如接口簡單、速度快、支持即插即用和熱插拔等。本文從實用的角度出發,對USB協議和USB設備的設計(Windows環境下)進行了通俗的說明。由于USB協議的復雜性,許多具體問題不可能在一篇文章中講清楚,所以本文只能起到拋磚引玉的作用。
1  USB協議的一些關鍵概念和問題的說明
1.1 USB主機和USB設備
  USB通信中居于核心地位的是主機(Host),常見的USB主機是PC機。任何一次USB的數據傳輸都必須由主機發起和控制;所有的USB外設都只能和主機建立連接;任何二個外設之間或是二個主機之間都無法直接通信。所以,USB主機和USB設備的功能是不同的。
  USB主機的功能有:(1)如果需要,通過USB接口給外設提供電源(因為外設也可以自帶電源)。(2)檢測和配置設備(即設備的枚舉)。如:它必須檢測出設備的連接和拔除,了解設備的功能,給設備分配地址等。(3)錯誤檢查和管理數據的傳輸。這些由USB接口硬件保證,不必編程處理。(4)根據設定的傳輸方式與外設交換數據。
  USB設備的功能有:(1)管理電源。設備可以由USB接口獲取電源,也可能有自己的電源。設備在USB接口無通信作用超過3ms后應進入低耗電的暫停狀態。(2)檢測通信。每一個設備都要檢測通信信息包中的地址是否和本設備的地址相符,如果不符,設備就會忽略本次通信,這由USB接口硬件自動進行處理。在設備一開始連上USB接口時,使用固定的默認地址0,然后USB主機在檢測階段會給設備分配一個地址,以后的通信都按這個地址進行。(3)通信數據的錯誤檢查。由USB接口硬件保證,不必編程處理。(4)響應請求。主機在檢測到有設備連接上以后,會按USB協議發送相應的設備請求來了解設備的類型和能力,并對設備進行一些配置(如設定地址和配置描述符),設備應能響應這些請求,并返回相應的應答數據。(5)根據設定的傳輸方式與主機交換數據。
1.2 USB主機和USB設備之間數據的傳輸方式
  目前,USB協議規定了四種數據傳輸方式:(1)控制傳輸。主要用于主機對設備的檢測和配置。(2)中斷傳輸。用來支持那些偶然需要數據通信,但服務時間受限制的設備。中斷傳輸常常用在鍵盤、鼠標和游戲桿等設備上。(3)批量傳輸。適合使用在時間不重要的場合。批量傳輸可以傳輸大量的數據而不會阻塞總線,因為它會讓其他類型的傳輸先執行,以等待可以傳輸的時間,如用于磁盤操作。(4)同步傳輸。適合用于以固定速率進行的傳輸,而且可以容忍偶爾的錯誤,如實時語音傳輸。
1.3 設備的端點
  任何的數據傳輸都是傳遞到一個USB設備(確切地說是USB接口器件)的端點(Endpoint),或是由一個USB設備的端點發出。可以把端點簡單地理解成USB接口器件中的一個緩存器,用來作為數據的緩沖區,它由相應的控制寄存器和狀態寄存器來管理。儲存設備端點中儲存的可能是接收到的數據,也可能是等待要送出的數據。主機也有接收與傳送數據的緩沖區,不過主機并沒有把它定義成端點,而是當作與設備端點通信的出發點(Starting Point)。一個USB設備可能有好幾個端點,每個端點可以設置成輸出或輸入方向以及控制、中斷、批量或同步傳輸方式中的一種。因為主機一開始是通過端點0來檢測和配置設備的,所以每個設備都必須有一個端點0,而且其傳輸方式必須是控制傳輸(一般USB接口器件默認支持)。除此之外,設備很少需要其他的控制端點。USB協議定義了11個標準請求命令,用于在端點0以控制傳輸方式來檢測和配置設備。
1.4 設備的描述符
  USB主機是通過請求USB設備的一系列描述符來獲取設備的信息的。描述符是一種定義好的數據結構,其中可能包含整個設備的信息,或是設備中的一個組件的信息。主機請求描述符,設備回復描述符。目前,USB協議定義了三種類型的描述符:(1)標準類型。用于提供設備的基本信息。標準類型的描述符主要有:設備描述符、配置描述符、接口描述符、端點描述符以及字符串描述符等。(2)設備類別特定描述符。用于提供設備更詳細的信息。如HID類(人機接口類)設備的類別特定描述符中的HID描述符和報表描述符,就可以用來描述設備究竟是一個鼠標還是一個鍵盤。如果是鼠標,則報表描述符的數據就是鼠標的按鍵和位移。(3)廠商特定描述符。也是用于提供設備的一些更詳細信息,不過它是由廠商自己定義的,不像設備類別特定描述符那樣是USB規范定義的。標準類型的描述符如圖1所示。下面介紹其中5種常用描述符,其他描述符請參考相關的資料。

  如圖1所示,每個設備只能有一個設備描述符,每個設備描述符可以有多個配置描述符,每個配置描述符可以有多個接口描述符,每個接口描述符可以有多個端點描述符。字符串描述符(可選)定義了可能用到的字符串,其他的描述符可以根據字符串描述符中相應的索引值來引用相應的字符串。USB主機在一個控制傳輸的USB設置事務的數據信息包中,用GET_DESCRIPTOR標準請求(對應的請求碼為0x06)來請求各種標準描述符;設備通過相應的字段識別出主機請求的到底是哪一種描述符,并返回相應的描述符和聯絡信號。這是USB設備的固件編程所要做的工作之一。
1.5 USB數據信息包的格式
  信息包(Packet)是USB傳輸數據組織的基本形式,其具體意義和實際內容通過相應的一系列字段來表示,有的字段在USB協議中有定義好的關鍵字。信息包的字段類型有:
   (1)SYNC字段,用于信息包的開始與同步,它由硬件自動處理。
   (2)PID字段,信息包標識符(Packet Identifier,PID),信息包共有四種類型:令牌、數據、聯絡和特殊,四種類型共對應16個PID碼。
   (3)地址字段,用于指明USB主機究竟是要和哪個設備通信,設備的地址初始默認為0,主機會在設備檢測階段給設備分配一個地址。
   (4)端點字段,用于指明USB主機究竟是要和設備的哪個端點進行通信。如前所述,一個設備可以有多個端點。
   (5)幀號碼字段,USB主機把USB總線上的實際數據傳輸按時間分割成一塊塊的幀(Frame)或微幀(Micro Frame)。對于全速和低速的設備,主機將傳輸分成1毫秒的幀,對于高速設備主機將傳輸分成125微秒的微幀。幀號碼字段就是用于識別特定的幀或微幀,它由硬件自動處理。
   (6)數據字段,為實際要傳輸的數據。
   (7)校驗字段,用于信息包的數據校驗,它由硬件自動處理。
  下面對PID字段作進一步的說明,因為這個字段對于理解信息包的概念至關重要。USB協議規定數據傳輸由事務(Transaction)(事務的概念見1.6的介紹)組成,而事務由信息包組成。一般來說,大多數事務包含三個信息包:令牌信息包、數據信息包和聯絡信息包。信息包根據PID字段(USB協議定義了16個PID碼)來區分不同的類型。令牌信息包有四種類型:
   (1)OUT,表示主機輸出數據到設備;
   (2)IN,表示主機從設備讀取數據;
   (3)SOF,表示幀標號開始;
   (4)SETUP,專門用于控制傳輸的設置事務。
   數據信息包和聯絡信息包也有各自的PID碼,這里不再細述。其中,只有OUT、IN和SETUP類型的令牌信息包中需要指定地址字段和端點字段。這也容易理解,因為既然稱為“令牌”,當然首先要確定和哪個設備以及設備的哪個端點進行通信。由此也可以看出,USB在數據傳輸中使用的是軟件聯絡方式,所以大大簡化了接口形式。而常用的RS-232串行通信還有一些硬件的聯絡方式,如RTS和CTS信號線。雖然RS-232串行通信中也可以使用一些簡單的軟件聯絡方式,如XON和XOFF碼,但與USB的軟件聯絡方式相比就顯得太簡單了。
1.6  事  務
  USB協議規范將事務定義為“將一個服務傳送到一個端點”,這里的服務指的是主機傳送信息給設備,或是主機從設備接收信息。每一個傳輸可以包含一筆或多筆事務,而每一筆事務可以包含一個、二個或三個信息包,可以把信息包理解為數據傳輸物理上的基本單位。大部分事務都包含三個信息包:令牌信息包、數據信息包和聯絡信息包。根據令牌信息包的PID標識,事務一般分為三種類型:輸入(IN)事務、輸出(OUT)事務和設置(SETUP)事務。每一種傳輸類型(控制、中斷、批量以及同步)包含一個或多個階段,而每一個階段包含一個或多個事務。具體說來,在控制傳輸中,一般包含設置事務階段(對應于設置事務類型)、數據階段(對應于輸入或輸出事務類型)以及狀態階段(對應于輸入或輸出事務類型),而中斷、批量以及同步傳輸中只包含數據階段。這其中,設置階段包含一個設置事務(由令牌信息包、數據信息包和聯絡信息包組成);數據階段可能由多個事務組成,一般每個事務也是由令牌信息包、數據信息包和聯絡信息包組成的(只有同步傳輸的數據階段的事務中不包含聯絡信息包);狀態階段包含一個事務,該事務也是由令牌信息包、數據信息包和聯絡信息包組成,不過數據信息包的內容為空,狀態階段只用于控制傳輸,以表明整個控制傳輸是否成功。
1.7 USB設備驅動程序的加載
  在主機從設備描述符了解到設備的信息后,它會尋找一個最合適的驅動程序來管理主機和設備的通信。在選擇驅動程序時,Windows會試圖將系統的.inf文件內的信息與從設備內讀出的廠商和產品ID以及版本號作比較,如果相符,就根據相應的.inf文件加載驅動程序。如果Windows找不到合適的.inf文件,它會顯示一個“添加新硬件向導”來讓用戶指定驅動程序。
2  USB設備的設計
2.1 USB設備的設計概述
  USB規范定義了許多設備類型,用不同的設備類別碼和接口類別碼來表示,如HID(Human Interface Device,人機接口類設備)設備類別碼是0x00,接口類別碼是0x03,HID類的設備有鍵盤、鼠標以及游戲桿等;Mass Storage(大容量存儲設備)的設備類別碼也是0x00,而接口類別碼是0x09,Mass Storage類的設備有軟盤、硬盤、光盤以及FLASH盤等;其他還有顯示器類、通信設備類、音頻設備類等。USB規范中還有一個特別的Vendor Specific類設備,用于廠商自定義設備類型,其接口類別碼為0xFF。所以,設計者總是可以找到一種適合自己要設計的設備類型。
  設計USB設備時,首先要確定好設備到底屬于哪個類別,然后要實現基本USB通信協議以及設備的類別通信協議。例如,U盤屬于Mass Storage設備,所以設計U盤時,除了要實現基本的USB通信協議,還要實現大容量存儲設備類規范中的UFI命令規范。由于Windows 提供了對Mass Storage 協議的支持,因此U盤只需要遵循Mass Storage 協議來組織數據和處理命令,即可實現與PC 機交換數據。一般來說,一個USB設備的完整設計過程主要包括四個部分:
   (1)USB硬件接口的設計;
   (2)設備固件的編程;
   (3)PC端設備驅動程序的開發;
   (4)PC端設備應用程序的開發。
2.2 USB硬件接口設計
  USB接口芯片一般有二種選擇方案:(1)USB芯片本身就是一個微控制器,如Cypress的EZ-USB系列芯片,與8051兼容,大部分EZ-USB芯片支持最大數目的端點(一個控制端點0以及30個額外的端點)以及所有的4種傳輸方式;(2)USB芯片只處理USB通信,所以它必須由外部的微控制器來控制,如PLILIPS的PDIUSBD12,它符合USB1.1規范,包含默認端點0在內共有3個雙向端點。
2.3 控制器的固件編程
  USB接口芯片收到數據或發送出數據后都會產生中斷,所以固件編程的核心就是編寫中斷服務程序。這項工作主要就是根據相關寄存器的標志來對各個端點緩沖區的數據進行處理。可以把中斷服務程序分為一些功能模塊(函數)來考慮:(1)端點0的響應。當設備插上USB接口后,主機會發出一系列的請求給設備的端點0,設備的固件程序應該能在端點0對這些要求進行正確響應。(2)其他端點的數據通信過程。通過(1)主機就能知道設備端點的使用情況,以后就可以通過其他端點以設定的傳輸方式來交換數據。(3)實現設備類別遵循的協議規范。例如,如果要設計U盤,則U盤的固件程序就要實現對Mass Storage Class規范中的UFI命令規范的支持。
2.4 PC端驅動程序的開發
  在Windows內執行的USB設備驅動程序,必須符合Microsoft定義的Win32驅動程序模型(Win32 Driver Model,WDM)。它是一種分層的驅動程序模型。Microsoft提供了Windows DDK(Windows Device Developer′s Kit)工具和VC編譯器來編寫WDM驅動程序,具體請參考相關的開發指南。也有許多第三方的工具軟件可以用來編寫USB的WDM驅動程序,如Jungo 的WinDriver USB。使用這類工具軟件不需要深入了解WDM的編程細節。
2.5 PC端應用程序的設計
   在Win32系統中,操作系統把每一個設備都抽象為文件,應用程序的設計只需要通過幾條簡單的文件操作API函數,就可以實現與設備的驅動程序通信。這類Win32函數有以下幾種:(1)CreatFile函數,用于打開一個設備,返回一個與設備相關的句柄;(2)ReadFile函數,用于從設備中讀取數據;(3)WriteFile函數,用于向設備寫數據;(4)DeviceIoControl函數,用于對設備進行一些控制操作,如更改設置等;(5)CloseHandle函數,關閉一個由CreatFile函數所打開的設備,函數的參數為CreatFile函數返回的設備句柄。還有其他一些和USB設備類別相關的API,可用于獲取設備的信息,如設備路徑和名稱等,具體請參考相關的開發指南。
3  結  論
   本文對設計USB設備所涉及到的一些關鍵問題作了比較全面和通俗的解釋。鑒于USB接口具有的優點,可以想象USB設備必將獲得越來越廣泛的應用。
參考文獻
1   蕭世文.USB2.0硬件設計.北京:清華大學出版社,2003
2   周立功.PDIUSBD12 USB固件編程與驅動開發.北京:北京航空航天大學出版社,2003
3   馬偉.嵌入式USB主機系統的研究與設計.計算機測量與控制.2003;11(5):381
 

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久九九免费视频| 欧美三区在线| 亚洲欧美激情诱惑| 亚洲美女视频在线观看| 亚洲国产欧洲综合997久久| 欧美一区二区啪啪| 午夜在线a亚洲v天堂网2018| 亚洲一区二区av电影| 亚洲一二三区在线| 亚洲一区二区欧美日韩| 国产精品99久久久久久久久久久久 | 亚洲男人的天堂在线观看| 中文欧美字幕免费| 中日韩视频在线观看| 中文有码久久| 亚洲一区二区免费在线| 亚洲少妇最新在线视频| 亚洲一二区在线| 亚洲欧美日韩系列| 欧美主播一区二区三区美女 久久精品人| 午夜精品久久久久久久99热浪潮| 午夜在线观看欧美| 欧美在线视频一区二区三区| 久久福利资源站| 久久人人97超碰精品888| 久久综合伊人77777麻豆| 欧美成人影音| 欧美日韩色一区| 国产精品jvid在线观看蜜臀| 国产精品影院在线观看| 国产一区999| 亚洲第一精品夜夜躁人人爽| 91久久在线视频| 亚洲少妇在线| 欧美一区二区三区成人| 欧美日韩色婷婷| 亚洲一区二区三区三| 亚洲视频综合| 欧美在线视频a| 亚洲日本激情| 亚洲性视频网站| 久久精品视频99| 欧美成人综合| 国产精品久久久久久久午夜| 国产一区99| 亚洲人屁股眼子交8| 亚洲午夜一二三区视频| 久久国产精品久久精品国产| 亚洲精品女人| 亚洲欧美综合网| 久久亚洲色图| 欧美性大战久久久久久久蜜臀| 国产香蕉久久精品综合网| 亚洲第一福利社区| 亚洲一区二区三区四区中文| 久久精品国产一区二区三| 日韩午夜av电影| 欧美一区二区三区免费视频| 猫咪成人在线观看| 国产精品美女久久久久久免费| 激情懂色av一区av二区av| 99国产精品自拍| 久久精品免费电影| 亚洲免费网址| 免费亚洲电影在线观看| 国产精品婷婷午夜在线观看| 亚洲欧洲三级电影| 欧美亚洲自偷自偷| 在线一区视频| 美女在线一区二区| 国产乱码精品一区二区三区av | 在线观看视频一区二区| 亚洲精品美女在线观看播放| 午夜在线播放视频欧美| 一级成人国产| 久久婷婷国产麻豆91天堂| 国产精品99一区| 亚洲国产一区视频| 欧美一区二区视频在线| 在线视频一区二区| 久久综合狠狠综合久久激情| 国产精品一区二区三区四区| 亚洲美女精品成人在线视频| 亚洲电影免费| 久久www免费人成看片高清 | 一区在线观看| 亚洲主播在线播放| 中文有码久久| 欧美国产大片| 狠狠色狠狠色综合日日tαg | 亚洲欧美日韩精品在线| 亚洲激情专区| 亚洲区免费影片| 久久国产加勒比精品无码| 欧美视频一区二区在线观看| 亚洲国产欧美不卡在线观看| 欧美一区二区三区四区夜夜大片 | 亚洲一区二区毛片| 亚洲午夜小视频| 欧美国产视频在线观看| 今天的高清视频免费播放成人| 亚洲综合激情| 亚洲免费影视第一页| 欧美日韩1区2区| 亚洲国语精品自产拍在线观看| 亚洲福利视频在线| 久久精品动漫| 国产一区高清视频| 欧美一级免费视频| 欧美在线视频观看| 国产日韩欧美在线播放不卡| 亚洲欧美国产日韩天堂区| 亚洲欧美日韩一区二区| 国产精品久久久久一区| 亚洲深夜福利网站| 亚洲欧美三级在线| 国产精品欧美经典| 亚洲欧美日韩视频一区| 欧美有码视频| 国产主播一区| 亚洲国产天堂久久国产91| 美国十次了思思久久精品导航| 狠狠色丁香久久综合频道| 亚洲国产福利在线| 欧美成人免费一级人片100| 亚洲第一网站| 99这里有精品| 欧美日韩在线播放三区四区| 一本大道久久精品懂色aⅴ| 亚洲欧美日韩成人| 国产欧美精品在线观看| 欧美一区91| 蜜桃av一区二区在线观看| 亚洲国产精品一区在线观看不卡| 亚洲精品乱码久久久久久按摩观 | 亚洲欧美乱综合| 亚洲精品午夜| 国产乱码精品一区二区三区不卡| 在线一区二区视频| 午夜伦欧美伦电影理论片| 国产日韩欧美另类| 亚洲电影免费| 欧美日韩999| 亚洲男人的天堂在线观看| 久久久免费av| 亚洲高清自拍| 在线综合欧美| 国产欧美精品一区二区色综合| 亚洲第一精品福利| 欧美精品久久一区| 亚洲一级在线观看| 久久裸体艺术| 日韩亚洲欧美一区二区三区| 先锋影音久久| 在线国产欧美| 亚洲主播在线播放| 一区二区自拍| 亚洲无限乱码一二三四麻| 国产欧美日韩综合精品二区| 91久久国产综合久久| 欧美三级乱码| 欧美一区二区三区在线| 欧美成年人网站| 亚洲一二三区在线| 美女露胸一区二区三区| 99国产精品自拍| 久久久之久亚州精品露出| 亚洲伦理久久| 久久福利资源站| 亚洲久久成人| 久久美女艺术照精彩视频福利播放| 亚洲人体影院| 久久精品国产精品亚洲精品| 亚洲精品日韩在线观看| 久久国产精品99国产精| 91久久极品少妇xxxxⅹ软件| 午夜综合激情| 亚洲国产日韩欧美综合久久| 午夜精品久久久久久久蜜桃app| 在线播放日韩欧美| 午夜视黄欧洲亚洲| 亚洲激情偷拍| 欧美在线观看日本一区| 亚洲精品色婷婷福利天堂| 久久精品女人| 亚洲精品网站在线播放gif| 久久久久在线| 亚洲一区免费观看| 欧美精品播放| 久久国产精品久久久| 国产精品国产三级国产| 亚洲伦理一区| 黄色成人在线| 亚洲欧美色婷婷| 亚洲精品网站在线播放gif| 欧美一级在线亚洲天堂| 国产精品久久久久av免费| 亚洲香蕉网站| 欧美日韩免费在线视频| 亚洲欧洲日产国码二区|