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