版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄TOC\o"1-3"\u第1章緒論 11.1概述 1課題研究目的 1國(guó)內(nèi)外發(fā)展?fàn)顩r 11.2USB接口及USB器件分析 21.3系統(tǒng)方案設(shè)計(jì) 41.4預(yù)期實(shí)現(xiàn)目標(biāo) 4第2章USB概述及協(xié)議 62.1USB體系結(jié)構(gòu)概述 6USB系統(tǒng)描述 6USB連接頭及其供電方式 8USB系統(tǒng)軟硬件組成 82.2USB編碼方式與傳輸類型 9USB的編碼方式 9USB傳輸 92.3USB設(shè)備請(qǐng)求 12USB標(biāo)準(zhǔn)請(qǐng)求格式 12USB標(biāo)準(zhǔn)請(qǐng)求命令 122.4USB設(shè)備的描述符 13設(shè)備描述符 13配置描述符 14接口描述符 14端點(diǎn)描述符 16字符串描述 162.5總線協(xié)議 192.6USB的枚舉過程 192.7USB主機(jī)接口及系統(tǒng)的功能 202.8本章小結(jié) 21第3章硬件特性及電路設(shè)計(jì) 223.1單片機(jī)8051介紹 223.2PDIUSBD12器件與微控制器的連接 24PDIUSBD12功能描述 24PDIUSBD12管腳配置 24單片機(jī)與PDIUSBD12的連接 253.3系統(tǒng)硬件設(shè)計(jì) 26單片機(jī)電路設(shè)計(jì) 26外圍電路設(shè)計(jì) 273.4本章小結(jié) 29第4章程序設(shè)計(jì)及調(diào)試 304.1概述 30集成開發(fā)環(huán)境Keil簡(jiǎn)介 30程序概述 304.2固件程序 34固件程序組成 34PDIUSBD12的底層操作 35PDIUSBDI2命令接口程序 36PDIUSBDI2的中斷服務(wù)程序 37主程序 424.3程序調(diào)試 45Keil編譯器的使用 45系統(tǒng)調(diào)試 484.4本章小結(jié) 51結(jié)論 52參考文獻(xiàn) 53致謝 54附錄 55附錄1電路原理圖 55附錄2PCB圖 56第1章緒論1.1概述隨著電子科技的發(fā)展與應(yīng)用,各種計(jì)算機(jī)外圍接口不斷推陳出新,USB接口已經(jīng)成為現(xiàn)今個(gè)人計(jì)算機(jī)上最重要的接口之一,各種電子消費(fèi)產(chǎn)品也逐漸配置這種接口。USB接口是速度比較高的串行接口,具有較廣闊的發(fā)展前景和應(yīng)用潛力。USB適用于低檔外設(shè)與主機(jī)之間的高速數(shù)據(jù)傳輸。從USB問世至今,USB在不斷的自我完善,并走向成熟。從普通計(jì)算機(jī)用戶、計(jì)算機(jī)工程師、到硬件芯片生產(chǎn)廠商,都已經(jīng)完全認(rèn)可了USB。傳統(tǒng)的設(shè)備主要是基于RS-232的串行接口,隨著計(jì)算機(jī)速度的提升,已經(jīng)明顯不能適應(yīng)發(fā)展的需要。不僅是速度上比較慢,而且由于其不支持熱插拔。而USB接口由于支持熱插拔,占有較少的系統(tǒng)軟件硬件資源,廠商對(duì)于USB的硬件軟件的支持也越來越完備,現(xiàn)在開發(fā)一個(gè)USB外設(shè)產(chǎn)品所需要的成本和時(shí)間大大降低了。USB技術(shù)取得了迅速的發(fā)展。單片機(jī)作為最典型的嵌入式系統(tǒng),推動(dòng)了嵌入式系統(tǒng)的發(fā)展,成為現(xiàn)代電子系統(tǒng)中重要的智能化器件。因此,USBI/O外圍設(shè)備的設(shè)計(jì)已成為電子領(lǐng)域的主要技術(shù)之一[1]。本課題就是利用單片機(jī)設(shè)計(jì)一個(gè)功能簡(jiǎn)單的嵌入式USB外設(shè),將其與PC機(jī)連接,通過USB接口實(shí)現(xiàn)PC機(jī)與外設(shè)之間的相互通信。國(guó)內(nèi)外發(fā)展?fàn)顩r1994年,Intel,Compaq,Digital,IBM,Microsoft,NEC,NorthernTelecom等7家世界著名的計(jì)算機(jī)和通信公司成立了USB論壇,花了近兩年的時(shí)間形成了統(tǒng)一的意見,于1995年11月正式制定了USB0.9通用串行總線(UniversalSerialBus)規(guī)范。在1996年,一些規(guī)模型經(jīng)營(yíng)的公司,他們的PC機(jī)、監(jiān)視器,開始配備了USB接口。原有的所有接口和插槽依然保留,只增加一個(gè)USB接插件,其目的是為了在擴(kuò)展新的用途時(shí)使用。直到1997年,真正符合USB技術(shù)標(biāo)準(zhǔn)的外設(shè)才開始出現(xiàn)。直至Windows98推出之前,推出的USB功能模塊并不多,原因除了因?yàn)閭鹘y(tǒng)的通信接口,如RS232,IEEE488等,一時(shí)難以退出應(yīng)用領(lǐng)域外,一些早期的USB應(yīng)用探索者步履艱難,抱怨的主因是宿主平臺(tái)的實(shí)用性。Windows98對(duì)USB驅(qū)動(dòng)軟件(USBD)完善,使其可提供對(duì)USB的強(qiáng)有力的支持,對(duì)USB技術(shù)的發(fā)展起到重要推進(jìn)作用。自此,市場(chǎng)上涌現(xiàn)出大批的USB產(chǎn)品。USB1.0是目前推出的在支持USB的計(jì)算機(jī)與外設(shè)上普遍采用的標(biāo)準(zhǔn)。目前普遍采用的USB1協(xié)議主要應(yīng)用在中低速外圍設(shè)備上,它提供的傳輸速度有低速1.5Mbps和全速12Mbps兩種??煞謩e支持顯示器、Modem、鼠標(biāo)、鍵盤、掃描儀、打印機(jī)、光驅(qū)及大范圍的多媒體設(shè)備。從國(guó)外的發(fā)展來看,人們對(duì)USB有著極大的重視程度,這從USB規(guī)范的改進(jìn)速度之快及國(guó)際市場(chǎng)上基于USB的產(chǎn)品普及的范圍可見一斑。從1994年公布V1.0FDR版本,短短一年時(shí)間版本增訂了五次。說明技術(shù)人員正大力研究改善USB的性能。市場(chǎng)上基于USB的外設(shè)己囊括了所有的數(shù)字產(chǎn)品??梢妵?guó)外在這方面已作了很多工作,并且目前也正以很快的速度發(fā)展[2]。國(guó)內(nèi)對(duì)于USB的研究在這幾年才剛剛起步。市場(chǎng)上也可以見到各種USB產(chǎn)品,也有少量的專門討論USB開發(fā)的國(guó)內(nèi)網(wǎng)站。比較專業(yè)的穩(wěn)定的網(wǎng)站有USB開發(fā)網(wǎng)(),但因?yàn)樵谇皫啄赀€很少有人做這方面的工作,所以在相關(guān)網(wǎng)站上開發(fā)USB的文章量少,更新速度慢;國(guó)內(nèi)知名高校的BBS(比如水木華),上面相關(guān)的文章詢問USB的人多,但回答問題的人僅限于幾個(gè)。對(duì)USB芯片進(jìn)行開發(fā)、技術(shù)服務(wù)和應(yīng)用方案設(shè)計(jì)的公司更是寥寥無(wú)幾。雖然在網(wǎng)上做調(diào)研所得到的信息并不完全,但由此可以看出國(guó)內(nèi)對(duì)USB技術(shù)研究的需求及欠缺。1.2USB接口及USB器件分析USB(UniversalSerialBus通用串行總線),是一種快速、靈活的總線接口。與其它通信接口比較,USB接口的最大特點(diǎn)是易于使用,這也是USB的主要設(shè)計(jì)目標(biāo)。作為一種高速總線接口,USB適用于多種設(shè)備,如數(shù)碼相機(jī)、MP3播放機(jī)、高速數(shù)據(jù)采集設(shè)備等。易于使用還表現(xiàn)在USB接口支持熱插拔,并且所有的配置過程都由系統(tǒng)自動(dòng)完成,無(wú)需用戶干預(yù)。USB接口支持1.5Mb/s(低速)和12Mb/s(全速)的數(shù)據(jù)傳輸速率,扣除用于總線狀態(tài)、控制和錯(cuò)誤監(jiān)測(cè)等的數(shù)據(jù)傳輸,USB的最大理論傳輸速率仍達(dá)1.2Mb/s或9.6Mb/s,遠(yuǎn)高于一般的串行總線接口。USB接口芯片價(jià)格低廉,這也大大促進(jìn)USB設(shè)備的開發(fā)與應(yīng)用。在進(jìn)行一個(gè)USB設(shè)備開發(fā)之前,首先要根據(jù)具體使用要求選擇合適的USB控制器。目前,市場(chǎng)上供應(yīng)的USB控制器主要有兩種:帶USB接口的單片機(jī)(MCU)或純粹的USB接口芯片。帶USB接口的單片機(jī)從應(yīng)用上又可以分成兩類,一類是從底層設(shè)計(jì)專用于USB控制的單片機(jī),另一類是增加了USB接口的普通單片機(jī),如Cypress公司的EZ-USB(基于8051),選擇這類USB控制器的最大好處在于開發(fā)者對(duì)系統(tǒng)結(jié)構(gòu)和指令集非常熟悉,開發(fā)工具簡(jiǎn)單,但對(duì)于簡(jiǎn)單或低成本系統(tǒng)。其價(jià)格因素也是在實(shí)際選擇過程中需要考慮的因素。純粹的USB接口芯片僅處理USB通信,必須有一個(gè)外部微處理器來進(jìn)行協(xié)議處理和數(shù)據(jù)交換。這類典型產(chǎn)品有Philips公司的PDIUSBD12(并行接口),NS公司USBN9603/9604(并行接口),NetChip公司的NET2888等。USB接口芯片的主要特點(diǎn)是價(jià)格便宜、接口方便、可靠性高,尤其適合于產(chǎn)品的改型設(shè)計(jì)(硬件上僅需對(duì)并行總線和中斷進(jìn)行改動(dòng),軟件則需要增加微處理器的USB中斷處理和數(shù)據(jù)交換程序,PC機(jī)的USB接口通信程序,無(wú)需對(duì)原有產(chǎn)品系統(tǒng)結(jié)構(gòu)作很大的改動(dòng))[2]。PDIUSBD12是在USB協(xié)議設(shè)備端使用最多的芯片之一。此芯片是帶有并行總線的全速USB接口器件,可與任何微控制器實(shí)現(xiàn)高速并行接口(2Mb/s),并用于許多外設(shè)。這種實(shí)現(xiàn)USB接口的標(biāo)準(zhǔn)組件,可以使設(shè)計(jì)者在不同類型的微控制器中選擇最合適的微控制器,使用已有的結(jié)構(gòu)和減少固件上的投資,從而用最快捷的方法實(shí)現(xiàn)最經(jīng)濟(jì)的USB設(shè)備,它具有以下特性:1、符合USB1.0版規(guī)范;2、高性能USB接口器件,集成了SIE,FIFO存儲(chǔ)器,收發(fā)器以及電壓調(diào)整器;3、可以與任何外部微控制器/微處理起實(shí)現(xiàn)高速并行接(2MB/s);4、集成320B多結(jié)構(gòu)的FIFO存儲(chǔ)器;5、完全自治的直接內(nèi)存存?。―MA)操作;6、可以通過軟件控制與USB的連接;7、采用GoodLink技術(shù)的連接指示器,在通信時(shí)使LED閃爍;8、可編程的時(shí)鐘頻率輸出;9、多中斷模式實(shí)現(xiàn)批量和同步傳輸[3]。1.3系統(tǒng)方案設(shè)計(jì)以單片機(jī)原理,硬件資源的功能應(yīng)用,PDIUSBD12芯片功能與接口設(shè)計(jì),USB1.0協(xié)議等理論知識(shí)為基礎(chǔ),設(shè)計(jì)出完整的系統(tǒng)原理圖。根據(jù)原理圖,將硬件系統(tǒng)資源焊接成PCB板。根據(jù)系統(tǒng)功能,設(shè)計(jì)編寫固件程序,下載后進(jìn)行調(diào)試,實(shí)驗(yàn)板在單片機(jī)控制下能單獨(dú)工作后,然后和上位機(jī)進(jìn)行聯(lián)機(jī)調(diào)試,通過USB接口實(shí)現(xiàn)與上位機(jī)的相互通信。本課題涉及的理論知識(shí)主要是USB1.0協(xié)議,重點(diǎn)在于硬件設(shè)計(jì),難點(diǎn)在于編程和整機(jī)的調(diào)試。經(jīng)過論證,在實(shí)現(xiàn)設(shè)計(jì)要求的前提下,為了降低系統(tǒng)的成本,選用接口級(jí)芯片PDIUSBD12,控制器選取8051,它有64k的存儲(chǔ)容量,對(duì)于固件程序已經(jīng)足夠使用了;而且這款單片機(jī)支持在線編程,通過串口下載程序,這給程序的下載和使用帶來來方便。程序設(shè)計(jì)采用C語(yǔ)言進(jìn)行編程,軟件仿真采用KeilC51。1.4預(yù)期實(shí)現(xiàn)目標(biāo)通過硬件電路和驅(qū)動(dòng)程序(包括設(shè)備端和上位機(jī)端的驅(qū)動(dòng)程序)實(shí)現(xiàn)以下目的:1、保證電路連接的正確性和可行性。完成以單片機(jī)與USB接口芯片為主要芯片的電路板;2、完成程序的編寫,主要是設(shè)備端的固件編程;3、通過硬件調(diào)試,單片機(jī)能獨(dú)立控制電路板上元件工作;4、實(shí)現(xiàn)電路板與上位PC機(jī)雙向傳輸。這需要與上位機(jī)進(jìn)行聯(lián)機(jī)調(diào)試,主要在軟件部分實(shí)現(xiàn)。
第2章USB概述及協(xié)議USB以USB主機(jī)為核心,以外圍的USB設(shè)備為功能,組成了USB系統(tǒng)模型。主機(jī)是USB的核心,每次USB數(shù)據(jù)通信都必須是由USB主機(jī)來發(fā)起的,主機(jī)管理著USB設(shè)備。USB物理上是一個(gè)含有兩條電源線(VCC,GND)和兩條以差分方式產(chǎn)生信號(hào)的線(D+,D-),傳輸率可達(dá)12Mbps的串行接口,一個(gè)PC主機(jī)可以連接多達(dá)127個(gè)外圍設(shè)備。USB協(xié)議是以令牌包為主的通信協(xié)議,12Mbps的總線帶寬被分割成1ms的幀,所有任務(wù)以時(shí)分傳輸(TDM)來分享總線。2.1USB體系結(jié)構(gòu)概述USB系統(tǒng)描述一個(gè)USB系統(tǒng)主要被定義為三個(gè)部分:·USB的互連;·USB的設(shè)備;·USB的主機(jī)。USB的互連是指USB設(shè)備與主機(jī)之間進(jìn)行連接和通信的操作,主要包括以下幾方面:·總線的拓?fù)浣Y(jié)構(gòu):USB設(shè)備與主機(jī)之間的各種連接方式;·內(nèi)部層次關(guān)系:根據(jù)性能疊置,USB的任務(wù)被分配到系統(tǒng)的每一個(gè)層次;·數(shù)據(jù)流模式:描述了數(shù)據(jù)在系統(tǒng)中通過USB從產(chǎn)生方到使用方的流動(dòng)方式;·USB的調(diào)度:USB提供了一個(gè)共享的連接。對(duì)可以使用的連接進(jìn)行了調(diào)度以支持同步數(shù)據(jù)傳輸,并且避免的優(yōu)先級(jí)判別的開銷。USB連接了USB設(shè)備和USB主機(jī),USB的物理連接是有層次性的星型結(jié)構(gòu)。每個(gè)網(wǎng)絡(luò)集線器是在星型的中心,每條線段是點(diǎn)點(diǎn)連接。從主機(jī)到集線器或其功能部件,或從集線器到集線器或其功能部件,從圖2.1中可看出何USB系圖2.1總線的拓?fù)浣Y(jié)構(gòu)拓?fù)浣Y(jié)構(gòu)。圖2.1總線的拓?fù)浣Y(jié)構(gòu)其中,USB集線器Hub是一組設(shè)備的連接點(diǎn),主機(jī)中有一個(gè)被嵌入的Hub叫根Hub(rootHub)。主機(jī)端通常是指PC主機(jī)或是另外再附加USB端口的擴(kuò)充卡,主機(jī)通過根Hub提供若干個(gè)連接點(diǎn)。集線器除了擴(kuò)增系統(tǒng)的連接點(diǎn)外,還負(fù)責(zé)中繼(repeat)上游或下游的信號(hào)以及控制各個(gè)下游端口的電源管理。當(dāng)PC上電時(shí),所有USB設(shè)備與Hub都默認(rèn)地址為0,PC機(jī)啟動(dòng)程序向USB查詢,地址1分配給發(fā)現(xiàn)的第一個(gè)設(shè)備,地址2分配給第二個(gè)設(shè)備或Hub,如此重復(fù)尋找并分配地址,直到所有設(shè)備賦完地址,并加載相應(yīng)的的驅(qū)動(dòng)程序。當(dāng)設(shè)備突然被拔移后,PC機(jī)通過D+或D-的電壓變化檢測(cè)到設(shè)備被移除掉后,將其地址收回,并列入可使用的地址名單中。在任何USB系統(tǒng)中,只有一個(gè)主機(jī)。USB和主機(jī)系統(tǒng)的接口稱作主機(jī)控制器,主機(jī)控制器可由硬件、固件和軟件綜合實(shí)現(xiàn)。根集線器是由主機(jī)系統(tǒng)整合的,用以提供更多的連接點(diǎn)。USB的設(shè)備如下所示:·網(wǎng)絡(luò)集線器,向USB提供了更多的連接點(diǎn);·功能器件:為系統(tǒng)提供具體功能,如ISDN的連接,數(shù)字的游戲桿或揚(yáng)聲器。USB設(shè)備提供的USB標(biāo)準(zhǔn)接口的主要依據(jù):·對(duì)USB協(xié)議的運(yùn)用;·對(duì)標(biāo)準(zhǔn)USB操作的反饋,如設(shè)置和復(fù)位;·標(biāo)準(zhǔn)性能的描述性信息。USB連接頭及其供電方式為了避免連接錯(cuò)誤,USB定義了兩種不同規(guī)格的星形USB連接頭:序列A與B連接頭,其中序列A接頭用來連接下游的設(shè)備。每個(gè)連接頭內(nèi)擁有4個(gè)針腳,其中兩個(gè)是用來傳遞差分?jǐn)?shù)據(jù)的,另兩個(gè)則用于USB設(shè)備的電源供給。USB的供電方式有兩種:1、總線供電集線器電源由上游連接端口供應(yīng),最多只能從上游端消耗500mA。一個(gè)4個(gè)連接端口的集線器,每個(gè)下游端口最多消耗為100mA,外圍電路消耗100mA。2、自我供電集線器集線器本身有電源,可以提供給本身的控制器以及下游端口至少500mA的電流,集線器最多可從上游端消耗100mA。USB系統(tǒng)軟硬件組成USB系統(tǒng)的軟硬件資源可以分為3個(gè)層次:功能層、設(shè)備層和接口層。功能層提供USB設(shè)備所需的特定的功能,主機(jī)端的這個(gè)功能由用戶軟件和設(shè)備類驅(qū)動(dòng)程序提供,而設(shè)備就由功能單元來實(shí)現(xiàn)。設(shè)備層主要提供USB基本的協(xié)議棧,執(zhí)行通用的USB的各種操作和請(qǐng)求命令。從邏輯上講,就是USB系統(tǒng)軟件與USB邏輯設(shè)備之間的數(shù)據(jù)交換。接口層涉及的是具體的物理層,其主要實(shí)現(xiàn)物理信號(hào)和數(shù)據(jù)包的交互,即在主機(jī)端的USB主控制器和設(shè)備的USB總線接口之間傳輸實(shí)際的數(shù)據(jù)流。無(wú)論在軟件還是硬件層次上,USB主機(jī)都處于USB系統(tǒng)的核心。主機(jī)系統(tǒng)不僅包含了用于和USB外設(shè)進(jìn)行通信的USB主機(jī)控制器及用于連接的USB接口(SIE),更重要的是,主機(jī)系統(tǒng)是USB系統(tǒng)軟件和USB客戶軟件的載體。USB主機(jī)軟件系統(tǒng)可以分為三個(gè)部分:
1、客戶軟件部分(CSW),在邏輯上和外設(shè)功能部件部分進(jìn)行資料的交換;2、USB系統(tǒng)軟件部分(即HCDI),在邏輯和實(shí)際中作為HCD和USBD之間的接口;3、USB主機(jī)控制器軟件部分(即HCD和USBD),用于對(duì)外設(shè)和主機(jī)的所有USB有關(guān)部分的控制和管理,包括外設(shè)的SIE部分、USB資料發(fā)送接收器(Transreceiver)部分及外設(shè)的協(xié)議層等[2]。2.2USB編碼方式與傳輸類型USB的編碼方式USB采用不歸零翻轉(zhuǎn)(NonReturntoZeroInvert,簡(jiǎn)稱NRZI)編碼方式,對(duì)于不同步的脈沖信號(hào)也能產(chǎn)生同步的數(shù)據(jù)存取,能有效地解決USB纜線信號(hào)延遲產(chǎn)生的誤差。NRZI的編碼規(guī)則是:當(dāng)數(shù)據(jù)位為“1”時(shí)電平保持不變,為“0”時(shí)電平翻轉(zhuǎn)。如果原始的串行數(shù)據(jù)中含有連續(xù)6個(gè)“1",就在其后填充一個(gè)“0"。在NRZI解碼的過程中發(fā)現(xiàn)連續(xù)的6個(gè)“1”時(shí),則移走其后原填入的“0"。NRZI編碼、位填充過程分析如下:原數(shù)據(jù)01100011011111111位填充011000110111111011NRZI碼0111010001111111000USB傳輸U(kuò)SB總線是一種串行總線,即它的資料是一個(gè)bit一個(gè)bit來傳送的。雖然USB總線是把這些bit形式的資料打成資料包來傳送,但資料的同步也是必不可少的。USB1.0協(xié)議規(guī)定,USB的標(biāo)準(zhǔn)脈沖時(shí)鐘為12MHz,而其總線時(shí)鐘為1ms,即每隔1ms,USB器件應(yīng)為USB線纜產(chǎn)生一個(gè)時(shí)鐘脈沖序列。這個(gè)脈沖序列稱為幀開始資料包(SOF),主機(jī)利用SOF來同步USB資料的發(fā)送和接收。為實(shí)現(xiàn)多外設(shè)、多信道地同時(shí)工作,USB總線使用資料包的方式來傳輸資料和控制信息。USB數(shù)據(jù)傳輸中的每一個(gè)資料包都以一個(gè)同步字段開始,它的最后兩個(gè)bit作為PID字段開始的標(biāo)志。緊跟在同步字段之后的一段8bit的脈沖序列稱為PID(資料包標(biāo)識(shí)字段),PID字段的前四位用來標(biāo)記該資料包的類型,后四位則作為對(duì)前四位的校驗(yàn)。PID字段被分為標(biāo)記PID(共有IN、OUT、SETUP或SOF四種)、資料PID(DATA0或DATA1)、握手PID(ACK、NAK或STALL)及特殊PID等。主機(jī)根據(jù)PID字段的類型來判斷一個(gè)資料包中所包含的數(shù)據(jù)類型,并執(zhí)行相應(yīng)的操作。當(dāng)一個(gè)USB外設(shè)初次連接時(shí),USB系統(tǒng)會(huì)為這臺(tái)外設(shè)分配唯一的USB地址,這個(gè)地址通過地址寄存器(ADDR)來標(biāo)記,以保證資料包不會(huì)傳送到別的USB外設(shè)。7bit的ADDR使得USB系統(tǒng)最大尋址為127臺(tái)設(shè)備(ADDR字段)。由于一臺(tái)USB外設(shè)可能具有多個(gè)信道,因而在ADDR字段后會(huì)有一個(gè)附加的端點(diǎn)字段(EndpointField,簡(jiǎn)標(biāo)為ENDP)來標(biāo)記不同的信道。所有的USB外設(shè)都必須支持Endpoint0信道,用0000來標(biāo)記。對(duì)于高速設(shè)備,可以最大支持16個(gè)信道,而低速設(shè)備在Endpoint0之外僅能有一個(gè)信道。數(shù)據(jù)域位作為一次USB數(shù)據(jù)傳輸?shù)闹行哪康?,在一個(gè)USB資料包中可以包含0~1203Byte的資料。而幀數(shù)量字段則包含在幀開始資料包中,對(duì)有的應(yīng)用場(chǎng)合,可以用幀數(shù)量字段作為資料的同步信號(hào)。為保證控制、塊傳送及中斷傳送中資料包的正確性,CRC校驗(yàn)字段被引用到如標(biāo)記、資料、幀開始(SOF)這樣的資料包中。CRC校驗(yàn)(資料冗余校驗(yàn))可以給予資料以100%的正確性檢驗(yàn)。在USB系統(tǒng)中,有四種形式的資料包:信令包(TokenPackets)、DATA資料包(DATAPackets)、幀開始包(SOFPackets)和握手包(HandshakePackets)。每個(gè)資料包的結(jié)束都會(huì)有兩個(gè)bit寬的EOP字段作為資料包結(jié)束的標(biāo)志(圖7-18),EOP在差模信號(hào)中表現(xiàn)為D+和D-都處于“0”狀態(tài)。對(duì)于高速USB外設(shè)而言,這個(gè)脈沖寬度在160~175ns之間,而低速設(shè)備則在1.25~1.50μs之間。無(wú)論其后是否有其它的資料包,USB線纜都會(huì)在EOP字段后緊跟1bit的總線空閑位。USB主機(jī)或外設(shè)利用EOP來判斷一個(gè)資料包的結(jié)束。為了滿足不同外設(shè)和用戶的要求,USB提供了四種傳輸方式:控制傳輸;同步傳輸;中斷傳輸;批傳輸。它們?cè)跀?shù)據(jù)格式、傳輸方向、數(shù)據(jù)包容量限制、總線訪問限制等方面有著各自不同的特征:1、控制傳輸(ControlTransfer):可靠的,非周期的,由主機(jī)軟件發(fā)起的請(qǐng)求或者回應(yīng)的傳送,通常用于命令事務(wù)和狀態(tài)事務(wù)。2、同步傳輸(IsochronousTransfer);在主機(jī)和設(shè)備之間的周期性的,連續(xù)的通信,一般用于傳送與時(shí)間相關(guān)的信息。這種類型保留了將時(shí)間概念包含于數(shù)據(jù)中的能力。但并不意味著用于同步傳送的數(shù)據(jù)的時(shí)間是很重要的,即傳送并不一定很急。3、中斷傳輸(InterruptTransfer):小規(guī)模數(shù)據(jù)的,低速的,固定延遲的傳送。4、批量傳輸(BulkTransfer):非周期的,大包的,可靠的傳送。典型用于傳送可以利用任何帶寬的數(shù)據(jù),這些數(shù)據(jù)沒有帶寬時(shí),是可以容忍等待。對(duì)于PDIUSBD12,端點(diǎn)的工作方式可通過SetMode命令配置為4種不同的模式,分別為:1、模式0(Non-ISO模式):非同步傳輸;2、模式1(ISO-OUT模式):同步輸出傳輸;3、模式2(ISO-IN模式):同步輸入傳輸;4、模式3(ISO-IO模式):同步輸入輸出傳輸。端點(diǎn)2在有些方面是比較特別的,端點(diǎn)2是進(jìn)行吞吐大量數(shù)據(jù)的主要端點(diǎn),一般稱其為主端點(diǎn),主端點(diǎn)執(zhí)行主機(jī)的特性以減輕傳輸大量數(shù)據(jù)的任務(wù),具體包括:1、雙緩沖;2、支持DMA;3、可以配置為同步傳輸或非同步(批量和中斷)傳輸。2.3USB設(shè)備請(qǐng)求USB的標(biāo)準(zhǔn)設(shè)備請(qǐng)求是用來完成USB設(shè)備枚舉的命令,USB設(shè)備必須對(duì)標(biāo)準(zhǔn)設(shè)備請(qǐng)求作出響應(yīng),不管該設(shè)備是否已經(jīng)被分配了一個(gè)默認(rèn)的地址或者該設(shè)備目前正在被配置。所有的標(biāo)準(zhǔn)設(shè)備請(qǐng)求都是使用默認(rèn)的管道來傳輸?shù)?。USB標(biāo)準(zhǔn)請(qǐng)求格式USB的設(shè)備請(qǐng)求由八個(gè)字節(jié)組成,格式定義如表2.1所示。USB標(biāo)準(zhǔn)請(qǐng)求命令USB標(biāo)準(zhǔn)請(qǐng)求有11個(gè)命令,如下:獲取狀態(tài)請(qǐng)求:該命令用于返回特定接受者的狀態(tài)。清除特性請(qǐng)求:該命令用于清除或禁用接受者的某些特性。設(shè)置特性請(qǐng)求:該命令是主機(jī)用來啟用或激活命令接受者某些特性。設(shè)置地址請(qǐng)求:該命令用于主機(jī)給設(shè)備分配地址。獲取描述請(qǐng)求:該命令用于主機(jī)獲取設(shè)備的特定描述符。設(shè)置描述符請(qǐng)求:主機(jī)利用該命令來修改設(shè)備中的有關(guān)描述或增加新的描述符等。獲取配置請(qǐng)求:主機(jī)利用該命令獲得設(shè)備當(dāng)前的配置值。設(shè)置配置請(qǐng)求:主機(jī)通過該命令來指示設(shè)備采用要求的配置。獲取接口請(qǐng)求:主機(jī)利用該命令來獲取當(dāng)前的某個(gè)接口的接口描述符的編號(hào)。設(shè)置接口請(qǐng)求:主機(jī)可以通過該命令來要求設(shè)備用某個(gè)接口描述符來描述接口。同步幀請(qǐng)求:該命令用于設(shè)備設(shè)置和報(bào)告一個(gè)端點(diǎn)的同步幀。表2.1USB設(shè)備請(qǐng)求格式偏移值字段名稱字段長(zhǎng)度字段取值說明0設(shè)備請(qǐng)求類型1位圖請(qǐng)求特性:D7:數(shù)據(jù)傳輸方向0=主機(jī)到設(shè)備1=設(shè)備到主機(jī)D6..5:類型0=標(biāo)準(zhǔn);1=類型2=廠商;3=保留D4..0:接受方0=設(shè)備;1=接口2=端點(diǎn);3=其他4..31=保留1設(shè)備請(qǐng)求1數(shù)值USB設(shè)備請(qǐng)求2值2值根據(jù)不同的請(qǐng)求,以字節(jié)為單位來定義4索引2字段編號(hào)索引根據(jù)不同的請(qǐng)求,以字節(jié)為單位來定義6長(zhǎng)度2計(jì)數(shù)如果傳輸一組數(shù)據(jù),指出要傳輸?shù)淖止?jié)數(shù)2.4USB設(shè)備的描述符USB設(shè)備描述符是說明設(shè)備的通用信息,這包括對(duì)設(shè)備及所有設(shè)備設(shè)置全程起作用的信息。設(shè)備描述符一個(gè)USB總線設(shè)備只能有一個(gè)設(shè)備描述表。設(shè)備描述表的結(jié)構(gòu)如表2.2所示:表2.2設(shè)備描述符偏移值字段名稱字段大小字段取值說明0bLength1數(shù)字描述符的大小=12H1bDescriptorType1常數(shù)設(shè)備描述符類型=01H2bcdUSB2BCDUSB規(guī)劃發(fā)布號(hào)4bDeviceClass1類型類型代碼(由USB指定)5bDeviceSubClass1子類型子類型代碼(由USB分配)6bDeviceProtocol1協(xié)議協(xié)議代碼(由USB分配)7bMaxPacketSize01數(shù)字端點(diǎn)0最大分組大小(只有8,16,32或64有效)8idVendor2ID供應(yīng)商ID(由USB分配)10idProduct2ID產(chǎn)品ID(由廠商分配)12bcdDevice2BCD設(shè)備出廠編碼14iManufacture1索引廠商描述符字符串索引15iProduct1索引產(chǎn)品描述符字符串索引16iSerialNumber1索引設(shè)備序列號(hào)字符串索引17bNumConfiguations1數(shù)字可能的配置數(shù)2.4.2配置描述符配置描述符定義了設(shè)備的配置信息,結(jié)構(gòu)如表2.3所示。接口描述符接口描述符說明了接口所提供的配置,接口描述符的結(jié)構(gòu)如表2.4所示。表2.3配置描述符偏移值字段名稱字段大小字段取值說明0bLength1數(shù)字描述符的大小=09H1bDescriptorType1常數(shù)配置描述符類型=02H2wTotalLength2數(shù)字此設(shè)置信息的總長(zhǎng)(包括設(shè)置,接口,端點(diǎn)和設(shè)備類及廠商定義的描述表)4bNumInterfaces1數(shù)字此設(shè)置所支持的接口個(gè)數(shù)5bConfigurationValue1數(shù)字作為SetConfiguration的一個(gè)參數(shù)選擇配置值6iConfiguration1索引用于描述該配置字符串描述符的索引7bmttributes1位圖配置特性:D7:總線供電D6:自供電D5:遠(yuǎn)程喚醒D4…0;保留(復(fù)位為0)8MaxPower1mA在此設(shè)置下的總線電源耗費(fèi)量,以2mA為一個(gè)單位表2.4接口描述符偏移值字段名稱字段大小字段取值說明0bLength1數(shù)字描述符的大小=09H1bDescriptorType1常數(shù)接口描述符的類型=04H2bNumInterfaces1數(shù)字接口的編號(hào)3bAlternateSetting1數(shù)字用于為上一個(gè)字段選擇可供替換的設(shè)置4bNumEndpoint1數(shù)字使用的端點(diǎn)數(shù)目(端點(diǎn)0除外)5bInterfaceClass1類型類型代碼(由USB分配)6bInterfaceSubClass1子類型子類型代碼(由USB分配)7bInterfaceProtocal1協(xié)議協(xié)議代碼(由USB分配)8iInterface1索引字符串描述符的索引端點(diǎn)描述符端點(diǎn)描述符包括了端點(diǎn)的類型,大小等信息。USB設(shè)備中的每一個(gè)端點(diǎn)都有自己的描述符。端點(diǎn)描述符的結(jié)構(gòu)如表2.5所示。2.4.5字符串描述字符串描述是可選的。如果一個(gè)設(shè)備不支持字符串描述符,在設(shè)備,配置和接口描述符內(nèi)的所用字符串描述符的索引都必須為0。字符串描述符的結(jié)構(gòu)如表2.6所示。表2.5端點(diǎn)描述符偏移值字段名稱字段大小字段取值說明0bLength1數(shù)字描述符的大小=07H1bDescriptorType1常數(shù)接口描述符的類型=05H2bEndpointAddress1端點(diǎn)USB設(shè)備的端點(diǎn)地址:Bit0..3:端點(diǎn)號(hào)Bit4..6:保留,復(fù)位為0Bit7:方向,對(duì)于控制端點(diǎn)可以忽略0:OUT端點(diǎn);1:IN端點(diǎn)3bmAttributes1位圖端點(diǎn)屬性,當(dāng)進(jìn)行配置時(shí)采用以下的配置值Bit0..1傳輸類型控制同步批量中斷其他位保留4wMaxPacketSize2數(shù)字本端點(diǎn)接受或發(fā)送的最大信息包的大小6bInterval1數(shù)字輪詢數(shù)據(jù)傳傳送端點(diǎn)的時(shí)間間隔。表2.6字符串描述符偏移值字段名稱字段大小字段取值說明0bLength1數(shù)字描述符的大小1bDescriptorType1常數(shù)字符串描述符的類型2bStringN數(shù)字UNICODE編碼字符串各個(gè)描述符的樹狀結(jié)構(gòu)如圖2.2所示:圖2.2USB描述符層次結(jié)構(gòu)所有的USB設(shè)備都有缺省控制管道,缺省控制管道的最大包長(zhǎng)在描述表中得到了說明。設(shè)置描述表中包括設(shè)置與接口的定義,但其中不包括端點(diǎn)描述表。除了最大包長(zhǎng)度信息外,缺省管道的特性由USB規(guī)范定義,并且對(duì)所有的USB總線設(shè)備都一樣[4]。2.5總線協(xié)議USB總線屬一種輪訊方式的總線,主機(jī)控制端口初始化所有的數(shù)據(jù)傳輸。每一總線執(zhí)行動(dòng)作最多傳送三個(gè)數(shù)據(jù)包。按照傳輸前制定好的原則,在每次傳送開始時(shí),主機(jī)控制器發(fā)送一個(gè)描述傳輸運(yùn)作的種類、方向,USB設(shè)備地址和終端號(hào)的USB數(shù)據(jù)包,這個(gè)數(shù)據(jù)包通常稱為標(biāo)志包(tokenpacket)。USB設(shè)備從解碼后的數(shù)據(jù)包的適當(dāng)位置取出屬于自己的數(shù)據(jù)。數(shù)據(jù)傳輸方向不是從主機(jī)到設(shè)備就是從設(shè)備到主機(jī)。在傳輸開始時(shí),由標(biāo)志包來標(biāo)志數(shù)據(jù)的傳輸方向,然后發(fā)送端開始發(fā)送包含信息的數(shù)據(jù)包或表明沒有數(shù)據(jù)傳送。接收端也要相應(yīng)發(fā)送一個(gè)握手的數(shù)據(jù)包表明是否傳送成功。發(fā)送端和接收端之間的USB數(shù)據(jù)傳輸,在主機(jī)和設(shè)備的端口之間,可視為一個(gè)通道。存在兩種類型的通道:流和消息。流的數(shù)據(jù)不像消息的數(shù)據(jù),它沒有USB所定義的結(jié)構(gòu),而且通道與數(shù)據(jù)帶寬、傳送服務(wù)類型,端口特性(如方向和緩沖區(qū)大小)有關(guān)。多數(shù)通道在USB設(shè)備設(shè)置完成后即存在。USB中有一個(gè)特殊的通道——缺省控制通道,它屬于消息通道,當(dāng)設(shè)備一啟動(dòng)即存在,從而為設(shè)備的設(shè)置、查詢狀況和輸入控制信息提供一個(gè)入口。事務(wù)預(yù)處理允許對(duì)一些數(shù)據(jù)流的通道進(jìn)行控制,從而在硬件級(jí)上防止了對(duì)緩沖區(qū)的高估或低估,通過發(fā)送不確認(rèn)握手信號(hào)從而阻塞了數(shù)據(jù)的傳輸速度。當(dāng)不確認(rèn)信號(hào)發(fā)過后,若總線有空閑,數(shù)據(jù)傳輸將再做一次。這種流控制機(jī)制允許靈活的任務(wù)安排,可使不同性質(zhì)的流通道同時(shí)正常工作,這樣多種流通??稍诓煌g隔進(jìn)行工作,傳送不同大小的數(shù)據(jù)包[5]。2.6USB的枚舉過程USB設(shè)備接入計(jì)算機(jī)后,設(shè)備需要經(jīng)過初始化和枚舉才能被計(jì)算機(jī)識(shí)別,初始化主要有MCU完成,而枚舉是在計(jì)算機(jī)的控制下完成的。枚舉過程如下:1、設(shè)備連接。USB設(shè)備接入U(xiǎn)SB總線。2、設(shè)備上電。USB設(shè)備可以使用總線供電,也可以使用外部總線供電。3、主機(jī)檢測(cè)到設(shè)備,發(fā)出復(fù)位。設(shè)備連接到總線后,主機(jī)拉電阻檢測(cè)到有新的設(shè)備接入,然后向端口發(fā)送一個(gè)復(fù)位信號(hào)。4、設(shè)備默認(rèn)狀態(tài)。設(shè)備要從總線上接收到一個(gè)復(fù)位的信號(hào)后,才可以對(duì)總線的處理操作作出響應(yīng)。設(shè)備接收到復(fù)位信號(hào)后,使用默認(rèn)的地址(00H)來對(duì)其進(jìn)行尋址。5、地址分配。當(dāng)主機(jī)接收到有設(shè)備對(duì)默認(rèn)地址(00H)響應(yīng)的時(shí)候,就對(duì)設(shè)備分配一個(gè)空閑的地址。以后設(shè)備就只對(duì)該地址進(jìn)行響應(yīng)。6、讀取USB設(shè)備描述符。主機(jī)讀取USB設(shè)備描述符,確認(rèn)USB設(shè)備的屬性。7、設(shè)備配置。主機(jī)依照讀取的USB設(shè)備描述符來進(jìn)行配置,如果設(shè)備所需的USB資源得以滿足,就發(fā)送配置命令給USB設(shè)備,表示配置完成。8、掛起。為了節(jié)省電源,當(dāng)總線保持空閑狀態(tài)超過3ms以后,設(shè)備驅(qū)動(dòng)程序就會(huì)進(jìn)入掛起狀態(tài)。完成以上步驟后,USB設(shè)備即可以使用。在枚舉過程中,設(shè)備不一定要求進(jìn)入掛起狀態(tài)。2.7USB主機(jī)接口及系統(tǒng)的功能從具體的USB主機(jī)的實(shí)現(xiàn)角度上來講,在遵行USB協(xié)議1.0的基礎(chǔ)上,目前有2套工業(yè)標(biāo)準(zhǔn):1、通用式主機(jī)控制器接口(簡(jiǎn)寫成UHCI),由Inter公司提出。2、開放式主機(jī)控制器接口(簡(jiǎn)寫成OHCI或OpenHCI),由Compaq等公司提出。UHCI和OHCI實(shí)現(xiàn)USB主機(jī)的功能基本上是一樣的。只是具體的實(shí)現(xiàn)過程有些不同,兩者均由2部分組成,即主機(jī)控制器(HostControl,簡(jiǎn)寫成HC)和主機(jī)控制器驅(qū)動(dòng)(HostControlDriver,簡(jiǎn)寫成HCD)。主機(jī)控制器更多的是面向硬件部分及其廠商,怪頂了主機(jī)控制器硬件與PC系統(tǒng)內(nèi)存之間的接口、主機(jī)控制器在PCI總線上的接口定義、主機(jī)USB事務(wù)的各種功能模塊以及提供給用戶交互的各種寄存器定義等;主機(jī)控制器驅(qū)動(dòng)更多的是基于軟件層次的標(biāo)準(zhǔn),是USB協(xié)議棧與USB主機(jī)控制器硬件之間聯(lián)系的接口,直接負(fù)責(zé)主機(jī)控制器硬件的配置和管理,一般這部分軟件廠商提供。按照USB的規(guī)定以及USB系統(tǒng)的組成的需要,USB主機(jī)完成的主要功能包括以下幾個(gè)方面:1、檢測(cè)USB設(shè)備的連接和斷開。通過USB電纜信號(hào)線的電平變換來實(shí)現(xiàn)該功能,并得到主機(jī)控制器的處理。2、管理主機(jī)和設(shè)備之間標(biāo)準(zhǔn)的控制管道。以保證端點(diǎn)0和缺損管道的正常通信。3、收集設(shè)備的狀態(tài),統(tǒng)計(jì)總線的活動(dòng)。USB的總線上最多可以同時(shí)掛接127個(gè)設(shè)備,這么多的設(shè)備都要正常的工作,就是靠主機(jī)來進(jìn)行管理的,同時(shí)主機(jī)會(huì)根據(jù)收集到的各種設(shè)備和總線信息來執(zhí)行某些操作。4、控制和管理主機(jī)控制器與設(shè)備之間的電器接口,包括為端口提供一點(diǎn)數(shù)量的電流[1]。2.8本章小結(jié)在本章中,簡(jiǎn)要的介紹了相關(guān)的USB1.0協(xié)議內(nèi)容,根據(jù)本次課題設(shè)計(jì)的要求,重點(diǎn)介紹了USB體系,軟硬件組成、編碼方式與傳輸類型、總線協(xié)議以及主機(jī)系統(tǒng)功能等內(nèi)容。它們是開發(fā)USB設(shè)備,進(jìn)行通信的應(yīng)用的基礎(chǔ)。實(shí)際應(yīng)用中,這里的大部分工作由控制器完成。
第3章硬件特性及電路設(shè)計(jì)3.1單片機(jī)8051介紹本課題設(shè)計(jì)USB系統(tǒng)比較簡(jiǎn)單,單片機(jī)執(zhí)行的功能不多,在確保實(shí)驗(yàn)功能的情況下,為了降低成本,因此選用性價(jià)比高的8051單片機(jī)。MCS-51是Intel公司生產(chǎn)的一個(gè)單片機(jī)系列名稱。屬于這一系列的單片機(jī)有多種。8051便是其中一種性價(jià)比高的單片機(jī)。8051單片機(jī)內(nèi)部結(jié)構(gòu)按其功能部件劃分可以看出由8大部分組成的。這8大部分是:1、一個(gè)8位中央處理機(jī)CPU。2、128個(gè)字節(jié)的片內(nèi)數(shù)據(jù)存儲(chǔ)器RAM。3、4KB的片內(nèi)程序只讀存儲(chǔ)器ROM或EPROM。4、18個(gè)特殊功能寄存器SFR。5、4個(gè)8位并行輸入輸出I/O接口:P0口、P1口、P2口、P3口(共32線),用于并行輸入或輸出數(shù)據(jù)。6、1個(gè)串行I/O接口。7、2個(gè)16位定時(shí)器/計(jì)數(shù)器。8、1個(gè)具有5個(gè)中斷源,可編程為2個(gè)優(yōu)先級(jí)的中斷系統(tǒng)。它可以接收外部中斷申請(qǐng),定時(shí)器/計(jì)數(shù)器中斷申請(qǐng)和串行口中斷申請(qǐng)。本課題選用的8051單片機(jī)芯片為40個(gè)引腳,它是HMOS工藝制造的芯片,采用雙列直插(DIP)方式封裝。1、主電源引腳Vcc和VssVCC(40腳):接+5V電源正端;VSS(20腳):接+5V電源地端。2、外接晶體引腳XTAL1和XTAL2XTAL1(19腳):接外部石英晶體的一端。在單片機(jī)內(nèi)部,它是一個(gè)反相放大器的輸入端,這個(gè)放大器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外部時(shí)鐘時(shí),對(duì)于HMOS單片機(jī),該引腳接地;XTAL2(18腳):接外部晶體的另一端。在單片機(jī)內(nèi)部,接至片內(nèi)振蕩器的反相放大器的輸出端。當(dāng)采用外部時(shí)鐘時(shí),對(duì)于HMOS單片機(jī),該引腳作為外部振蕩信號(hào)的輸入端。3、控制信號(hào)或與其它電源復(fù)用引腳4、I/O口線引腳排列(1)P0口——8位、漏極開路的雙向I/O口。當(dāng)使用片外儲(chǔ)存器及外擴(kuò)I/O口時(shí),P0口做為低字節(jié)地址/數(shù)據(jù)復(fù)線。在編程時(shí),P0口可用于接收指令代碼字節(jié);在程序校檢時(shí),P0口可輸出指令字節(jié)(這是需要外加上拉電阻)。(2)P0口也可作為通用I/O使用,變成準(zhǔn)雙向口。當(dāng)作為普通輸入時(shí),應(yīng)將輸出鎖存器置1。P0口可驅(qū)動(dòng)8個(gè)TTL負(fù)載。P1口——8位、準(zhǔn)雙口I/O,具有內(nèi)部上拉電阻。P1口是為用戶準(zhǔn)備的I/O雙向口。在編程和校檢時(shí),可用做輸入低8位地址;用做輸入時(shí),應(yīng)先將輸出鎖存器置1;P1口可驅(qū)動(dòng)4個(gè)TTL負(fù)載。P1口的P1.0和P1.1具有替代功能。(3)P2口——8位、準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻。當(dāng)使用片外儲(chǔ)存器或外擴(kuò)I/O端口時(shí),P2口輸出高8位地址;在編程校檢時(shí),P2口可接收高字節(jié)地址和某些控制信號(hào);P2口也可作為I/O口使用。用做輸入時(shí),應(yīng)先將輸出鎖存器置1;P2口可驅(qū)動(dòng)4個(gè)TTL負(fù)載。(4)P3口——8位、準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻。P3口可作為普通I/O口。用作輸入時(shí),應(yīng)先將輸出鎖存器置1;在編程校檢時(shí),P3口接收某些控制信號(hào);可驅(qū)動(dòng)4個(gè)TTL。P3口還提供各種替代功能。整個(gè)PEROM陣列和三個(gè)鎖定位的電擦除可通過正確的控制信號(hào)組合,并保持ALE管腳處于低電平10ms來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲(chǔ)字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。此外,8051設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時(shí)器,計(jì)數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個(gè)硬件復(fù)位為止[6]。3.2PDIUSBD12器件與微控制器的連接PDIUSBD12功能描述PHILIPS公司推出的PDIUSBD12是一款性價(jià)比很高的USB器件。它通常用做微控制器系統(tǒng)中實(shí)現(xiàn)與微控制器進(jìn)行通信的高速通用并行接口,而且還支持本地的DMA傳輸。PDIUSBD12完全符合USB1.0協(xié)議規(guī)范。PDIUSBD12所具有的低掛起功耗連同LazyClock輸出可以滿足使用ACPI、OnNOW和USB電源管理的要求。低的操作功耗可以應(yīng)用于使用總線供電的外設(shè)。1、PHILIPS串行接口引擎PSIE實(shí)現(xiàn)了全部的USB協(xié)議層,且完全由硬件實(shí)現(xiàn)而不需要固件的參與。該模塊的功能包括:同步模式的識(shí)別,并行/串行的轉(zhuǎn)換,位填充/解除填充,CRC校驗(yàn)/產(chǎn)生,PID校驗(yàn)/產(chǎn)生,地址識(shí)別和握手評(píng)估/產(chǎn)生。2、SoftConnect技術(shù)SoftConnect與USB的連接是通過1.5kΩ上拉電阻將D+設(shè)置為高電平實(shí)現(xiàn)的。1.5kΩ上拉電阻集成在PDIUSBD12片內(nèi),默認(rèn)狀態(tài)下不與電源相連,其連接的建立是通過外部/系統(tǒng)微控制器發(fā)送命令實(shí)現(xiàn)的。3、GoodLink技術(shù)GoodLink技術(shù)可以提供良好的USB連接指示。在枚舉過程中,LED指示燈根據(jù)通信狀況間歇閃爍。配置完成并裝安驅(qū)動(dòng)程序后指示燈將一直亮[7]。PDIUSBD12管腳配置PDIUSBD12的管腳排列如圖3.1所示:圖3.1PDIUSBD12管腳排列圖單片機(jī)與PDIUSBD12的連接單片機(jī)與PDIUSBD12的連接如圖3.2所示:對(duì)上圖中的電路說明如下:1、電路中使用A0作為命令數(shù)據(jù)選擇位2、端點(diǎn)2使用批量傳輸(Bulk),所以DMACK_N和EOT_N接上拉電阻,否則,PDIUSBD12將不能接受任何數(shù)據(jù);3、單片機(jī)外接晶振,所以PDIUSBD12的CLKOUT腳空;4、從圖上可以看出,當(dāng)選擇命令時(shí),PDIUSBD12的地址為0xf1ff;當(dāng)選擇數(shù)據(jù)時(shí)PDIUSBD12的地址為0xf0ff;5、單片機(jī)使用P0口進(jìn)行輸入輸出,由于P0是開漏的,所以,需要接上拉電阻,在電路中使用排阻;6、GL_N通過一個(gè)電阻和LED串接到VCC,在USB設(shè)備枚舉期間,燈一直閃爍,當(dāng)USB設(shè)備枚舉成功后,燈會(huì)滅,安裝完驅(qū)動(dòng)程序后,燈一直亮著,傳送數(shù)據(jù)期間,燈會(huì)閃爍;圖3.2PDIUSBD12與單片機(jī)連接圖7、USB_D+,USB_D-線上的1M上拉電阻下拉電阻對(duì)實(shí)際沒有什么影響,它們主要在噪聲比較大的情況下,起到抗干擾的作用;8、采用總線供電,總開關(guān)S1負(fù)責(zé)電源的連接與斷開,LED指示整個(gè)電路是否有電。在這種方式下,確保電路的正確連接很重要,否則,容易損壞計(jì)算機(jī)[4]。在使用的同時(shí),應(yīng)注意一個(gè)問題。由于PHILIPS公司生產(chǎn)的PDIUSBD12芯片自身存在一個(gè)小小的問題,即當(dāng)片選沒有選中時(shí)它的第14角仍然會(huì)輸出低電平的中斷信號(hào),由于它接單片機(jī)的P3.3,所以與矩陣鍵盤共用的P3.3口有沖突,使用PDIUSBD12芯片時(shí)請(qǐng)將該芯片左邊的INT1兩線柱短接。在不使用該芯片時(shí)不用接。3.3系統(tǒng)硬件設(shè)計(jì)單片機(jī)電路設(shè)計(jì)單片機(jī)最小系統(tǒng)主要包括其供電系統(tǒng),時(shí)鐘電路和復(fù)位電路。本次單片機(jī)的系統(tǒng)供電電路和時(shí)鐘電路都做了簡(jiǎn)化處理,單片機(jī)的系統(tǒng)復(fù)位電路采用手動(dòng)復(fù)位。單片機(jī)電路如圖3.4所示。對(duì)電路說明如下:1、單片機(jī)采用外接晶振的方法,是外接晶振,頻率為11.0592MHz;2、復(fù)位電路采用按鍵復(fù)位;3、PDIUSBD12使用單片機(jī)的外部中斷0。在程序里將單片機(jī)和PDIUSBD12設(shè)置為相同的中斷方式,即電平中斷。然后由PDIUSBD12自動(dòng)清除中斷腳上的低電平,以便接受下次中斷[8]。外圍電路設(shè)計(jì)本次課題的外圍硬硬件系統(tǒng)資源包括:串口通信、6位動(dòng)態(tài)數(shù)碼顯示、8位流水燈、蜂鳴器、4*4矩陣鍵盤、溫度傳感器、液晶顯示器接口、PDIUSBD12芯片接口等。每個(gè)元件與單片機(jī)都有單獨(dú)的電路連接,他們均以單片機(jī)為控制核心。使單片機(jī)能獨(dú)立的控制每個(gè)元件的正常工作。再通過PDIUSBD12芯片,USB接口,上位機(jī)能與單片機(jī)實(shí)現(xiàn)通信,上位機(jī)發(fā)送信息到單片機(jī),單片機(jī)根據(jù)上位機(jī)信息控制外圍電路的工作;外圍設(shè)備發(fā)送信息到單片機(jī),單片機(jī)反饋到上位機(jī),在上位機(jī)的控制界面上顯示狀態(tài)信息。其整體框圖如圖3.5所示。根據(jù)整體框圖,將每個(gè)分塊電路設(shè)計(jì)成整體電路原理圖,生成PCB圖(見附錄)。整個(gè)電路圖的設(shè)計(jì)是在Protel99的軟件環(huán)境下完成的。圖3.4單片機(jī)電路上位機(jī)USB接口上位機(jī)USB接口PDIUSBD128051單片機(jī)4*4矩陣鍵盤串口通信蜂鳴器8位流水燈液晶顯示器6位動(dòng)態(tài)數(shù)碼顯示溫度傳感器圖3.5整體框圖3.4本章小結(jié)本章介紹了單片機(jī),PDIUSBD12芯片的基礎(chǔ)知識(shí),根據(jù)課題需求,重點(diǎn)討論了PDIUSBD12芯片在批量傳輸時(shí)與單片機(jī)的接法。外圍硬件資源根據(jù)框圖設(shè)計(jì)出實(shí)驗(yàn)電路圖,這些電路是做出單片機(jī)實(shí)驗(yàn)板,上位機(jī)軟件能夠正確運(yùn)行的基礎(chǔ)。
第4章程序設(shè)計(jì)及調(diào)試4.1概述集成開發(fā)環(huán)境Keil簡(jiǎn)介單片機(jī)開發(fā)中出必要的硬件外,同樣離不開軟件,我們寫的匯編語(yǔ)言源程序要邊成CPU可以執(zhí)行的機(jī)器碼有兩種方法,一中是手工匯編,另一種是機(jī)器匯編,目前已經(jīng)極少使用匯編的方法了。機(jī)器匯編是通過匯編軟件將源程序變成機(jī)器碼,用于MCS-51單片機(jī)的匯編軟件有早期的A51,隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,從普通使用匯編語(yǔ)言到逐漸使用高級(jí)語(yǔ)言開發(fā),單片機(jī)的開發(fā)軟件也不斷發(fā)展,Keil軟件是目前最流行開發(fā)MCS-51系列單片機(jī)的軟件,這從近年來個(gè)仿真機(jī)廠商紛紛宣布全面支持Keil即可看出。KeilC51是美國(guó)KeilSoftware公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過匯編語(yǔ)言后再使用C來開發(fā),體會(huì)更加深刻。
KeilC51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,同過一個(gè)集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到KeilC51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)[9]。程序概述軟件程序是固件編程。固件是FIREWARE的對(duì)應(yīng)中文詞,它實(shí)際上是單片機(jī)的程序文件,其編寫語(yǔ)言可以采用C語(yǔ)言或是匯編語(yǔ)言.它的操作方式與硬件聯(lián)系緊密,包括USB設(shè)備的連接USB協(xié)議、中斷處理等,它不是單純的軟件,而是軟件和硬件的結(jié)合,開發(fā)者需要對(duì)端口、中斷和硬件結(jié)構(gòu)非常熟悉。固件程序一般放入MCU中,當(dāng)把設(shè)備連接到主機(jī)上(USB連接線插入插孔)時(shí),上位機(jī)可以發(fā)現(xiàn)新設(shè)備,然后建立連接。因此,編寫固件程序的一個(gè)最主要的目的就時(shí)讓W(xué)indows可以檢測(cè)和識(shí)別設(shè)備。在設(shè)計(jì)USB系統(tǒng)的過程中,固件程序的編寫是非常重要的一個(gè)環(huán)節(jié),它直接影響到開發(fā)產(chǎn)品的數(shù)據(jù)傳輸速度。固件設(shè)計(jì)的目標(biāo)就是使PDIUSBD12在USB上達(dá)到最大的傳輸速率。PDIUSBD12設(shè)計(jì)成完全的中斷驅(qū)動(dòng)。當(dāng)CPU處理前臺(tái)任務(wù)時(shí),USB的傳輸可以在后臺(tái)進(jìn)行,這樣就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時(shí)簡(jiǎn)化了編程和調(diào)試。后臺(tái)ISR(中斷服務(wù)程序)和前臺(tái)主程序的循環(huán)之間的數(shù)據(jù)交換可以通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實(shí)現(xiàn),其原理如圖所示:圖4.1前后臺(tái)工作原理對(duì)于這種結(jié)構(gòu),主循環(huán)不關(guān)心數(shù)據(jù)是來自USB,串口還是并口,其只檢查循環(huán)緩沖區(qū)內(nèi)需要處理的數(shù)據(jù)。這樣,主循環(huán)可以專注于數(shù)據(jù)的處理,而ISR能夠以最大的可能的速率進(jìn)行數(shù)據(jù)的傳輸[10]。固件程序采用51單片機(jī)的C語(yǔ)言進(jìn)行編寫,采用Keil開發(fā)環(huán)境。它的積木結(jié)構(gòu)如圖所示,圖中的箭頭表示數(shù)據(jù)的傳輸方向。圖4.2固件結(jié)構(gòu)和數(shù)據(jù)流方向硬件提取層:對(duì)單片機(jī)的I/O口,數(shù)據(jù)總線等硬件接口進(jìn)行操作。命令接口層:對(duì)PDIUSBD12器件進(jìn)行操作的模塊子程序集。中斷服務(wù)程序:當(dāng)PDIUSBD12向單片機(jī)發(fā)出中斷請(qǐng)求時(shí),讀取PDIUSBD12的中斷傳輸來的數(shù)據(jù),并設(shè)定時(shí)間標(biāo)志“EPPFLAGS”和Setup包數(shù)據(jù)緩沖區(qū)“CONROL_XFER”進(jìn)行通信。標(biāo)準(zhǔn)請(qǐng)求處理程序:對(duì)USB的標(biāo)準(zhǔn)請(qǐng)求進(jìn)行處理。廠商請(qǐng)求處理:對(duì)用戶添加的廠商請(qǐng)求進(jìn)行處理,這一部分可選。主循環(huán)程序:發(fā)送USB請(qǐng)求,處理USB總線事件和用戶功能處理等。固件程序的主要部分是前臺(tái)的主循環(huán)(main.c)和后臺(tái)的中斷服務(wù)程序ISR,固件程序定義了兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu):事件標(biāo)志(EPPFLAGS)和數(shù)據(jù)緩沖區(qū)(CONTROL_XFER),它們是主循環(huán)和中斷服務(wù)例程之間的橋梁,兩者之間的數(shù)據(jù)交換通過它們來實(shí)現(xiàn)。其任務(wù)分配為:ISR負(fù)責(zé)全部與PDIUSBD12的接口操作并更新這兩個(gè)數(shù)據(jù)結(jié)構(gòu),如從PDIUSBD12收發(fā)數(shù)據(jù),設(shè)置事件標(biāo)志等;主循環(huán)負(fù)責(zé)初始化,處理位于數(shù)據(jù)緩沖區(qū)的數(shù)據(jù),清除時(shí)間標(biāo)志以及其他總線事務(wù),如掛起、復(fù)位等。1、USB事件標(biāo)志結(jié)構(gòu)體USB事件標(biāo)志結(jié)構(gòu)體,用符號(hào)定義了USB傳送過程中事件標(biāo)志位,并賦予初值,事件標(biāo)志在運(yùn)行中隨狀態(tài)的改變而改變,下面是事件標(biāo)志:typedefunion_epp_flags{struct_flags{ unsignedcharbus_reset:1; //總線復(fù)位標(biāo)志 unsignedcharsuspend:1; //掛起改變標(biāo)志 unsignedcharsetup_packet :1;//收到SETUP包 unsignedcharremote_wakeup :1; //遠(yuǎn)程喚醒標(biāo)志(未使用) unsignedcharin_isr :1; //USB中斷服務(wù)標(biāo)志 unsignedcharcontrol_state :2; //控制端點(diǎn)處理標(biāo)志 //0:IDLE 空閑狀態(tài) //1:TRANSMIT數(shù)據(jù)發(fā)送狀態(tài) //2:RECEIVE數(shù)據(jù)接收狀態(tài)unsignedcharconfiguration :1;//配置標(biāo)志(0:未配置;1:已經(jīng)配置)unsignedcharcommand :1; //未使用unsignedcharep1_rxdone :1; //端點(diǎn)1收到數(shù)據(jù)標(biāo)志unsignedcharep2_rxdone :1; //端點(diǎn)2收到數(shù)據(jù)標(biāo)志unsignedcharep2buf_full :1; //端點(diǎn)2接收雙緩沖區(qū)滿標(biāo)志 }bits; unsignedshortvalue;}EPPFLAGS;2、USB設(shè)備請(qǐng)求結(jié)構(gòu)體USB設(shè)備請(qǐng)求結(jié)構(gòu)體定義如下:typedefstruct_device_request{ unsignedcharbmRequestType;//請(qǐng)求類型 unsignedcharbRequest;//USB請(qǐng)求 unsignedshortwValue;//USB數(shù)值 unsignedshortwIndex;//USB請(qǐng)求索引 unsignedshortwLength;//長(zhǎng)度}DEVICE_REQUEST;3、Setup包數(shù)據(jù)緩沖區(qū)Setup包數(shù)據(jù)緩沖區(qū)“CONROL_XFER”定義如下:typedefstruct_control_xfer{DEVICE_REQUESTDeviceRequest;//USB設(shè)備請(qǐng)求結(jié)構(gòu)體,8個(gè)字節(jié)unsignedshortwLength;//傳輸數(shù)據(jù)的總字節(jié)數(shù)unsignedshortwCount;//傳輸字節(jié)數(shù)統(tǒng)計(jì)unsignedchar*pData;//傳輸數(shù)據(jù)的指針unsignedchardataBuffer[MAX_CONTROLDATA_SIZE];//請(qǐng)求的數(shù)據(jù)}CONTROL_XFER;4、全局變量結(jié)構(gòu)體在程序中定義了兩個(gè)全局變量的結(jié)構(gòu)體來進(jìn)行前后臺(tái)數(shù)據(jù)交流,定義如下:EPPFLAGSbEPPflags;CONTROL_XFERControlData;其中,bEPPflags用來標(biāo)記前后臺(tái)之間的工作狀態(tài),ControlData用來保存Setup包請(qǐng)求的類型和請(qǐng)求的數(shù)據(jù)[11]。4.2固件程序固件程序組成USB固件程序程序由三部分組成:(1)初始化單片機(jī)和所有的外圍電路(包括PDIUSBD12);(2)主循環(huán)部分,其任務(wù)是可以中斷的;(3)中斷服務(wù)程序,其任務(wù)是對(duì)時(shí)間敏感的,必須馬上執(zhí)行。根據(jù)USB協(xié)議,任何傳輸都是由主機(jī)(Host)開始的。單片機(jī)作它的前臺(tái)工作,等待中斷。主機(jī)首先要發(fā)令牌包給USB設(shè)備(這里是PDIUSBD12),PDIUSBD12接收到令牌包后就給單片機(jī)發(fā)中斷。單片機(jī)進(jìn)入中斷服務(wù)程序,首先讀PDIUSBD12的中斷寄存器,判斷USB令牌包的類型,然后執(zhí)行相應(yīng)的操作。在USB單片機(jī)程序中,要完成對(duì)各種令牌包的響應(yīng),其中比較難處理的是SETUP包,主要是端口0的編程。單片機(jī)與PDIUSBD12的通信主要是靠單片機(jī)給PDIUSBD12發(fā)命令和數(shù)據(jù)來實(shí)現(xiàn)的。PDIUSBD12的命令字分為三種:初始化命令字、數(shù)據(jù)流命令字和通用命令字。PDIUSBD12數(shù)據(jù)手冊(cè)給出了各種命令的代碼和地址。單片機(jī)先給PDIUSBD12的命令地址發(fā)命令,根據(jù)不同命令的要求再發(fā)送或讀出不同的數(shù)據(jù)。因此,可以將每種命令做成函數(shù),用函數(shù)實(shí)現(xiàn)各個(gè)命令,以后直接調(diào)用函數(shù)即可[10]。PDIUSBD12的底層操作PDIUSBDI2最底層操作程序,執(zhí)行51單片機(jī)對(duì)PDIUSBDI2硬件與I/0相關(guān)的訪問。程序?qū)?yīng)于圖3.5的電路原理圖。主要子程序如下://PDIUSBD12命令與數(shù)據(jù)地址#define D12_DATA 0xf0ff //D12數(shù)據(jù)地址#define D12_COMMAND 0xf1ff //D12命令地址//PDIUSBD12與51的接口控制線sbitMCU_D12CS =P2^1; //D12片選引腳sbitMCU_D12SUSPD=P1^0; //D12掛起//51對(duì)PDIUSBD12的寫操作voidoutportb(INT16UAddr,INT8UData){ *((INT8Uxdata*)Addr)=Data;}//51對(duì)PDIUSBD12的讀操作unsignedcharinportb(INT16UAddr){ return*((INT8Uxdata*)Addr);}PDIUSBDI2命令接口程序PDIUSBDI2的數(shù)據(jù)地址為0xf0ff,命令地址為0xf1ff,在PDIUSBDI2命令接口D12C1.c程序中,主要編寫了以下功能函數(shù):voidD12_SetAddressEnable(unsignedcharbAddress,unsignedcharbEnable);voidD12_SetEndpointEnable(unsignedcharbEnable);voidD12_SetMode(unsignedcharbConfig,unsignedcharbClkDiv);unsignedshortD12_ReadInterruptRegister(void);unsignedcharD12_SelectEndpoint(unsignedcharbEndp);unsignedcharD12_ReadLastTransactionStatus(unsignedcharbEndp);unsignedcharD12_ReadEndpointStatus(unsignedcharbEndp);voidD12_SetEndpointStatus(unsignedcharbEndp,unsignedcharbStalled);unsignedcharD12_ReadEndpoint(unsignedcharendp,unsignedcharlen,unsignedchar*buf);unsignedcharD12_WriteEndpoint(unsignedcharendp,unsignedcharlen,unsignedchar*buf);voidD12_AcknowledgeEndpoint(unsignedcharendp);voidD12_ClearBuff(unsignedcharendp);PDIUSBDI2的中斷服務(wù)程序中斷服務(wù)程序代碼處理由PDIUSBD12產(chǎn)生的中斷,它將數(shù)據(jù)從PDIUSBD12的內(nèi)FIFO取回到CPU存儲(chǔ)器,并建立正確的事件標(biāo)志,以通知相應(yīng)的子程序進(jìn)行處理。下面為中斷服務(wù)程序:voidUsb_Exception(void)interrupt0{unsignedshorti_st;DISABLE(); //進(jìn)入D12中斷服務(wù)程序時(shí)關(guān)中斷i_st=D12_ReadInterruptRegister();//讀取PDIUSBD12中斷寄存器值if(i_st!=0){if(i_st&D12_INT_BUSRESET)if(i_st&D12_INT_EOT)dma_eot(); //DMA傳輸技術(shù)處理if(i_st&D12_INT_SUSPENDCHANGE)if(i_st&D12_INT_ENDP0IN)ep0_txdone(); //控制端點(diǎn)發(fā)送數(shù)據(jù)處理if(i_st&D12_INT_ENDP0OUT)ep0_rxdone(); //控制端點(diǎn)接收數(shù)據(jù)處理if(i_st&D12_INT_ENDP1IN)ep1_txdone(); //端點(diǎn)1發(fā)送數(shù)據(jù)處理if(i_st&D12_INT_ENDP1OUT)ep1_rxdone(); //端點(diǎn)1接收數(shù)據(jù)處理if(i_st&D12_INT_ENDP2IN)ep2_txdone(); //端點(diǎn)2發(fā)送數(shù)據(jù)處理if(i_st&D12_INT_ENDP2OUT)ep2_rxdone(); //端點(diǎn)2接收數(shù)據(jù)處理}ENABLE(); //退出D12中斷服務(wù)程序時(shí)開中斷}1、控制端點(diǎn)處理控制傳輸總是在SETUP階段開始,之后為可選的DATA階段,然后在STATUS階段結(jié)束。固件使用這3個(gè)狀態(tài)來正確處理控制傳輸。2、普通端點(diǎn)處理對(duì)于普通輸出端點(diǎn)配置為從主機(jī)接收數(shù)據(jù)包。當(dāng)MCU從主機(jī)接收輸出中斷標(biāo)志(通過讀中斷寄存器識(shí)別)時(shí),PDIUSBD12中斷位清零。選擇端點(diǎn)將清零緩沖區(qū),接下來MCU需要確認(rèn)數(shù)據(jù)的長(zhǎng)度并把數(shù)據(jù)讀出,然后進(jìn)入數(shù)據(jù)處理子程序。
對(duì)于普通輸入端點(diǎn)的中斷,只要讀取端點(diǎn)號(hào)的最后處理狀態(tài)寄存器來清除中斷寄存器的相應(yīng)位,并把狀態(tài)清零即可。輸入端點(diǎn)中斷是在發(fā)送完數(shù)據(jù)后才產(chǎn)生的,當(dāng)還有數(shù)據(jù)要發(fā)送時(shí),可以在中斷程序程序里接著繼續(xù)發(fā)送。3、總線復(fù)位和掛起改變總線復(fù)位和掛起并不要求在ISR中進(jìn)行特殊的處理,所以這里直接退出程序即可。4、標(biāo)準(zhǔn)設(shè)備請(qǐng)求處理——D12SETUP.C(1)獲取狀態(tài)GETSTATUS(00H)GETSTATUS請(qǐng)求要求接收方返回一個(gè)相應(yīng)的狀態(tài),設(shè)備返回16位的狀態(tài)描述。當(dāng)GETSTATUS的索引為設(shè)備時(shí),主機(jī)獲取設(shè)備的狀態(tài)。如果請(qǐng)求是對(duì)器件,MCU必須向主機(jī)返回器件狀態(tài)。因?yàn)榻涌跔顟B(tài)的16位字節(jié)全部保留,所以接口請(qǐng)求返回0x0000即可。一個(gè)端點(diǎn)有輸入和輸出兩個(gè)端點(diǎn)號(hào)。這里使用了索引BIT7來標(biāo)識(shí)要求返回的端點(diǎn)的方向,BIT7=1為返回輸入端點(diǎn)的狀態(tài);BIT7=0為返回輸出端點(diǎn)的狀態(tài)。采購(gòu)之家www-buyer(2)清除特性CLEARFEATURE(01H)CLEARFEATURE用來清除或禁止設(shè)備的一個(gè)特定的特性。當(dāng)接收到CLEARFEATURE的請(qǐng)求后,設(shè)備就執(zhí)行相應(yīng)的操作,并返回一個(gè)空的數(shù)據(jù)表示執(zhí)行完畢。(3)設(shè)置特性SETFEATURE(03H)SETFEATURE用來設(shè)置或允許一個(gè)特性。SETFEATURE和CLEARFEATURE是兩個(gè)相反的動(dòng)作。同樣,當(dāng)接收到SETFEATURE的請(qǐng)求后,設(shè)備就執(zhí)行相應(yīng)的操作,并返回一個(gè)空的數(shù)據(jù)表示執(zhí)行完畢。圖4.3為SETFEATURE的工作流程圖。(4)設(shè)置地址SETADDRESS(05H)在USB設(shè)備枚舉的時(shí)候,主機(jī)會(huì)分配一個(gè)新的地址給設(shè)備,以取代默認(rèn)地址(默認(rèn)地址為0)。當(dāng)設(shè)備接收到這一設(shè)備請(qǐng)求的時(shí)候,要做的事情就是把設(shè)備的當(dāng)前地址改為分配的地址,以讓設(shè)備對(duì)新的地址作出響應(yīng)。注意此設(shè)置地址請(qǐng)求不含數(shù)據(jù)階段,MCU需要向主機(jī)寫一個(gè)零長(zhǎng)度的數(shù)據(jù)包作為應(yīng)答階段。圖4.4為SETADDRESS的工作流程圖(5)獲取描述符GETDESCRIPTOR(06H)GETDESCRIPTOR是主機(jī)用來獲取USB設(shè)備相對(duì)應(yīng)的描述符的一個(gè)請(qǐng)求。在這里,設(shè)備請(qǐng)求值的高8位為要求獲取的描述符的類型,設(shè)備按照請(qǐng)求類型返回相應(yīng)的描述符。
圖4.3SETFEATURE的工作流程圖
圖4.4SETADDRESS的工作流程圖(6)獲取配置信息GETCONFIGURATION(08H)GETCONFIGURATION用于獲取當(dāng)前的配置信息。如果設(shè)備已經(jīng)配置,則返回信息為當(dāng)前的配置值(一個(gè)字節(jié));否則返回為0,表示還沒有配置。圖4.5為GETCONFIGURATION的工作流程圖。
圖4.5GETCONFIGURATION的工作流程圖
圖4.6SETCONFIGURATION的工作流程圖(7)設(shè)置配置SETCONFIGURATION(09H)SETCONFIGURATION是用來選擇設(shè)備中的工作配置。SETCONFIGURATION中的值只能是0或與配置描述符中bConfigurationValue相同的值。一旦SETCONFIGURATION有效,MCU還需要向主機(jī)發(fā)送零數(shù)據(jù)包作為應(yīng)答階段。圖4.6為SETCONFIGURATION的工作流程圖。(8)獲取接口信息GETINTERFACE(0AH)GETINTERFACE用于返回當(dāng)前的接口號(hào)。返回信息為一個(gè)字節(jié)。(9)設(shè)置接口SETINTERFACE(0BH)SETINTERFACE用于設(shè)備支持多接口的時(shí)候,主機(jī)用來選擇一個(gè)接口。如果選擇正確,設(shè)備發(fā)送一個(gè)空的數(shù)據(jù)表示執(zhí)行完畢[10]。主程序主程序主要完成兩部分的工作,對(duì)USB設(shè)備的初始化,枚舉。主循環(huán)檢查事件標(biāo)志并進(jìn)入子程序進(jìn)行進(jìn)一步的處理。MCU一旦上電就需要初始化其所有端口、存儲(chǔ)區(qū)、定時(shí)器和中斷服務(wù)程序。之后MCU將重新連接USB,包括將Soft_Connect寄存器設(shè)置為ON,因?yàn)檫@些過程確保了MCU準(zhǔn)備好服務(wù)D12之前D12不會(huì)進(jìn)行操作,所以是很重要的[13]。1、USB設(shè)備的初始化及枚舉過程(1)初始化:Init_D12Port(); //初始化,主要是片選Rst_D12();//復(fù)位,suspend=1D12_SetAddressEnable(0x80,0x01); //設(shè)置地址使能D12_SetEndpointEnable(0x01); //設(shè)置端點(diǎn)使能,LED亮reconnect_USB();//此時(shí)LED滅,斷開連接,延時(shí)再連接(2)枚舉do{usbserve(); //處理USB事件單片機(jī)不斷的接受中斷,處理中斷,判斷標(biāo)志位,當(dāng)配置完成,即USB設(shè)備可以使用時(shí)。2、單片機(jī)功能實(shí)現(xiàn)及與上位機(jī)的通信單片機(jī)的外圍有多種功能,選擇矩陣鍵盤數(shù)碼管顯示作為說明對(duì)象。實(shí)驗(yàn)板上,矩陣鍵盤有16個(gè)按鍵,將16個(gè)按鍵定義為16個(gè)數(shù),由電路圖可知,矩陣鍵盤與數(shù)碼管相連。實(shí)驗(yàn)板把對(duì)數(shù)碼管顯示的控制,鍵盤對(duì)應(yīng)的數(shù)碼管編碼設(shè)置好,數(shù)碼管顯示是根據(jù)十六進(jìn)制顯示數(shù)。當(dāng)未與上位機(jī)通信時(shí)候,單片機(jī)能獨(dú)立控制矩陣鍵盤的數(shù)碼管顯示。當(dāng)按下1號(hào)鍵,數(shù)碼管顯示1;按下2號(hào)鍵,數(shù)碼管顯示2……按下16號(hào)鍵,數(shù)碼管顯示F[12]。當(dāng)通過USB連接到上位機(jī)時(shí),用鼠標(biāo)點(diǎn)擊上位機(jī)控制界面矩陣鍵盤中的按鈕,在USB實(shí)驗(yàn)板數(shù)碼管上會(huì)有相應(yīng)的十六進(jìn)制數(shù)顯示。如點(diǎn)sw0時(shí)數(shù)碼管會(huì)顯示0,點(diǎn)sw15數(shù)碼管會(huì)顯示F。程序如下:#include<reg51.h>sbitbeep=P2^3;sbitdula=P2^6;sbitwela=P2^7;unsignedchari=100;unsignedcharj,k,temp,key;voiddelay(unsignedchari){for(j=i;j>0;j--)for(k=125;k>0;k--);}unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};display(unsignedcharnum){P0=table[num];dula=1;dula=0;P0=0xc0;wela=1;wela=0;}voidmain(void)//端點(diǎn)1輸出 {//控制LED/數(shù)碼管/ /* GenEpBuf[0]操作對(duì)象 1 LED 2 鍵盤顯示 3 鋒鳴器 */ DISABLE; ENABLE; if(GenEpBuf[0]==2){ if(GenEpBuf[1]==0)display(0); if(GenEpBuf[1]==1)display(1); if(GenEpBuf[1]==2)display(2); if(GenEpBuf[1]==3)display(3);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版船舶抵押擔(dān)保法律意見合同3篇
- 數(shù)據(jù)庫(kù)原理及應(yīng)用課程設(shè)計(jì)報(bào)告模板(知識(shí)研究)
- 轉(zhuǎn)向燈課程設(shè)計(jì)
- 課程設(shè)計(jì)圖形
- 追兔問題課程設(shè)計(jì)
- 瑜伽館黑板課程設(shè)計(jì)
- 二零二五年度廢舊塑料瓶回收利用承包合同3篇
- 2025版借車保險(xiǎn)理賠服務(wù)合同3篇
- 踢毽子游戲課程設(shè)計(jì)
- 管理制度的建立及執(zhí)行情況的匯(3篇)
- 河南省鄭州市2023-2024學(xué)年高一下學(xué)期6月期末考試化學(xué)試題
- 2024中國(guó)保險(xiǎn)發(fā)展報(bào)告-中南大風(fēng)險(xiǎn)管理研究中心.燕道數(shù)科
- JT-T 722-2023 公路橋梁鋼結(jié)構(gòu)防腐涂裝技術(shù)條件
- 新概念英語(yǔ)第二冊(cè)考評(píng)試卷含答案(第89-96課)
- 砂石代加工投標(biāo)方案(技術(shù)方案)
- 危險(xiǎn)化學(xué)品考試試題(含答案)
- 園林綠化工程分部(子分部)工程、分項(xiàng)工程劃分
- 物業(yè)市場(chǎng)拓展部工作總結(jié)
- 馬克思主義基本原理-2023版-課后習(xí)題答案
- 基坑支護(hù)工程質(zhì)量控制要點(diǎn)
- 2024年度公司大事記
評(píng)論
0/150
提交評(píng)論