USB的通訊協(xié)議(通俗易懂).ppt
《USB的通訊協(xié)議(通俗易懂).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《USB的通訊協(xié)議(通俗易懂).ppt(75頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第16章USB接口與編程實(shí)例 主要內(nèi)容 USB概述USB設(shè)備USB物理特性USB通信協(xié)議JB8的USB模塊的編程方法 16 1USB概述 USB協(xié)議有兩種 USB1 1和USB2 0 USB2 0和USB1 1完全兼容 USB1 1支持的數(shù)據(jù)傳輸率為12Mbps和1 5Mbps 用于慢速外設(shè) USB2 0支持的數(shù)據(jù)傳速率可達(dá)480Mbps 在普通用戶看來(lái) USB系統(tǒng)就是外設(shè)通過(guò)一根USB電纜和PC機(jī)連接起來(lái) 通常把外設(shè)稱為USB設(shè)備 把其所連接的PC機(jī)稱為USB主機(jī) 將指向USB主機(jī)的數(shù)據(jù)傳輸方向稱為上行通信 把指向USB設(shè)備的數(shù)據(jù)傳輸方向稱為下行通信 16 1USB概述 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 1USB主機(jī)和USB設(shè)備的連接 16 1USB概述 主機(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í)的地址 范圍從0 127 其中0為所有的設(shè)備在沒(méi)有分配惟一地址時(shí)使用的默認(rèn)地址 主機(jī)向它發(fā)出內(nèi)部設(shè)置請(qǐng)求 當(dāng)一個(gè)設(shè)備從總線上移走時(shí) 主機(jī)就從其可用資源列表中將這個(gè)設(shè)備刪除 16 2USB系統(tǒng)基本概念 16 2 1USB主機(jī)USB的所有數(shù)據(jù)通信 不論是上行通信還是下行通信 都由USB主機(jī)啟動(dòng) 所以USB主機(jī)在整個(gè)數(shù)據(jù)傳輸過(guò)程中占據(jù)著主導(dǎo)地位 在USB系統(tǒng)中只允許有一個(gè)主機(jī) 從開(kāi)發(fā)人員的角度看 USB主機(jī)可分為三個(gè)不同的功能模塊 客戶軟件 USB系統(tǒng)軟件和USB總線接口 1 客戶軟件 2 USB系統(tǒng)軟件 3 USB總線接口 16 2USB系統(tǒng)基本概念 16 2 1USB主機(jī) 1 客戶軟件客戶軟件負(fù)責(zé)和USB設(shè)備的功能單元進(jìn)行通信 以實(shí)現(xiàn)其特定功能 一般由開(kāi)發(fā)人員自行開(kāi)發(fā) 客戶軟件不能直接訪問(wèn)USB設(shè)備 其與USB設(shè)備功能單元的通信必須經(jīng)過(guò)USB系統(tǒng)軟件和USB總線接口模塊才能實(shí)現(xiàn) 客戶軟件一般包括USB設(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 2USB系統(tǒng)基本概念 16 2 1USB主機(jī) 2 USB系統(tǒng)軟件USB系統(tǒng)軟件負(fù)責(zé)和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)提供 開(kāi)發(fā)人員不必掌握 16 2USB系統(tǒng)基本概念 16 2 1USB主機(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) 開(kāi)發(fā)人員不必掌握 16 2USB系統(tǒng)基本概念 16 2 2USB設(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è)角度來(lái)看 可以認(rèn)為USB設(shè)備是由一些配置 接口和端點(diǎn)組成的 即一個(gè)USB設(shè)備可以含有一個(gè)或多個(gè)配置 在每個(gè)配置中可含有一個(gè)或多個(gè)接口 在每個(gè)接口中可含有若干個(gè)端點(diǎn) 其中 配置和接口是對(duì)USB設(shè)備功能的抽象 實(shí)際的數(shù)據(jù)傳輸由端點(diǎn)來(lái)完成 在使用USB設(shè)備前 必須指明其采用的配置和接口 這個(gè)步驟一般是在設(shè)備接入主機(jī)時(shí)設(shè)備進(jìn)行自舉時(shí)完成的 我們?cè)诤竺鏁?huì)進(jìn)一步介紹 USB設(shè)備使用各種描述符來(lái)說(shuō)明其設(shè)備架構(gòu) 包括設(shè)備描述符 配置描述符 接口描述符 端點(diǎn)描述符以及字符串描述符 它們通常被保存在USB設(shè)備的固件程序中 16 2USB系統(tǒng)基本概念 16 2 2USB設(shè)備 設(shè)備設(shè)備代表一個(gè)USB設(shè)備 它由一個(gè)或多個(gè)配置組成 設(shè)備描述符用于說(shuō)明設(shè)備的總體信息 并指明其所含的配置的個(gè)數(shù) 一個(gè)USB設(shè)備只能有一個(gè)設(shè)備描述符 配置一個(gè)USB設(shè)備可以包含一個(gè)或多個(gè)配置 如USB設(shè)備的低功耗模式和高功耗模式可分別對(duì)應(yīng)一個(gè)配置 在使用USB設(shè)備前 必須為其選擇一個(gè)合適的配置 配置描述符用于說(shuō)明USB設(shè)備中各個(gè)配置的特性 如配置所含接口的個(gè)數(shù)等 USB設(shè)備的每一個(gè)配置都必須有一個(gè)配置描述符 接口一個(gè)配置可以包含一個(gè)或多個(gè)接口 如對(duì)一個(gè)光驅(qū)來(lái)說(shuō) 當(dāng)用于文件傳輸時(shí)使用其大容量存儲(chǔ)接口 而當(dāng)用于播放CD時(shí) 使用其音頻接口 接口是端點(diǎn)的集合 可以包含一個(gè)或多個(gè)可替換設(shè)置 用戶能夠在USB處于配置狀態(tài)時(shí) 改變當(dāng)前接口所含的個(gè)數(shù)和特性 接口描述符用于說(shuō)明USB設(shè)備中各個(gè)接口的特性 如接口所屬的設(shè)備類及其子類等 USB設(shè)備的每個(gè)接口都必須有一個(gè)接口描述符 16 2USB系統(tǒng)基本概念 16 2 2USB設(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 操作 需要注意的是 在這里數(shù)據(jù)的傳輸方向是站在主機(jī)的立場(chǎng)上來(lái)看得 比如端點(diǎn)1只能發(fā)送數(shù)據(jù) 在主機(jī)看來(lái)是端點(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 2USB系統(tǒng)基本概念 16 2 2USB設(shè)備 字符串在USB設(shè)備中通常還含有字符串描述符 以說(shuō)明一些專用信息 如制造商的名稱 設(shè)備的序列號(hào)等 它的內(nèi)容以UNICODE的形式給出 且可以被客戶軟件所讀取 對(duì)USB設(shè)備來(lái)說(shuō) 字符串描述符是可選的 管道在USB系統(tǒng)結(jié)構(gòu)中 可以認(rèn)為數(shù)據(jù)傳輸是在主機(jī)軟件 USB系統(tǒng)軟件或客戶軟件 和USB設(shè)備的各個(gè)端點(diǎn)之間直接進(jìn)行的 它們之間的連接稱為管道 管道是在USB設(shè)備的配置過(guò)程中建立的 管道是對(duì)主機(jī)和USB設(shè)備間通信流的抽象 它表示主機(jī)的數(shù)據(jù)緩沖區(qū)和USB設(shè)備的端點(diǎn)之間存在著邏輯數(shù)據(jù)傳輸 而實(shí)際的數(shù)據(jù)傳輸是由USB總線接口層來(lái)完成的 管道和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)行中斷傳輸 傳輸類型在后面會(huì)介紹 不論存在著多少條管道 在各個(gè)管道中進(jìn)行的數(shù)據(jù)傳輸都是相互獨(dú)立的 16 3USB物理特性 16 3 1USB接口USB使用一根屏蔽的4線電纜與網(wǎng)絡(luò)上的設(shè)備進(jìn)行互聯(lián) 數(shù)據(jù)傳輸通過(guò)一個(gè)差分雙絞線進(jìn)行 這兩根線分別標(biāo)為D 和D 另外兩根線是Vcc和Ground 其中Vcc向USB設(shè)備供電 使用USB電源的設(shè)備稱為總線供電設(shè)備 而使用自己外部電源的設(shè)備叫做自供電設(shè)備 為了避免混淆 USB電纜中的線都用不同的顏色標(biāo)記 如表16 1所示 表16 1USB纜線的信號(hào)與顏色 16 3USB物理特性 16 3 1USB接口從一個(gè)設(shè)備連回到主機(jī) 稱為上行連接 從主機(jī)到設(shè)備的連接 稱為下行連接 為了防止回環(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(niǎo)型插頭在從主機(jī)或集線器接出的下行電纜的一端 采用這種連接方式 可以確保USB設(shè)備 主機(jī) 集線器和USB電纜始終以正確的方式連接 而不出現(xiàn)電纜接入方式出錯(cuò) 或直接將兩個(gè)USB設(shè)備連接到一起的情況 16 3USB物理特性 16 3 2USB信號(hào)差分信號(hào)技術(shù)特點(diǎn)傳統(tǒng)的傳輸方式大多使用 正信號(hào) 或者 負(fù)信號(hào) 二進(jìn)制表達(dá)機(jī)制 這些信號(hào)利用單線傳輸 用不同的信號(hào)電平范圍來(lái)分別表示1和0 它們之間有一個(gè)臨界值 如果在數(shù)據(jù)傳輸過(guò)程中受到中低強(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)大幅度提升或降低的情況 但二者的電平改變方向和幅度幾乎相同 電壓差值就可始終保持相對(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ù)通過(guò)差分驅(qū)動(dòng)器送到USB電纜上 接著 接收器將輸入的差分信號(hào)進(jìn)行放大 將其送給解碼器 使用該編碼和差動(dòng)信號(hào)傳輸方式可以更好地保證數(shù)據(jù)的完整性并減少噪聲干擾 2 USB通信的格式 圖16 4反向不歸零編碼 使用反向不歸零編碼方式可以保證數(shù)據(jù)傳輸?shù)耐暾?而且不要求傳輸過(guò)程中有獨(dú)立的時(shí)鐘信號(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ù)窗口被采樣 無(wú)論前一個(gè)位時(shí)間是否發(fā)生過(guò)轉(zhuǎn)換 解碼器在每個(gè)位時(shí)間采樣數(shù)據(jù)以檢查是否有轉(zhuǎn)換 2 USB通信的格式 若重復(fù)相同的 1 信號(hào)一直進(jìn)入時(shí) 就會(huì)造成數(shù)據(jù)長(zhǎng)時(shí)間無(wú)法轉(zhuǎn)換 逐漸的積累 而導(dǎo)致接收器最終丟失同步信號(hào)的狀況 使得讀取的時(shí)序會(huì)發(fā)生嚴(yán)重的錯(cuò)誤 因此 在NRZI編碼之間 還需執(zhí)行所謂的位填充的工作 位填充要求數(shù)據(jù)流中如果有連續(xù)的六個(gè) 1 就要強(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 填充位也同樣插入 在填充過(guò)的數(shù)據(jù)流中就會(huì)有兩個(gè)連續(xù)的 0 16 3USB物理特性16 3 3檢測(cè)設(shè)備連接和速度 在USB設(shè)備連接時(shí) USB系統(tǒng)能自動(dòng)檢測(cè)到這個(gè)連接 并識(shí)別出其采用的數(shù)據(jù)傳輸速率 USB采用在D 或D 線上增加上拉電阻的方法來(lái)識(shí)別低速和全速設(shè)備 USB支持三種類型的傳輸速率 1 5Mb s的低速傳輸 12Mb s的全速傳輸和480Mb s的高速傳輸 如圖16 6和圖16 7所示 當(dāng)主控制器或集線器的下行端口上沒(méi)有USB設(shè)備連接時(shí) 其D 和D 線上的下拉電阻使得這兩條數(shù)據(jù)線的電壓都是近地的 0V 當(dāng)全速 低速設(shè)備連接以后 電流流過(guò)由集線器的下拉電阻和設(shè)備在D D 的上拉電阻構(gòu)成的分壓器 由于下拉電阻的阻值是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 3USB物理特性16 3 3檢測(cè)設(shè)備連接和速度 低速USB設(shè)備電纜和電阻的連接 全速USB設(shè)備電纜和電阻的連接 16 4USB的通訊協(xié)議 16 4 1包包 Packet 是USB系統(tǒng)中信息傳輸?shù)幕締卧?所有數(shù)據(jù)都是經(jīng)過(guò)打包后在總線上傳輸?shù)?USB包由五部分組成 即同步字段 SYNC 包標(biāo)識(shí)符字段 PID 數(shù)據(jù)字段 循環(huán)冗余校驗(yàn)字段 CRC 和包結(jié)尾字段 EOP 包的基本格式如下圖 1 SYNC字段 由8位組成 作為每個(gè)數(shù)據(jù)封包的前導(dǎo) 用來(lái)產(chǎn)生同步作用 使USB設(shè)備與總線的包傳輸率同步 它的數(shù)值固定為00000001 2 PID字段 用來(lái)表示數(shù)據(jù)封包的類型 包標(biāo)識(shí)符中的校驗(yàn)字段是通過(guò)對(duì)類型字段的每個(gè)位求反碼產(chǎn)生的 PID字段如下圖所示 表16 2中列出了信息包的類型 包括令牌 數(shù)據(jù) 握手或特殊四種信息包類型 表16 2各種信息包的類型與規(guī)范 3 數(shù)據(jù)字段 是用來(lái)攜帶主機(jī)與設(shè)備之間要傳遞的信息 其內(nèi)容和長(zhǎng)度根據(jù)包標(biāo)識(shí)符 傳輸類型的不同而各不相同 在USB包中 數(shù)據(jù)字段可以包含設(shè)備地址 端點(diǎn)號(hào) 幀序列號(hào)以及數(shù)據(jù)等內(nèi)容 在總線傳輸中 總是首先傳輸字節(jié)的最低位 最后傳輸字節(jié)的最高位 1 設(shè)備地址 ADDR 數(shù)據(jù)域ADDR數(shù)據(jù)域由7位組成 可用來(lái)尋址多達(dá)127個(gè)外圍設(shè)備 2 端點(diǎn) ENDP 數(shù)據(jù)域ENDP數(shù)據(jù)域由4位組成 通過(guò)這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ù)幀自動(dòng)加一 最大數(shù)值為0 x7FF 當(dāng)幀序列號(hào)達(dá)到最大數(shù)時(shí)將自動(dòng)從0開(kāi)始循環(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) 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è)令牌包 它們用來(lái)在根集線器和設(shè)備端點(diǎn)之間建立數(shù)據(jù)傳輸 一個(gè)IN包用來(lái)建立一個(gè)從設(shè)備到根集線器的數(shù)據(jù)傳送 一個(gè)OUT包用來(lái)建立從根集線器到設(shè)備的數(shù)據(jù)傳輸 令牌包格式如下 2 數(shù)據(jù) data 包數(shù)據(jù)封包含有4個(gè)域 SYNC PID DATA與CRC16 DATA數(shù)據(jù)域的位值是根據(jù)USB設(shè)備的傳輸速度及傳輸類型而定 且須以8字節(jié)為基本單位 也就是 若傳輸?shù)臄?shù)據(jù)不足8字節(jié) 或傳輸?shù)阶詈笏S嗟囊膊蛔?字節(jié) 仍須傳輸8字節(jié)的數(shù)據(jù)域 格式如下 3 握手 Handshake 包握手信息包是最簡(jiǎn)單的信息包類型 在這個(gè)握手信息包中僅包含一個(gè)PID數(shù)據(jù)域而已 它的格式如下所列 在USB上數(shù)據(jù)信息的一次接收或發(fā)送的處理過(guò)程稱為事務(wù)處理 Transaction 事務(wù)處理的類型包括輸入 IN 事務(wù)處理 輸出 OUT 事務(wù)處理 設(shè)置 SETUP 事務(wù)處理和幀開(kāi)始 幀結(jié)尾等類型 在輸出 OUT 事務(wù)處理和設(shè)置 SETUP 事務(wù)處理中 緊接著SETUP和OUT包后的是DATA包 DATA0和DATA1包是交替地發(fā)送的 在DATA包后面 設(shè)備將回應(yīng)一個(gè)握手信號(hào) 如果設(shè)備可以接收數(shù)據(jù) 就回應(yīng)ACK包 如果設(shè)備忙 就回應(yīng)NAK包 如果設(shè)備出錯(cuò) 則回應(yīng)STALL包 在IN事務(wù)中 IN包后面是設(shè)備發(fā)來(lái)的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ù)包的過(guò)程 正常的輸入事務(wù)處理 設(shè)備忙時(shí)的輸入事務(wù)處理 設(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í)傳輸 控制傳輸類型分為2 3個(gè)階段 設(shè)置階段 數(shù)據(jù)階段 無(wú)數(shù)據(jù)控制沒(méi)有此階段 以及狀態(tài)階段 根據(jù)數(shù)據(jù)階段的數(shù)據(jù)傳輸?shù)姆较?控制傳輸又可分為3種類型 控制讀取 讀取USB描述符 控制寫入 配置USB設(shè)備 以及無(wú)數(shù)據(jù)控制 1 控制傳輸控制傳輸是USB傳輸中最重要的傳輸 它包含3種類型 控制讀取 控制寫入以及無(wú)數(shù)據(jù)控制 這3種控制傳輸類型又分為2 3個(gè)階段 設(shè)置階段 數(shù)據(jù)階段 無(wú)數(shù)據(jù)控制沒(méi)有此階段 以及狀態(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 4USB傳輸類型 數(shù)據(jù)傳輸階段用來(lái)傳輸主機(jī)與設(shè)備之間的數(shù)據(jù) 控制讀取是將數(shù)據(jù)從設(shè)備讀到主機(jī)上 讀取的數(shù)據(jù)USB設(shè)備描述符 該過(guò)程如圖16 8所示 對(duì)每一個(gè)數(shù)據(jù)信息包而言 首先 主機(jī)會(huì)發(fā)送一個(gè)IN令牌信息包 表示要讀數(shù)據(jù)進(jìn)來(lái) 然后 設(shè)備將數(shù)據(jù)通過(guò)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è)備的配置信息 該過(guò)程如圖16 9所示 對(duì)每一個(gè)數(shù)據(jù)信息包而言 主機(jī)將會(huì)送出一個(gè)OUT令牌信息包 表示數(shù)據(jù)要送出去 緊接著 主機(jī)將數(shù)據(jù)通過(guò)DATA0數(shù)據(jù)信息包傳遞至設(shè)備 最后 設(shè)備將以下列方式加以響應(yīng) 當(dāng)數(shù)據(jù)已經(jīng)正確接收時(shí) 設(shè)備送出ACK令牌信息包 當(dāng)設(shè)備正在忙碌時(shí) 設(shè)備發(fā)出NAK握手信息包 當(dāng)發(fā)生了錯(cuò)誤時(shí) 設(shè)備發(fā)出STALL握手信息包 階段二 數(shù)據(jù)傳輸階段 狀態(tài)階段用來(lái)表示整個(gè)傳輸?shù)倪^(guò)程已完全結(jié)束 狀態(tài)階段傳輸?shù)姆较虮仨毰c數(shù)據(jù)階段的方向相反 即原來(lái)是IN令牌封包 這個(gè)階段應(yīng)為OUT令牌封包 反之 原來(lái)是OUT令牌封包 這個(gè)階段應(yīng)為IN令牌封包 對(duì)于控制讀取而言 主機(jī)會(huì)送出OUT令牌封包 其后再跟著0長(zhǎng)度的DATA1封包 而此時(shí) 設(shè)備也會(huì)做出相對(duì)應(yīng)的動(dòng)作 送ACK握手封包 NAK握手封包或STALL握手封包 相對(duì)地對(duì)于控制寫入傳輸 主機(jī)會(huì)送出IN令牌封包 然后設(shè)備送出表示完成狀態(tài)階段的0長(zhǎng)度的DATA1封包 主機(jī)再做出相對(duì)應(yīng)的動(dòng)作 送ACK握手封包 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è)信息包階段 沒(méi)有握手包 故數(shù)據(jù)傳錯(cuò)時(shí)不會(huì)重傳 3 批量傳輸用于傳輸大量數(shù)據(jù) 要求傳輸不能出錯(cuò) 但對(duì)時(shí)間沒(méi)有要求 適用于打印機(jī) 存儲(chǔ)設(shè)備等 4 中斷傳輸中斷傳輸方式總是用于對(duì)設(shè)備的查詢 以確定是否有數(shù)據(jù)需要傳輸 因此中斷傳輸?shù)姆较蚩偸菑腢SB設(shè)備到主機(jī) 16 4 5設(shè)備列舉 1 描述符USB描述符就好像是USB外圍設(shè)備的 身份證 一樣 詳細(xì)地記錄著外圍設(shè)備相關(guān)的一切信息 為了描述不同的數(shù)據(jù) 就需以不同類型的USB描述符來(lái)加以描述 它共有以下幾種類型 設(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)求 ClearFeature 2 獲得描述符 GetDescriptor 3 設(shè)置地址 SetAddress 4 設(shè)置狀態(tài) SetConfiguration 幾個(gè)主要的設(shè)備請(qǐng)求 2 USB設(shè)備請(qǐng)求 下面結(jié)合實(shí)例分別介紹幾個(gè)主要的設(shè)備請(qǐng)求 1 清除特性 ClearFeature 該請(qǐng)求是用來(lái)取消一個(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 FEATURE命令清除該端點(diǎn)的停止?fàn)顟B(tài) 本實(shí)例中就是這樣使用該請(qǐng)求的 2 USB設(shè)備請(qǐng)求 2 取得描述符 GetDescriptor 該請(qǐng)求可以取得USB設(shè)備中存在的特定的描述符 其格式如下 該請(qǐng)求中的wValue的高字節(jié)表示要取的描述符類型 低字節(jié)表示描述符的索引值 描述的類型有 1表示設(shè)備描述符 2表示配置描述符 3表示字符串描述符 4表示接口描述符 5表示端點(diǎn)描述符 wIndex的值為0或語(yǔ)言ID 當(dāng)要取的描述符是字符串描述符時(shí) 該域的值為語(yǔ)言ID 當(dāng)為其他的描述符時(shí) 該域?yàn)? wLength表示要返回的數(shù)據(jù)長(zhǎng)度 如果SETUP階段的地址使用的是預(yù)設(shè)地址0 ENDP字段為0 這時(shí)的wLength值會(huì)大于實(shí)際的描述的值 這是為什么呢 原因是用戶以預(yù)設(shè)的地址0來(lái)取得設(shè)備描述符時(shí) 不管設(shè)多少字節(jié) 用戶最多只取其前8字節(jié) 即在控制傳輸過(guò)程只有一次數(shù)據(jù)階段 但是 如果用戶以新的地址 ENDP字段不為0 來(lái)取得設(shè)備描述符時(shí) 這時(shí)wLength的值就要注意了 2 USB設(shè)備請(qǐng)求 3 設(shè)置地址 SetAddress 該請(qǐng)求給USB設(shè)備設(shè)置地址 從而可以對(duì)該USB設(shè)備進(jìn)行進(jìn)一步的訪問(wèn) 其格式如下 該請(qǐng)求與其他的請(qǐng)求有一個(gè)重要的不同點(diǎn) 該請(qǐng)求下 USB設(shè)備一直不改變它的地址 直到該請(qǐng)求的狀態(tài)階段被成功地完成 而其他請(qǐng)求的操作都是在狀態(tài)階段之前完成 可以閱讀本實(shí)例加深對(duì)該點(diǎn)的理解 若特定的設(shè)備地址大于127 或者wIndex或wLength為非0值 那么該請(qǐng)求不執(zhí)行 2 USB設(shè)備請(qǐng)求 4 設(shè)置配置 SetConfiguration 該請(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è)備列舉可以簡(jiǎn)單地概括為這樣的一個(gè)過(guò)程 主機(jī)通過(guò)USB設(shè)備請(qǐng)求來(lái)取得設(shè)備描述符并對(duì)該設(shè)備進(jìn)行配置 該過(guò)程可以簡(jiǎn)化為如下5個(gè)步驟 第一步 使用預(yù)設(shè)的地址0取得設(shè)備描述符 第二步 設(shè)置設(shè)備的新地址 第三步 使用新地址取得設(shè)備描述符 第四步 取得配置描述符 第五步 設(shè)置配置描述符 設(shè)備列舉使用的是控制傳輸 上述的5個(gè)步驟必須符合控制傳輸?shù)幕炯軜?gòu) 第一步 第三步和第四步使用的是控制讀取 第二步和第五步使用的是無(wú)數(shù)據(jù)控制 16 5JB8USB模塊的編程方法 16 5 1MC68HC908JB8簡(jiǎn)介1 MC68HC908JB8單片機(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é)用戶定義矢量區(qū) 2個(gè)16位雙通道定時(shí)器接口模塊 每個(gè)通道可選擇為輸入捕捉 輸出比較和脈寬調(diào)制輸出 內(nèi)置USB模塊 遵循USB1 1協(xié)議 16 5JB8USB模塊的編程方法 16 5 1MC68HC908JB8簡(jiǎn)介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 KBA7 PTA0 KBA0 22 25 32 35腳 8位通用雙向I O口 PTB7 PTB0 37 41 3 5腳 8位通用雙向I O口 PTC7 PTC0 31 28 17 14腳 8位通用雙向I O口 PTD7 PTD0 19 21 10 6腳 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 OSC2 43 44腳 片內(nèi)振蕩器引腳 JB8具有20 28 44三種封裝形式 不同封裝只是引腳數(shù)量和形式有所區(qū)別 其它方面是一致的 JB8單片機(jī)的封裝見(jiàn)圖16 10所示 其中a b c分別給出了28 20 44三種封裝形式的管腳圖 3 JB8存儲(chǔ)器組織CPU08可尋址64K地址空間 所以它的地址范圍是 0000 FFFF 在這 0000 FFFF的尋址范圍內(nèi) 分成多個(gè)不同區(qū)段 每個(gè)區(qū)段的作用不同 MC68HC908JB8單片機(jī)的存儲(chǔ)器組織及地址分配見(jiàn)圖16 11 圖16 11JB8存儲(chǔ)映像圖 16 5 1MC68HC908JB8簡(jiǎn)介 16 5 2USB功能模塊USB功能模塊可以內(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寄存器是用來(lái)控制和監(jiān)控USB操作 4 USB復(fù)位信號(hào) 5 USB懸掛 6 USB低速設(shè)備 16 5 3USB寄存器 USB寄存器是用來(lái)控制和監(jiān)視USB操作的 MC68HC908JB8中USB寄存器有如下幾種 地址寄存器 ADDR 控制寄存器0 4 UCR0 UCR4 狀態(tài)寄存器0 1 USR0 USR1 中斷寄存器0 2 UIR0 UIR2 端點(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 3USB寄存器 1 USB地址寄存器 UADDR UADDR的地址 0038 定義如下 D7 USBEN位 USB模塊允許位 USBEN 1 允許USB模塊 并且PTE4中斷不允許 USBEN 0 不允許USB模塊 包括USB中斷 復(fù)位以及復(fù)位中斷都不允許 并且PTE4 D 和PTE3 D 用作高電流開(kāi)漏輸入輸出口PTE4和PTE3 可讀寫位 D6 D0 UADD6 UADD0 USB模塊的地址 都是可讀寫位 16 5 3USB寄存器 2 USB中斷寄存器0 UIR0 UIR0的地址 0039 定義如下 D7 EOPIE位 EOP檢測(cè)中斷允許位 可讀寫位 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輸出中斷允許位 可讀寫位 TXD2IE 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輸出中斷允許位 可讀寫位 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)求 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 3USB寄存器 3 USB中斷寄存器1 UIR1 UIR1的地址 003A 定義如下 該寄存器所有的位均為只讀位 D7 EOPF位 EOP檢測(cè)標(biāo)志位 EOPF 1 EOP被檢測(cè)到 EOPF 0 EOP沒(méi)有被檢測(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ù)被送出 并且接收到一個(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ù)包 并返回一個(gè)ACK握手包后 該位被置1 16 5 3USB寄存器 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 到該位將清RXD2F位 寫 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 3USB寄存器 5 USB控制寄存器0 UCR0 UCR0的地址 003B 定義如下 D7 T0SEQ位 端點(diǎn)0輸出序列位 該位為可讀可寫位 它決定端點(diǎn)0的下一個(gè)IN事務(wù)發(fā)何種類型的數(shù)據(jù)包 DATA0或者DATA1 TOSEQ 1 表示端點(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沒(méi)有數(shù)據(jù)被發(fā)送時(shí) 該位必須被清 0 如果該位是 0 或者TXD0F位為 1 USB設(shè)備將對(duì)端點(diǎn)0的任何一個(gè)IN事務(wù)返回一個(gè)NAK握手包 復(fù)位將清除該位 TX0E 1 表示數(shù)據(jù)準(zhǔn)備好 可以發(fā)送 TX0E 0 表示數(shù)據(jù)沒(méi)準(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)沒(méi)有數(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ù) RX0E 0 表示不可以接收數(shù)據(jù) 以NAK包作為回應(yīng) D3 D0 TP0SIZ3 TP0SIZ0位 端點(diǎn)0輸出數(shù)據(jù)包大小 這些位為可讀可寫位 這幾位存儲(chǔ)的是端點(diǎn)0下一個(gè)IN事務(wù)發(fā)送數(shù)據(jù)的個(gè)數(shù) 復(fù)位將清除這幾位 16 5 3USB寄存器 6 USB控制寄存器1 UCR1 UCR1的地址 003C 定義如下 D7 T1SEQ位 端點(diǎn)1輸出序列位 該位為可讀可寫位 它決定端點(diǎn)1的下一個(gè)IN事務(wù)發(fā)何種類型的數(shù)據(jù)包 DATA0或者DATA1 T1SEQ 1 表示端點(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事務(wù)或OUT事務(wù)時(shí) 該位將使端點(diǎn)1發(fā)送一個(gè)STALL握手包 復(fù)位將清除該位 STALL1 1 表示發(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沒(méi)有數(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ā)送 TX1E 0 表示數(shù)據(jù)沒(méi)準(zhǔn)備好 以NAK包作為回應(yīng) D4 FRESUM位 強(qiáng)制喚醒位 D3 D0 TP1SIZ3 TP1SIZ0位 端點(diǎn)1輸出數(shù)據(jù)包大小 這些位為可讀可寫位 這幾位存儲(chǔ)的是端點(diǎn)1下一個(gè)IN事務(wù)發(fā)送數(shù)據(jù)的個(gè)數(shù) 復(fù)位將清除這幾位 16 5 3USB寄存器 7 USB控制寄存器2 UCR2 UCR2的地址 0019 定義如下 D7 T2SEQ位 端點(diǎn)2輸出序列位 該位為可讀可寫位 它決定端點(diǎn)2的下一個(gè)IN事務(wù)發(fā)何種類型的數(shù)據(jù)包 DATA0或者DATA1 T2SEQ 1 表示端點(diǎn)2下一個(gè)發(fā)送的是DATA1包 T2SEQ 0 表示端點(diǎn)2下一個(gè)發(fā)送的是DATA0包 復(fù)位將清除該位 D6 STALL2位 端點(diǎn)2強(qiáng)制發(fā)STALL位 該位為可讀可寫位 當(dāng)USB主控制器發(fā)送一個(gè)IN事務(wù)或OUT事務(wù)時(shí) 該位將使端點(diǎn)2發(fā)送一個(gè)STALL握手包 復(fù)位將清除該位 STALL1 1 表示發(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沒(méi)有數(shù)據(jù)被發(fā)送時(shí) 該位必須被清 0 如果該位是 0 或者TXD2F位為 1 USB設(shè)備將對(duì)端點(diǎn)2的任何一個(gè)IN事務(wù)返回一個(gè)NAK握手包 復(fù)位將清除該位 TX2E 1 表示數(shù)據(jù)準(zhǔn)備好 可以發(fā)送 TX2E 0 表示數(shù)據(jù)沒(méi)準(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)沒(méi)有數(shù)據(jù)被接收時(shí) 該位必須被清 0 如果該位是 0 或者RXD2F位為 1 USB設(shè)備將對(duì)端點(diǎn)2的任何一個(gè)OUT事務(wù)返回一個(gè)NAK握手包 復(fù)位將清除該位 RX2E 1 表示可以接收數(shù)據(jù) RX2E 0 表示不接收數(shù)據(jù) 以NAK包作為回應(yīng) D 3 0 TP2SIZ 3 0 位 端點(diǎn)2輸出數(shù)據(jù)包大小 這些位為可讀可寫位 這幾位存儲(chǔ)的是端點(diǎn)2下一個(gè)IN事務(wù)發(fā)送數(shù)據(jù)的個(gè)數(shù) 復(fù)位將清除這幾位 16 5 3USB寄存器 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ā)送STALL握手信號(hào) 0為默認(rèn)值 D2 PULLEN位 上拉允許位 該位為1 表示D 腳有內(nèi)部上拉 0表示D 腳沒(méi)接內(nèi)部上拉 D1 ENABLE2位 端點(diǎn)2允許位 1為允許 0為不允許 D0 ENABLE1位 端點(diǎn)1允許位 1為允許 0為不允許 16 5 3USB寄存器 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 處于輸出高電平狀態(tài) 該位若為0 表示D 處于輸出低電平狀態(tài) 16 5 3USB寄存器 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包 D3 D0 RP0SIZ3 RP0SIZ0位 端點(diǎn)0接收數(shù)據(jù)包大小 16 5 3USB寄存器 11 USB狀態(tài)寄存器1 USR1 USR1的地址 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包 D3 D0 RP2SIZ3 RP2SIZ0位 端點(diǎn)2接收數(shù)據(jù)包大小 16 5 3USB寄存器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 可讀可寫 16 5 4USB中斷 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)生結(jié)束中斷 所有的中斷共享同一個(gè)中斷向量 由中斷程序區(qū)分產(chǎn)生的是什么中斷 16 5 5JB8USB1 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 6PC機(jī)方USB1 1編程實(shí)例 16 6 1PC機(jī)方USB1 1編程步驟 1 選擇并安裝合適的USB1 1驅(qū)動(dòng)程序2 選擇一種高級(jí)語(yǔ)言 參照驅(qū)動(dòng)程序的相關(guān)文檔進(jìn)行編程 1 為新建的工程添加USBIOCOM1 0TypeLibrary 2 編寫響應(yīng)USB設(shè)備的程序 3 取得描述符 初始化USB設(shè)備并建立連接 4 進(jìn)行USB收發(fā)通信 16 6PC機(jī)方USB1 1編程實(shí)例 16 6 2PC機(jī)方USB1 1VB編程實(shí)例 USB測(cè)試程序PC機(jī)方VB程序流程圖- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- USB 通訊 協(xié)議 通俗易懂
鏈接地址:http://www.hcyjhs8.com/p-7691491.html