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