《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > 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亚洲国产精品_日韩亚洲一区二区
欧美日精品一区视频| 国内成人自拍视频| 久久五月天婷婷| 亚洲欧美中文日韩在线| 99国产精品视频免费观看一公开| 欧美一区久久| 午夜精彩国产免费不卡不顿大片| 亚洲视频图片小说| 一本色道久久综合狠狠躁篇的优点 | 欧美va亚洲va香蕉在线| 久久综合色影院| 久久在线精品| 久久婷婷国产综合国色天香| 久久青草欧美一区二区三区| 久久久精品日韩| 久久久美女艺术照精彩视频福利播放| 久久国产精品一区二区三区四区| 性欧美暴力猛交69hd| 欧美在线免费一级片| 久久99在线观看| 久久久久久电影| 久久久综合精品| 久久久久久免费| 麻豆成人精品| 欧美精品v国产精品v日韩精品| 欧美精品福利| 欧美午夜视频网站| 国产精品入口66mio| 国产日韩精品一区二区三区| 国产亚洲欧洲997久久综合| 韩国欧美国产1区| 亚洲二区在线视频| 亚洲欧美日韩一区二区| 欧美在线视频观看免费网站| 欧美专区第一页| 亚洲国产高清在线观看视频| 最新亚洲激情| 夜夜夜精品看看| 亚洲精品网站在线播放gif| 亚洲精品乱码久久久久久黑人| 一本色道久久综合亚洲精品高清| 亚洲一区二区精品在线观看| 香蕉久久夜色精品国产使用方法 | 久久国产成人| 亚洲美女免费精品视频在线观看| 一区二区三区你懂的| 先锋资源久久| 麻豆av一区二区三区| 欧美日韩的一区二区| 国产精品视频自拍| 黑人巨大精品欧美一区二区| 亚洲精品少妇网址| 亚洲欧美国产另类| 91久久精品美女高潮| 亚洲一区二区欧美日韩| 久久久99精品免费观看不卡| 欧美精品在线观看一区二区| 国产精自产拍久久久久久| 在线观看视频日韩| 亚洲视频狠狠| 亚洲区一区二区三区| 欧美亚洲日本一区| 欧美jizzhd精品欧美喷水| 国产精品久久久久毛片软件| 影音先锋久久久| 亚洲午夜高清视频| 亚洲国产精品视频一区| 亚洲一区二区三区中文字幕在线 | 夜夜嗨av一区二区三区网页| 欧美在线精品免播放器视频| 欧美岛国在线观看| 国产精品素人视频| 亚洲国产精品一区在线观看不卡 | 国产一区二区三区四区五区美女| 亚洲每日更新| 久久精品国产一区二区电影| 亚洲午夜精品国产| 模特精品在线| 国产亚洲精品久久久久久| 亚洲精品久久久久久久久久久久久| 亚洲欧美日韩中文视频| 一本大道久久a久久综合婷婷| 久久精品一区二区三区不卡牛牛| 欧美日韩小视频| 亚洲二区在线视频| 欧美一区亚洲| 亚洲欧美日本国产有色| 欧美成年网站| 国产一区亚洲一区| 亚洲影视综合| 亚洲网站在线播放| 欧美久久综合| 在线观看日韩av电影| 午夜久久美女| 亚洲欧美国产日韩天堂区| 欧美区亚洲区| 亚洲国产精品第一区二区三区| 欧美一区二区三区四区在线观看地址 | 99精品欧美一区二区蜜桃免费| 久久久久久九九九九| 国产精品扒开腿爽爽爽视频| 亚洲欧洲精品一区二区三区| 亚洲高清视频一区| 久久精品亚洲| 国产日韩亚洲欧美精品| 亚洲免费视频成人| 午夜精品久久久久久99热软件 | 在线播放中文字幕一区| 欧美一区二区三区在线播放| 香蕉久久夜色精品国产使用方法| 欧美午夜女人视频在线| 日韩一级精品视频在线观看| 亚洲精品视频免费在线观看| 男男成人高潮片免费网站| 国内精品一区二区三区| 久久不射2019中文字幕| 久久久久免费视频| 国产有码在线一区二区视频| 翔田千里一区二区| 欧美在线观看视频在线| 国产欧美大片| 欧美一级大片在线观看| 久久久国产精品一区| 韩国av一区二区三区| 久久精品男女| 美女精品国产| 亚洲精美视频| 一本色道**综合亚洲精品蜜桃冫| 欧美乱大交xxxxx| av成人免费在线观看| 亚洲综合国产| 国产精品私房写真福利视频 | 亚洲天堂网站在线观看视频| 欧美视频在线视频| 亚洲社区在线观看| 亚洲欧美在线另类| 国产目拍亚洲精品99久久精品| 亚洲欧美日韩精品综合在线观看| 校园春色综合网| 国产一区91精品张津瑜| 亚洲国产精品成人| 欧美福利在线| 日韩视频在线一区二区| 亚洲午夜精品| 国产精品日本欧美一区二区三区| 午夜久久tv| 麻豆久久婷婷| 91久久夜色精品国产九色| 一区二区日韩| 国产精品无码专区在线观看| 午夜在线观看欧美| 麻豆freexxxx性91精品| 亚洲剧情一区二区| 欧美一区二视频| 在线观看精品视频| 中文一区二区| 国产亚洲成年网址在线观看| 亚洲人成网站色ww在线| 欧美日韩一区二区在线观看| 午夜精品网站| 免费在线看成人av| 亚洲视频日本| 六月婷婷久久| 夜夜嗨av一区二区三区四区| 久久国产精品久久久| 亚洲国产日韩一区二区| 亚洲综合色婷婷| 伊人久久久大香线蕉综合直播| 一区二区不卡在线视频 午夜欧美不卡在 | 一本色道久久综合狠狠躁篇怎么玩| 亚洲一区二区在| 国产精品亚洲产品| 欧美一区二区三区免费视频| 欧美午夜不卡在线观看免费 | 欧美日韩aaaaa| 亚洲一区二区三区久久| 久色婷婷小香蕉久久| 99精品免费网| 久久亚洲一区二区三区四区| 亚洲久色影视| 久久久青草青青国产亚洲免观| 日韩视频精品在线观看| 久久福利毛片| 亚洲精品国产系列| 久久久激情视频| 一区二区久久久久| 久久免费一区| 一区二区日韩| 欧美成人一区二区三区在线观看 | 日韩视频一区二区三区在线播放| 国产精品毛片在线看| 亚洲国产日韩一区二区| 国产精品欧美久久久久无广告| 亚洲激情午夜| 国产一区自拍视频| 亚洲欧美在线另类| 日韩视频免费看| 欧美大片一区二区三区| 久久国产精品99国产| 国产精品美女www爽爽爽|