USB的通訊協(xié)議(通俗易懂)
《USB的通訊協(xié)議(通俗易懂)》由會員分享,可在線閱讀,更多相關《USB的通訊協(xié)議(通俗易懂)(75頁珍藏版)》請在裝配圖網上搜索。
1、第16章 USB接口與編程實例,主要內容: USB概述 USB設備 USB物理特性 USB通信協(xié)議 JB8的USB模塊的編程方法,16.1 USB概述,USB協(xié)議有兩種:USB1.1和USB2.0。USB2.0和USB1.1完全兼容。USB1.1支持的數據傳輸率為12Mbps和1.5Mbps(用于慢速外設),USB2.0支持的數據傳速率可達480Mbps。在普通用戶看來,USB系統(tǒng)就是外設通過一根USB電纜和PC機連接起來。通常把外設稱為USB設備,把其所連接的PC機稱為USB主機。將指向USB主機的數據傳輸方向稱為上行通信,把指向USB設備的數據傳輸方向稱為下行通信。,,16.1 USB概述
2、,USB網絡采用階梯式星形拓撲結構,如圖16-1。一個USB網絡中只能有一個主機。主機內設置了一個根集線器,提供了主機上的初始附屬點。,圖16-1 USB主機和USB設備的連接,16.1 USB概述,主機定時對集線器的狀態(tài)進行查詢。當一個新設備接入集線器時,主機會檢測到集線器狀態(tài)改變,主機發(fā)出一個命令使該端口有效并對其進行設置。位于這個端口上的設備進行響應,主機收到關于設備的信息,主機的操作系統(tǒng)確定對這個設備使用那種驅動程序,接著設備被分配一個唯一標識的地址,范圍從0127,其中0為所有的設備在沒有分配惟一地址時使用的默認地址。主機向它發(fā)出內部設置請求。當一個設備從總線上移走時,主機就從其可用
3、資源列表中將這個設備刪除。,16.2 USB系統(tǒng)基本概念,16.2.1 USB主機 USB的所有數據通信(不論是上行通信還是下行通信)都由USB主機啟動,所以USB主機在整個數據傳輸過程中占據著主導地位。在USB系統(tǒng)中只允許有一個主機。從開發(fā)人員的角度看,USB主機可分為三個不同的功能模塊:客戶軟件、USB系統(tǒng)軟件和USB總線接口。 (1) 客戶軟件 (2) USB系統(tǒng)軟件 (3) USB總線接口,16.2 USB系統(tǒng)基本概念,16.2.1 USB主機 (1) 客戶軟件 客戶軟件負責和USB設備的功能單元進行通信,以實現(xiàn)其特定功能。一般由開發(fā)人員自行開發(fā)??蛻糗浖荒苤苯釉L問USB設備,其
4、與USB設備功能單元的通信必須經過USB系統(tǒng)軟件和USB總線接口模塊才能實現(xiàn)??蛻糗浖话惆║SB設備驅動程序和界面應用程序兩部分。 USB設備驅動程序負責和USB系統(tǒng)軟件進行通信。通常,它向USB總線驅動程序發(fā)出I/O請求包(IRP)以啟動一次USB數據傳輸。此外,根據數據傳輸的方向,它還應提供一個或空或滿的數據緩沖區(qū)以存儲這些數據。 界面應用程序負責和USB設備驅動程序進行通信,以控制USB設備。它是最上層的軟件,只能看到向USB設備發(fā)送的原始數據和從USB設備接收的最終數據。,16.2 USB系統(tǒng)基本概念,16.2.1 USB主機 (2) USB系統(tǒng)軟件 USB系統(tǒng)軟件負責
5、和USB邏輯設備進行配置通信,并管理客戶軟件啟動的數據傳輸。USB邏輯設備是程序員與USB設備打交道的部分。USB系統(tǒng)軟件一般包括USB總線驅動程序和USB主控制器驅動程序這兩部分。這些軟件通常由操作系統(tǒng)提供,開發(fā)人員不必掌握。,16.2 USB系統(tǒng)基本概念,16.2.1 USB主機 (3) USB總線接口 USB總線接口包括主控制器和根集線器兩部分。根集線器為USB系統(tǒng)提供連接起點,用于給USB系統(tǒng)提供一個或多個連接點(端口)。主控制器負責完成主機和USB設備之間數據的實際傳輸,包括對傳輸的數據進行串行編解碼、差錯控制等。該部分與USB系統(tǒng)軟件的接口依賴于主控制器的硬件實現(xiàn),開發(fā)人員不必
6、掌握。,16.2 USB系統(tǒng)基本概念,16.2.2 USB設備 一個USB設備由三個功能模塊組成:USB總線接口、USB邏輯設備和功能單元。這里的USB總線接口指的是USB設備中的串行接口引擎(SIE);USB邏輯設備被USB系統(tǒng)軟件看作是一個端點的集合;功能單元被客戶軟件看作是一個接口的集合。SIE、端點和接口都是USB設備的組成單元。為了更好地描述USB設備的特征,USB提出了設備架構的概念。從這個角度來看,可以認為USB設備是由一些配置、接口和端點組成的,即一個USB設備可以含有一個或多個配置,在每個配置中可含有一個或多個接口,在每個接口中可含有若干個端點。其中,配置和接口是對USB
7、設備功能的抽象,實際的數據傳輸由端點來完成。在使用USB設備前,必須指明其采用的配置和接口。這個步驟一般是在設備接入主機時設備進行自舉時完成的,我們在后面會進一步介紹。USB設備使用各種描述符來說明其設備架構,包括設備描述符、配置描述符、接口描述符、端點描述符以及字符串描述符,它們通常被保存在USB設備的固件程序中。,16.2 USB系統(tǒng)基本概念,16.2.2 USB設備 設備 設備代表一個USB設備,它由一個或多個配置組成。設備描述符用于說明設備的總體信息,并指明其所含的配置的個數。一個USB設備只能有一個設備描述符。 配置 一個USB設備可以包含一個或多個配置,如USB
8、設備的低功耗模式和高功耗模式可分別對應一個配置。在使用USB設備前,必須為其選擇一個合適的配置。配置描述符用于說明USB設備中各個配置的特性,如配置所含接口的個數等。USB設備的每一個配置都必須有一個配置描述符。 接口 一個配置可以包含一個或多個接口,如對一個光驅來說,當用于文件傳輸時使用其大容量存儲接口;而當用于播放CD時,使用其音頻接口。接口是端點的集合,可以包含一個或多個可替換設置,用戶能夠在USB處于配置狀態(tài)時,改變當前接口所含的個數和特性。接口描述符用于說明USB設備中各個接口的特性,如接口所屬的設備類及其子類等。USB設備的每個接口都必須有一個接口描述符。,16.2 USB
9、系統(tǒng)基本概念,16.2.2 USB設備 端點 端點是USB設備中的實際物理單元,USB數據傳輸就是在主機和USB設備各個端點之間進行的。端點一般由USB接口芯片提供,例如Freescale的MC68HC908JB8。USB設備中的每一個端點都有唯一的端點號,每個端點所支持的數據傳輸方向一般而言也是確定的:或是輸入(IN)或是輸出(OUT),也有些芯片提供的端點的數據方向是可以配置的,例如MC68HC908JB8包含有兩個用于數據收發(fā)的端點:端點1和端點2。其中端點1只能用于數據發(fā)送,即支持輸入(IN),端點2既能用于數據發(fā)送也可用于數據接收,即支持輸入(IN)和輸出(OUT)操作。需要注意
10、的是,在這里數據的傳輸方向是站在主機的立場上來看得。比如端點1只能發(fā)送數據,在主機看來是端點1向主機輸入數據,即IN操作;當端點2配置為接收數據時,主機向端點2輸出數據,即OUT操作。這一點是初學者比較容易產生混淆的地方。 利用設備地址、端點號和傳輸方向就可以指定一個端點,并和它進行通信。 0號端點比較特殊,它有數據輸入IN和數據輸出OUT兩個物理單元,且只能支持控制傳輸。,16.2 USB系統(tǒng)基本概念,16.2.2 USB設備 字符串 在USB設備中通常還含有字符串描述符,以說明一些專用信息,如制造商的名稱、設備的序列號等。它的內容以UNICODE的形式給出,且可以被客戶軟件
11、所讀取。對USB設備來說,字符串描述符是可選的。 管道 在USB系統(tǒng)結構中,可以認為數據傳輸是在主機軟件(USB系統(tǒng)軟件或客戶軟件)和USB設備的各個端點之間直接進行的,它們之間的連接稱為管道。管道是在USB設備的配置過程中建立的。管道是對主機和USB設備間通信流的抽象,它表示主機的數據緩沖區(qū)和USB設備的端點之間存在著邏輯數據傳輸,而實際的數據傳輸是由USB總線接口層來完成的。 管道和USB設備中的端點一一對應。一個USB設備含有多少個端點,其和主機進行通信時就可以使用多少條管道,且端點的類型決定了管道中數據的傳輸類型,如中斷端點對應中斷管道,且該管道只能進行中斷傳輸。傳輸類型在
12、后面會介紹。不論存在著多少條管道,在各個管道中進行的數據傳輸都是相互獨立的。,16.3 USB物理特性,16.3.1 USB接口 USB使用一根屏蔽的4線電纜與網絡上的設備進行互聯(lián)。數據傳輸通過一個差分雙絞線進行,這兩根線分別標為D+和D-,另外兩根線是Vcc和Ground,其中Vcc向USB設備供電。使用USB電源的設備稱為總線供電設備,而使用自己外部電源的設備叫做自供電設備。為了避免混淆,USB電纜中的線都用不同的顏色標記,如表16-1所示。,表16-1 USB纜線的信號與顏色,16.3 USB物理特性,16.3.1 USB接口 從一個設備連回到主機,稱為上行連接;從主機到設備
13、的連接,稱為下行連接。為了防止回環(huán)情況的發(fā)生,上行和下行端口使用不同的連接器所以USB在電纜和設備的連接中分別采用了兩種類型的連接頭,即圖16-2所示的A型連接頭和B型連接頭。每個連接頭內的電線號與圖16-2的引腳編號是一致的。A型連接頭,用于上行連接,即在主機或集線器上有一個A型插座,而在連接到主機或集線器的電纜的一端是A型插頭。在USB設備上有B型插座,而B型插頭在從主機或集線器接出的下行電纜的一端。采用這種連接方式,可以確保USB設備、主機/集線器和USB電纜始終以正確的方式連接,而不出現(xiàn)電纜接入方式出錯,或直接將兩個USB設備連接到一起的情況。,,16.3 USB物理特性,16.3.2
14、 USB信號 差分信號技術特點 傳統(tǒng)的傳輸方式大多使用“正信號”或者“負信號”二進制表達機制,這些信號利用單線傳輸。用不同的信號電平范圍來分別表示1和0,它們之間有一個臨界值,如果在數據傳輸過程中受到中低強度的干擾,高低電平不會突破臨界值,那么信號傳輸可以正常進行。但如果遇到強干擾,高低電平突破臨界值,由此造成數據傳輸出錯。差分信號技術最大的特點是:必須使用兩條線路才能表達一個比特位,用兩條線路傳輸信號的壓差作為判斷1還是0的依據。這種做法的優(yōu)點是具有極強的抗干擾性。倘若遭受外界強烈干擾,兩條線路對應的電平同樣會出現(xiàn)大幅度提升或降低的情況,但二者的電平改變方向和幅度幾乎相同,電壓差值就可
15、始終保持相對穩(wěn)定,因此數據的準確性并不會因干擾噪聲而有所降低。,(2)USB通信的格式,圖16-3 在USB電纜上使用雙向不歸零編碼和差動信號的傳輸,USB的數據包使用反向不歸零編碼(NRZI)。圖16-3描述了在USB電纜段上傳輸信息的步驟。反向不歸零編碼由傳送信息的USB代理程序完成;然后,被編碼的數據通過差分驅動器送到USB電纜上;接著,接收器將輸入的差分信號進行放大,將其送給解碼器。使用該編碼和差動信號傳輸方式可以更好地保證數據的完整性并減少噪聲干擾。,(2)USB通信的格式,圖16-4 反向不歸零編碼,使用反向不歸零編碼方式可以保證數據傳輸的完整性,而且不要求傳輸過程中有獨立的時鐘信
16、號。反向不歸零編碼不是一個新的編碼方式。它在許多方面都有應用。圖16-4給出了一個數據流和編碼之后的結果。在反向不歸零編碼時,遇到“0”轉換,遇到“1”保持。反向不歸零碼必須保持與輸入數據的同步性,以確保數據采樣正確。反向不歸零碼數據流必須在一個數據窗口被采樣,無論前一個位時間是否發(fā)生過轉換。解碼器在每個位時間采樣數據以檢查是否有轉換。,(2)USB通信的格式,,若重復相同的“1”信號一直進入時,就會造成數據長時間無法轉換,逐漸的積累,而導致接收器最終丟失同步信號的狀況,使得讀取的時序會發(fā)生嚴重的錯誤。因此,在NRZI編碼之間,還需執(zhí)行所謂的位填充的工作。位填充要求數據流中如果有連續(xù)的六個“1
17、”就要強行轉換。這樣接收器在反向不歸零碼數據流中最多每七個位就檢測到一次跳轉。這樣就保證了接收器與輸入數據流保持同步。反向不歸零碼的發(fā)送器要把“0”(填充位)插到數據流中。接收器必須被設計成能夠在連續(xù)的六個“1”之后識別一個自動跳轉,并且立即扔掉這六個“1”之后的“0”位。 圖16-5的第一行是送到接收器的原始數據。注意數據流包括連續(xù)的八個“1”。第二行表示對原始數據進行了位填充,在原始的第六個和第七個“1”之間填入了一個“0”。第七個“1”延時一個位時間讓填充位插入。接收器知道連續(xù)六個“1”之后將是一個填充位,所以該位就要被忽略。注意,如果原始數據的第七個位是“0”,填充位也同樣插入,在填
18、充過的數據流中就會有兩個連續(xù)的“0”。,16.3 USB物理特性16.3.3 檢測設備連接和速度,在USB設備連接時,USB系統(tǒng)能自動檢測到這個連接,并識別出其采用的數據傳輸速率。USB采用在D+或D-線上增加上拉電阻的方法來識別低速和全速設備。USB支持三種類型的傳輸速率:1.5Mb/s的低速傳輸、12Mb/s的全速傳輸和480Mb/s的高速傳輸。如圖16-6和圖16-7所示。當主控制器或集線器的下行端口上沒有USB設備連接時,其D+和D-線上的下拉電阻使得這兩條數據線的電壓都是近地的(0V);當全速/低速設備連接以后,電流流過由集線器的下拉電阻和設備在D+/D-的上拉電阻構成的分壓器。由于
19、下拉電阻的阻值是15K,上拉電阻的阻值是1.5K,所以在D+/D-線上會出現(xiàn)大小為(Vcc*15/(15+1.5))的直流高電平電壓。當USB主機探測到D+/D-線的電壓已經接近高電平,而其它的線保持接地時,它就知道全速/低速設備已經連接了。,,16.3 USB物理特性16.3.3 檢測設備連接和速度,低速USB設備電纜和電阻的連接,全速USB設備電纜和電阻的連接,,,16.4 USB的通訊協(xié)議,16.4.1 包 包(Packet)是USB系統(tǒng)中信息傳輸的基本單元,所有數據都是經過打包后在總線上傳輸的。USB包由五部分組成,即同步字段(SYNC)、包標識符字段(PID)、數據字段、循環(huán)冗余校
20、驗字段(CRC)和包結尾字段(EOP),包的基本格式如下圖:,1、SYNC字段:由8位組成,作為每個數據封包的前導,用來產生同步作用,使USB設備與總線的包傳輸率同步,它的數值固定為00000001。 2、PID字段:用來表示數據封包的類型。包標識符中的校驗字段是通過對類型字段的每個位求反碼產生的, PID字段如下圖所示:,,,,,,,表16-2中列出了信息包的類型,包括令牌、數據、握手或特殊四種信息包類型。,,,表16-2 各種信息包的類型與規(guī)范,3、數據字段:是用來攜帶主機與設備之間要傳遞的信息,其內容和長度根據包標識符、傳輸類型的不同而各不相同。在USB包中,數據字段可以包含設備地址、
21、端點號、幀序列號以及數據等內容。在總線傳輸中,總是首先傳輸字節(jié)的最低位,最后傳輸字節(jié)的最高位。 (1) 設備地址(ADDR)數據域 ADDR數據域由7位組成,可用來尋址多達127個外圍設備。 (2) 端點(ENDP)數據域 ENDP數據域由4位組成。通過這4個位最多可尋址出32個端點。這個ENDP數據域僅用在IN、OUT與SETUP令牌信息包中。對于慢速設備可支持端點0以及端點1作為中斷傳輸模式,而全速設備則可以擁有16個輸入端點(IN)與16個輸出端點(OUT)共32個端點。 (3) 幀序列號 當USB令牌包的PID為SOF時,其數據字段必須為11位的幀序列號。幀序列號由主機產生,且每個數據
22、幀自動加一,最大數值為0 x7FF。當幀序列號達到最大數時將自動從0開始循環(huán)。 (4) 數據 它僅存于DATA信息包內,根據不同的傳輸類型,擁有不同的字節(jié)大小,從0到1023字節(jié)(實時傳輸)。,,,4、循環(huán)冗余碼CRC字段由不同數目的位所組成。根據不同的信息包類型,CRC數據域由不同數目的位所組成。其中重要的數據信息包采用CRC16的數據域(16個位),而其余的信息包類型則采用CRC5的數據域(5個位)。其中的循環(huán)冗余碼校驗CRC,是一種錯誤檢測技術。由于數據在傳輸時,有時候會發(fā)生錯誤,因此CRC可根據數據算出一個校驗值,然后依此判斷數據的正確性 5、包結尾字段即發(fā)送方在包的結尾發(fā)出包結尾信號
23、。USB主機根據EOP判斷數據包的結束。,,,16.4.2信息包格式,1令牌(token)包 在USB系統(tǒng)中,只有主機才能發(fā)出令牌包。令牌包定義了數據傳輸的類型,它是事務處理的第一階段。令牌包中較為重要的是SETUP、IN和OUT這三個令牌包。它們用來在根集線器和設備端點之間建立數據傳輸。一個IN包用來建立一個從設備到根集線器的數據傳送,一個OUT包用來建立從根集線器到設備的數據傳輸。令牌包格式如下:,,,,,,2數據(data)包 數據封包含有4個域:SYNC、PID、DATA與CRC16。DATA數據域的位值是根據USB設備的傳輸速度及傳輸類型而定,且須以8字節(jié)為基本單位。也就是,若傳輸的
24、數據不足8字節(jié),或傳輸到最后所剩余的也不足8字節(jié),仍須傳輸8字節(jié)的數據域。格式如下:,,3. 握手(Handshake)包 握手信息包是最簡單的信息包類型。在這個握手信息包中僅包含一個PID數據域而已,它的格式如下所列:,,,在USB上數據信息的一次接收或發(fā)送的處理過程稱為事務處理(Transaction)。事務處理的類型包括輸入(IN)事務處理、輸出(OUT)事務處理、設置(SETUP)事務處理和幀開始、幀結尾等類型。在輸出(OUT)事務處理和設置(SETUP)事務處理中,緊接著SETUP和OUT包后的是DATA包,DATA0和DATA1包是交替地發(fā)送的,在DATA包后面,設備將回應一個握手
25、信號,如果設備可以接收數據,就回應ACK包,如果設備忙,就回應NAK包,如果設備出錯,則回應STALL包;在IN事務中,IN包后面是設備發(fā)來的DATA包或NAK包或STALL包,若設備忙或出錯,就發(fā)NAK包或STALL包給主機,若設備數據準備好發(fā)送,則發(fā)DATA包,DATA0和DATA1包也是交替地發(fā)送的,緊接著DATA包后面是主機發(fā)給設備的握手包,ACK表示主機可以接收數據,NAK包代表主機忙,STALL包代表主機出錯。,16.4.3事務,,,,,,,,1輸入(IN)事務處理 輸入事務處理表示USB主機從總線上的某個USB設備接收一個數據包的過程。 正常的輸入事務處理 設備忙時的輸入事務處理
26、 設備出錯時的輸入事務處理,16.4.3事務,,,,,,,,正常的輸出事務處理,2輸出(OUT)事務處理,,,,,,,設備忙時的輸出事務處理,設備出錯時的輸入事務處理,,,,正常的設置事務處理,3設置(SETUP)事務處理,,,,,,,設備忙時的設置事務處理,設備出錯時的設置事務處理,在USB的傳輸中,制定了4種傳輸類型:控制傳輸、中斷傳輸、批量傳輸以及等時傳輸??刂苽鬏旑愋头譃?3個階段:設置階段、數據階段(無數據控制沒有此階段)以及狀態(tài)階段。根據數據階段的數據傳輸的方向,控制傳輸又可分為3種類型:控制讀取(讀取USB描述符)、控制寫入(配置USB設備)以及無數據控制。 1控制傳輸 控制
27、傳輸是USB傳輸中最重要的傳輸。它包含3種類型:控制讀取、控制寫入以及無數據控制。這3種控制傳輸類型又分為23個階段:設置階段、數據階段(無數據控制沒有此階段)以及狀態(tài)階段。 階段一:設置階段 主機從USB設備獲取配置信息,并設置設備的配置值。 設置階段的數據交換包含了SETUP令牌封包、緊隨其后的DATA0數據封包以及ACK握手封包。它的作用是執(zhí)行一個設置(概念含糊)的數據交換,并定義此控制傳輸的內容。,16.4.4 USB傳輸類型,,,,,數據傳輸階段用來傳輸主機與設備之間的數據??刂谱x取是將數據從設備讀到主機上,讀取的數據USB設備描述符。該過程如圖16-8所示。對每一個數據信息包而言,
28、首先,主機會發(fā)送一個IN令牌信息包,表示要讀數據進來。然后,設備將數據通過DATA1數據信息包回傳給主機。最后,主機將以下列的方式加以響應:當數據已經正確接收時,主機送出ACK令牌信息包;當主機正在忙碌時,發(fā)出NAK握手信息包;當發(fā)生了錯誤時,主機發(fā)出STALL握手信息包。 控制寫入則是將數據從主機傳到設備上,所傳的數據即為對USB設備的配置信息,該過程如圖16-9所示。對每一個數據信息包而言,主機將會送出一個OUT令牌信息包,表示數據要送出去。緊接著,主機將數據通過DATA0數據信息包傳遞至設備。最后,設備將以下列方式加以響應:當數據已經正確接收時,設備送出ACK令牌信息包;當設備正在忙碌時
29、,設備發(fā)出NAK握手信息包;當發(fā)生了錯誤時,設備發(fā)出STALL握手信息包。,階段二:數據傳輸階段,,,,,狀態(tài)階段用來表示整個傳輸的過程已完全結束。 狀態(tài)階段傳輸的方向必須與數據階段的方向相反,即原來是IN令牌封包,這個階段應為OUT令牌封包;反之,原來是OUT令牌封包,這個階段應為IN令牌封包。對于控制讀取而言,主機會送出OUT令牌封包,其后再跟著0長度的DATA1封包。而此時,設備也會做出相對應的動作,送ACK握手封包、NAK握手封包或STALL握手封包。相對地對于控制寫入傳輸,主機會送出IN令牌封包,然后設備送出表示完成狀態(tài)階段的0長度的DATA1封包,主機再做出相對應的動作:送ACK握
30、手封包、NAK握手封包或STALL握手封包。,階段三:狀態(tài)階段,,,,,2實時傳輸 實時傳輸適用于必須以固定速率抵達或在指定時刻抵 達,可以容忍偶爾錯誤的數據上。實時傳輸一般用于麥 克風、喇叭等設備。 實時傳輸只需令牌與數據兩個信息包階段,沒有握手 包,故數據傳錯時不會重傳。 3批量傳輸 用于傳輸大量數據,要求傳輸不能出錯,但對時間沒有 要求,適用于打印機、存儲設備等。 4中斷傳輸 中斷傳輸方式總是用于對設備的查詢,以確定是否有數 據需要傳輸。因此中斷傳輸的方向總是從USB設備到主 機。,16.4.5設備列舉,1描述符 USB描述符就好像是USB外圍設備的“身份證”一樣,詳細地記錄著外圍設
31、備相關的一切信息。為了描述不同的數據,就需以不同類型的USB描述符來加以描述,它共有以下幾種類型:設備描述符、配置描述符、接口描述符和端點描述符,這幾個描述符是必須具有的,下面將結合實例詳細介紹;其他的描述符,例如,字符串描述符、數種不同的群組描述符以及報告描述符則可以根據不同的設備進行選擇。,16.4.5設備列舉,(1)設備描述符,16.4.5設備列舉,(1)設備描述符,16.4.5設備列舉,(2)配置描述符,16.4.5設備列舉,(3)接口描述符,16.4.5設備列舉,(4)端點描述符,16.4.5設備列舉,(4)端點描述符,2 USB設備請求,,,,,1.清除請求(Clear Featu
32、re) 2.獲得描述符(Get Descriptor) 3.設置地址(Set Address) 4.設置狀態(tài)(Set Configuration),幾個主要的設備請求,2 USB設備請求,,,,,下面結合實例分別介紹幾個主要的設備請求。(1) 清除特性(Clear Feature)該請求是用來取消一個特性,其格式如下:,,該請求中的wValue表示特性選擇器,它對應的值為:0端點,1設備。當某個特點不允許取消,或該特性根本不存在,或者是指向一個根本不存在的接口或端點時,該請求將會導致設備請求失敗。如果端點被固件設為停止狀態(tài),主機軟件(總線驅動程序)也可以發(fā)送一個值為0的CLEAR_F
33、EATURE命令清除該端點的停止狀態(tài),本實例中就是這樣使用該請求的。,2 USB設備請求,,,,,(2) 取得描述符(Get Descriptor)該請求可以取得USB設備中存在的特定的描述符,其格式如下:,,該請求中的wValue的高字節(jié)表示要取的描述符類型,低字節(jié)表示描述符的索引值,描述的類型有:1表示設備描述符,2表示配置描述符,3表示字符串描述符,4表示接口描述符,5表示端點描述符。wIndex的值為0或語言ID;當要取的描述符是字符串描述符時,該域的值為語言ID;當為其他的描述符時,該域為0。wLength表示要返回的數據長度,如果SETUP階段的地址使用的是預設地址0(ENDP字段
34、為0),這時的wLength值會大于實際的描述的值。這是為什么呢?原因是用戶以預設的地址0來取得設備描述符時,不管設多少字節(jié),用戶最多只取其前8字節(jié),即在控制傳輸過程只有一次數據階段。但是,如果用戶以新的地址(ENDP字段不為0)來取得設備描述符時,這時wLength的值就要注意了。,,2 USB設備請求,,,,,(3) 設置地址(Set Address)該請求給USB設備設置地址,從而可以對該USB設備進行進一步的訪問。其格式如下:,,該請求與其他的請求有一個重要的不同點,該請求下,USB設備一直不改變它的地址,直到該請求的狀態(tài)階段被成功地完成,而其他請求的操作都是在狀態(tài)階段之前完成,可以閱
35、讀本實例加深對該點的理解。若特定的設備地址大于127,或者wIndex 或wLength為非0值,那么該請求不執(zhí)行。,,2 USB設備請求,,,,,(4) 設置配置(Set Configuration)該請求對設備進行設置。其格式如下:,,該請求中的wValue域的低字節(jié)表示設置的值,該值必須為0或者與配置描述符中的配置值相匹配。如果設置值等于0,表示設備在地址狀態(tài)。如果wIndex 或 wLength為非0值,那么該請求不執(zhí)行。,3 設備列舉 設備列舉可以簡單地概括為這樣的一個過程:主機通過USB設備請求來取得設備描述符并對該設備進行配置。該過程可以簡化為如下5個步驟: 第一步,使用預設的地
36、址0取得設備描述符。 第二步,設置設備的新地址。 第三步,使用新地址取得設備描述符。 第四步,取得配置描述符。 第五步,設置配置描述符。 設備列舉使用的是控制傳輸。上述的5個步驟必須符合控制傳輸的基本架構,第一步、第三步和第四步使用的是控制讀取,第二步和第五步使用的是無數據控制。,,,,,,16.5 JB8 USB模塊的編程方法,16.5.1 MC68HC908JB8簡介 1MC68HC908JB8 單片機的性能概述 3MHz內部總線頻率。 64字節(jié)I/O寄存器區(qū)。 256字節(jié)的片內RAM。 8192字節(jié)的片內Flash存儲器,具有在線編程能力和保密功能。 976字節(jié)監(jiān)控ROM。 16字節(jié)用戶
37、定義矢量區(qū)。 2個16位雙通道定時器接口模塊,每個通道可選擇為輸入捕捉、輸出比較和脈寬調制輸出。 內置USB模塊,遵循USB1.1協(xié)議。,16.5 JB8 USB模塊的編程方法,16.5.1 MC68HC908JB8簡介 2引腳功能 JB8具有20、28、44三種封裝形式,下面以44引腳封裝的JB8為例,介紹其引腳功能。 電源類引腳 VDD、VSS(2腳、42腳):電源供給端; VREG(1腳):為3.3V輸出,其主要用于USB數據驅動的電壓調制; 控制類引腳 (36腳):外部低有效復位輸入或輸出腳,有內部上拉電阻; (18腳):外部中斷輸入腳,有內部上拉電阻; I/O類引腳 PTA7/KBA
38、7PTA0/KBA0 (2225、3235腳):8位通用雙向I/O口; PTB7PTB0 (3741、35腳):8位通用雙向I/O口; PTC7PTC0 (3128、1714腳):8位通用雙向I/O口; PTD7PTD0 (1921、106腳):8位通用雙向I/O口; PTE4/D-、PTE3/D+ (13、12腳):2位通用雙向I/O口;D-、D+用于USB模塊;PTE4/D-還可編程對IRQ中斷進行觸發(fā); PTE2/TCH1 、PTE1/TCH0 、PTE0/TCLK (26、11、27腳):3位通用雙向I/O口;TCH1、TCH0、TCLK用于定時器模塊TIM; 其它 OSC1、OSC
39、2 (43、44腳):片內振蕩器引腳。,JB8具有20、28、44三種封裝形式,不同封裝只是引腳數量和形式有所區(qū)別,其它方面是一致的,JB8單片機的封裝見圖16-10所示,其中a,b,c分別給出了28,20,44三種封裝形式的管腳圖。,3JB8存儲器組織 CPU08可尋址64K地址空間,所以它的地址范圍是$0000$FFFF,在這$0000$FFFF的尋址范圍內,分成多個不同區(qū)段,每個區(qū)段的作用不同。MC68HC908JB8單片機的存儲器組織及地址分配見圖16-11。,圖16-11 JB8存儲映像圖,16.5.1 MC68HC908JB8簡介,16.5.2 USB功能模塊 USB功能模塊可以
40、內嵌在芯片中,也可以外擴。MC68HC908JB8使用了內嵌的USB功能模塊,如右圖所示。,(1) USB收發(fā)器:USB的D+和D-數據提供了接口。 (2)USB控制邏輯 :處理CPU和收發(fā)器之間的數據移動。 (3)USB寄存器:USB寄存器是用來控制和監(jiān)控USB操作。 (4)USB復位信號:(5)USB懸掛 (6)USB低速設備,,,16. 5. 3 USB寄存器,USB寄存器是用來控制和監(jiān)視USB操作的,MC68HC908JB8中USB寄存器有如下幾種:地址寄存器(ADDR)、控制寄存器0-4(UCR0-UCR4)、狀態(tài)寄存器0-1(USR0-USR1)、中斷寄存器0-2(UIR0-UIR
41、2)、端點0數據寄存器0-7(UE0D0-UE0D7)、端點1數據寄存器0-7(UE1D0-UE1D7)和端點2數據寄存器0-7(UE2D0-UE2D7)。下面分別介紹這些寄存器。,,,16. 5. 3 USB寄存器,1)USB地址寄存器(UADDR) UADDR的地址:$0038,定義如下: D7 USBEN位:USB模塊允許位。USBEN=1,允許USB模塊,并且PTE4中斷不允許;USBEN=0,不允許USB模塊,包括USB中斷、復位以及復位中斷都不允許,并且PTE4/D-和PTE3/D+用作高電流開漏輸入輸出口PTE4和PTE3。可讀寫位。 D6D0 UADD6UADD0:USB模塊的
42、地址。都是可讀寫位。,,,,16. 5. 3 USB寄存器,2)USB中斷寄存器0(UIR0) UIR0的地址:$0039,定義如下: D7 EOPIE位:EOP檢測中斷允許位??勺x寫位,EOPIE=1,如果EOP被檢測到,能產生一個CPU中斷請求;EOPIE=0,如果EOP被檢測到,不能產生一個CPU中斷請求。 D6 SUSPND位:USB掛起位??勺x寫位,如果USB總線上連續(xù)3ms處于閑置狀態(tài),則該位將會被軟件置位。置該位可以將收發(fā)器處于節(jié)能模式。在置該位之前,RESUMF標志位必須清零;在RESUMF置位后,軟件必須清掉該位。 D5 TXD2IE位:端點2輸出中斷允許位??勺x寫位,TXD
43、2IE=1,輸出端點2能產生一個CPU中斷請求;TXD2IE=0,輸出端點2不能產生一個CPU中斷請求。 D4 RXD2IE位:端點2接收中斷允許位。可讀寫位,RXD2IE=1,輸入端點2能產生一個CPU中斷請求;RXD2IE =0,接收端點2不能產生一個CPU中斷請求。 D3 TXD1IE位:端點1輸出中斷允許位。可讀寫位,TXD1IE=1,輸出端點1能產生一個CPU中斷請求;TXD1IE=0,輸出端點1不能產生一個CPU中斷請求。 D1 TXD0IE位:端點0輸出中斷允許位??勺x寫位,TXD0IE=1,輸出端點0能產生一個CPU中斷請求;TXD0IE=0,輸出端點0不能產生一個CPU中斷請
44、求。 D0 RXD0IE位:端點0接收中斷允許位??勺x寫位,RXD0IE=1,輸入端點0能產生一個CPU中斷請求;RXD0IE =0,接收端點0不能產生一個CPU中斷請求。,,,,16. 5. 3 USB寄存器,3)USB中斷寄存器1(UIR1) UIR1的地址:$003A,定義如下: 該寄存器所有的位均為只讀位。 D7 EOPF位:EOP檢測標志位。EOPF=1,EOP被檢測到;EOPF=0,EOP沒有被檢測到。 D6 RSTF位:USB復位標志位。在D+和D-上,當一個合法的復位信號狀態(tài)被檢測到,該位被置1。 D5 TXD2F位:端點2輸出標志位。當存放在端點2輸出緩沖區(qū)中的數據被送出,并
45、且接收到一個從主機發(fā)送的ACK握手包,該位被置1。 D4 RXD2F位:端點2數據接收標志位。當USB模塊接收到了一個數據包,并返回一個ACK握手包后,該位被置1。 D3 TXD1F位:端點1輸出標志位。當存放在端點1輸出緩沖區(qū)中的數據被送出,并且一個從主機發(fā)送的ACK握手包被接收到,該位被置1。 D2 RESUMF位:喚醒標志位。當SUSPND位置1,并且USB總線被激活,該位被置1。 D1 TXD0F位:端點0輸出標志位。當存放在端點0輸出緩沖區(qū)中的數據被送出,并且一個從主機發(fā)送的ACK握手包被接收到,該位被置1。 D0 RXD0F位:端點0數據接收標志位。當USB模塊接收到了一個數據包,
46、并返回一個ACK握手包后,該位被置1。,,,,16. 5. 3 USB寄存器,4)USB中斷寄存器2(UIR2) UIR2的地址:$001B,定義如下: 該寄存器所有的位均為只寫位。 D7 EOPFR位:EOP標志位復位。寫“1”到該位將清EOPF位,寫“0”到該位不產生任何影響。復位將清該位。 D6 RSTFR位:清復位指示器位。寫“1”到該位將清RSTF位,寫“0”到該位不產生任何影響。復位將清該位。 D5 TXD2FR位:端點2輸出標志位復位。寫“1”到該位將清TXD2F位,寫“0”到該位不產生任何影響。復位將清該位。 D4 RXD2FR位:端點2數據接收標志位復位。寫“1”到該位將清R
47、XD2F位,寫“0”到該位不產生任何影響。復位將清該位。 D3 TXD1FR位:端點1輸出標志位復位。寫“1”到該位將清TXD1F位,寫“0”到該位不產生任何影響。復位將清該位。 D2 RESUMFR位:喚醒標志位復位。寫“1”到該位將清RESUMF位,寫“0”到該位不產生任何影響。復位將清該位。 D1 TXD0FR位:端點0輸出標志位復位。寫“1”到該位將清TXD0F位,寫“0”到該位不產生任何影響。復位將清該位。 D0 RXD0FR位:端點0數據接收標志位復位。寫“1”到該位將清RXD0F位,寫“0”到該位不產生任何影響。復位將清該位。,,,,16. 5. 3 USB寄存器,5)USB控制
48、寄存器0(UCR0) UCR0的地址:$003B,定義如下: D7 T0SEQ位:端點0輸出序列位。該位為可讀可寫位,它決定端點0的下一個IN事務發(fā)何種類型的數據包(DATA0或者DATA1)。TOSEQ1,表示端點0下一個發(fā)送的是DATA1包,TOSEQ=0,表示端點0下一個發(fā)送的是DATA0包。復位將清除該位。 D5 TX0E位:端點0輸出允許位。該位為可讀可寫位,當USB主控制器向端點0發(fā)送一個IN事務時,該位可以允許發(fā)送。當數據準備好發(fā)送后,軟件應該將該位置“1”,當端點0沒有數據被發(fā)送時,該位必須被清“0”。如果該位是“0”,或者TXD0F位為“1”,USB設備將對端點0的任何一個I
49、N事務返回一個NAK握手包。復位將清除該位。TX0E=1,表示數據準備好,可以發(fā)送,TX0E0,表示數據沒準備好,以NAK包作為回應。 D4 RX0E位:端點0接收允許位。該位為可讀可寫位,當USB主控制器向端點0發(fā)送一個OUT事務時,該位可以允許接收。當準備好接收數據后,軟件應該將該位置“1”,當沒有數據被接收時,該位必須被清“0”。如果該位是“0”,或者RXD0F位為“1”,USB設備將對端點0的任何一個OUT事務返回一個NAK握手包,但是對SETUP事務將不作反應。復位將清除該位。RX0E=1,表示可以接收數據, RX0E0,表示不可以接收數據,以NAK包作為回應。 D3D0 TP0SI
50、Z3TP0SIZ0位:端點0輸出數據包大小。這些位為可讀可寫位,這幾位存儲的是端點0下一個IN事務發(fā)送數據的個數。復位將清除這幾位。,,,,16. 5. 3 USB寄存器,6)USB控制寄存器1(UCR1) UCR1的地址:$003C,定義如下: D7 T1SEQ位:端點1輸出序列位。該位為可讀可寫位,它決定端點1的下一個IN事務發(fā)何種類型的數據包(DATA0或者DATA1)。T1SEQ1,表示端點1下一個發(fā)送的是DATA1包,T1SEQ=0,表示端點1下一個發(fā)送的是DATA0包。復位將清除該位。 D6 STALL1位:端點1強制發(fā)STALL位。該位為可讀可寫位,當USB主控制器發(fā)送一個IN事
51、務或OUT事務時,該位將使端點1發(fā)送一個STALL握手包。復位將清除該位。STALL11,表示發(fā)送STALL握手包。STALL=0,默認狀態(tài)。 D5 TX1E位:端點1輸出允許位。該位為可讀可寫位,如果UCR3寄存器中的ENABLE1位(端點1使能位)被置1,當USB主控制器向端點1發(fā)送一個IN事務時,該位可以允許發(fā)送。當數據準備好發(fā)送后,軟件應該將該位置“1”,當端點1沒有數據被發(fā)送時,該位必須被清“0”。如果該位是“0”,或者TXD1F位為“1”,USB設備將對端點1的任何一個IN事務返回一個NAK握手包。復位將清除該位。TX1E=1,表示數據準備好,可以發(fā)送,TX1E0,表示數據沒準備好
52、,以NAK包作為回應。 D4 FRESUM位:強制喚醒位。 D3D0 TP1SIZ3TP1SIZ0位:端點1輸出數據包大小。這些位為可讀可寫位,這幾位存儲的是端點1下一個IN事務發(fā)送數據的個數。復位將清除這幾位。,,,,16. 5. 3 USB寄存器,7)USB控制寄存器2(UCR2) UCR2的地址:$0019,定義如下: D7 T2SEQ位:端點2輸出序列位。該位為可讀可寫位,它決定端點2的下一個IN事務發(fā)何種類型的數據包(DATA0或者DATA1)。T2SEQ1,表示端點2下一個發(fā)送的是DATA1包,T2SEQ=0,表示端點2下一個發(fā)送的是DATA0包。復位將清除該位。 D6 STALL
53、2位:端點2強制發(fā)STALL位。該位為可讀可寫位,當USB主控制器發(fā)送一個IN事務或OUT事務時,該位將使端點2發(fā)送一個STALL握手包。復位將清除該位。STALL11,表示發(fā)送STALL握手包。STALL=0,默認狀態(tài)。 D5 TX2E位:端點2輸出允許位。該位為可讀可寫位,如果UCR3寄存器中的ENABLE2位(端點2使能位)被置位,當USB主控制器向端點2發(fā)送一個IN事務時,該位可以允許發(fā)送。當數據準備好發(fā)送后,軟件應該將該位置“1”,當端點2沒有數據被發(fā)送時,該位必須被清“0”。如果該位是“0”,或者TXD2F位為“1”,USB設備將對端點2的任何一個IN事務返回一個NAK握手包。復位
54、將清除該位。TX2E=1,表示數據準備好,可以發(fā)送,TX2E0,表示數據沒準備好,以NAK包作為回應。 D4 RX2E位:端點2接收允許位。端點2接收允許位。該位為可讀可寫位,當USB主控制器向端點2發(fā)送一個OUT事務時,該位可以允許接收。當準備好接收數據后,軟件應該將該位置“1”,當沒有數據被接收時,該位必須被清“0”。如果該位是“0”,或者RXD2F位為“1”,USB設備將對端點2的任何一個OUT事務返回一個NAK握手包。復位將清除該位。RX2E=1,表示可以接收數據, RX2E0,表示不接收數據,以NAK包作為回應。 D3:0 TP2SIZ3:0位:端點2輸出數據包大小。這些位為可讀可寫
55、位,這幾位存儲的是端點2下一個IN事務發(fā)送數據的個數。復位將清除這幾位。,,,,16. 5. 3 USB寄存器,8)USB控制寄存器3(UCR3) UCR3的地址:$001A,定義如下: D7 TX1ST位:端點0傳輸起始標志。該位為1,表示IN傳輸包發(fā)生在SETUP/OUT包之前;為0,表示IN傳輸包發(fā)生在SETUP/OUT包之后。 該位為只讀位。 D6 TX1STR位:寫1到該位將清除TX1ST位,寫0不產生影響。 D5 OSTALL0位:端點0的OUT包STALL位。該位為1,表示發(fā)送STALL握手信號,0為默認值。 D4 ISTALL0位:端點0的IN包STALL位。該位為1,表示發(fā)送
56、STALL握手信號,0為默認值。 D2 PULLEN位:上拉允許位。該位為1,表示D-腳有內部上拉,0表示D-腳沒接內部上拉。 D1 ENABLE2位:端點2允許位。1為允許,0為不允許。 D0 ENABLE1位:端點1允許位。1為允許,0為不允許。,,,,16. 5. 3 USB寄存器,9)USB控制寄存器4(UCR4) UCR4的地址:$001B,定義如下: D2 FUSBO位:該位若為1,表示使能USB輸出緩沖;該位若為0,表示USB模塊處于默認操作狀態(tài)。 D1 FDP位:該位若為1,表示D+處于輸出高電平狀態(tài);該位若為0,表示D+處于輸出低電平狀態(tài)。 D0 FDM位:該位若為1,表示D
57、-處于輸出高電平狀態(tài);該位若為0,表示D-處于輸出低電平狀態(tài)。,,,,16. 5. 3 USB寄存器,10)USB狀態(tài)寄存器0(USR0) USR0的地址:$003E,定義如下: D7 R0SEQ位:端點0接收序列位。為1,表示上一次端點2接收的是DATA1;為0,表示上一次端點2接收的是DATA0。 D6 SETUP位:SETUP包檢測位。為1,表示上一次端點0接收的是一個SETUP包;為0,表示上一次端點0接收的不是SETUP包。 D3D0 RP0SIZ3RP0SIZ 0位:端點0接收數據包大小。,,,,16. 5. 3 USB寄存器,11)USB狀態(tài)寄存器1(USR1) USR1的地址:
58、$003E,定義如下: D7 R2SEQ位:端點2接收序列位。為1,表示上一次端點2接收的是DATA1;為0,表示上一次端點2接收的是DATA0。 D6 TXACK位:ACK包傳輸位。為1,表示上一次端點0發(fā)送的是一個ACK包;為0,表示上一次端點0發(fā)送的不是ACK包。 D5 TXANK位:NAK包傳輸位。為1,表示上一次端點0發(fā)送的是一個NAK包;為0,表示上一次端點0發(fā)送的不是NAK包。 D4 TXSTL位:STALL包傳輸位。為1,表示上一次端點0發(fā)送的是一個STALL包;為0,表示上一次端點0發(fā)送的不是STALL包。 D3D0 RP2SIZ3RP2SIZ 0位:端點2接收數據包大小。,
59、,,,16. 5. 3 USB寄存器 12) USB端點0數據寄存器(UE0D0-UE0D7) UE1D0-UE1D7的地址是從$0020-$0027。可讀可寫。 13) USB端點1數據寄存器(UE1D0-UE1D7) UE1D0-UE1D7的地址是從$0028-$002F。只寫。 14) USB端點2數據寄存器(UE2D0-UE2D7) UE1D0-UE1D7的地址是從$0030-$0037??勺x可寫。,,,16.5.4 USB中斷,USB模塊中斷有三種類型: 當接收或發(fā)送事務完成時,產生事務結束中斷; 當USB總線懸掛后被激活時,產生喚醒中斷; 當檢測到一個低速的包結束信號時,產生
60、結束中斷。 所有的中斷共享同一個中斷向量,由中斷程序區(qū)分產生的是什么中斷。,16.5.5 JB8 USB1.1通信編程,USB中斷處理流程圖,USB中斷服務程序,端點1和端點2利用查詢方式發(fā)送和接收數據的編程方法,包括:USB初始化、發(fā)送字節(jié)和接收字節(jié)。 (1)USB初始化 (2)發(fā)送數據子程序 (3)接收數據子程序,端點1發(fā)送、接受數據的流程圖,USB中斷服務程序,(1)USB初始化,USB中斷服務程序,(2)發(fā)送數據子程序,USB中斷服務程序,(2)發(fā)送數據子程序,USB中斷服務程序,(3)接收數據子程序,16.6 PC機方USB1.1編程實例,16.6.1 PC機方USB1.1編程步驟,1選擇并安裝合適的USB1.1驅動程序 2選擇一種高級語言,參照驅動程序的相關文檔進行編程 (1) 為新建的工程添加USBIOCOM 1.0 Type Library (2) 編寫響應USB設備的程序 (3) 取得描述符,初始化USB設備并建立連接 (4) 進行USB收發(fā)通信,16.6 PC機方USB1.1編程實例,16.6.2 PC機方USB1.1 VB編程實例,,USB測試程序PC機方VB程序流程圖,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。