USB接口在單片機(jī)通信中的設(shè)計(jì)應(yīng)用完整論文_第1頁
USB接口在單片機(jī)通信中的設(shè)計(jì)應(yīng)用完整論文_第2頁
USB接口在單片機(jī)通信中的設(shè)計(jì)應(yīng)用完整論文_第3頁
USB接口在單片機(jī)通信中的設(shè)計(jì)應(yīng)用完整論文_第4頁
USB接口在單片機(jī)通信中的設(shè)計(jì)應(yīng)用完整論文_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

[摘要]51系列芯片的串口通信速率較低,會(huì)在其串口通信中形成一個(gè)速度瓶頸。通用串行總線(USB)作為一種新的微機(jī)總線接口規(guī)范,具有便捷、易擴(kuò)展、低成本、低干擾等特點(diǎn),非常適合作為主機(jī)和外設(shè)之間的通信接口。本文介紹了一種比較簡(jiǎn)單方便設(shè)計(jì)USB設(shè)備的方法,設(shè)計(jì)采用51單片機(jī)和USB接口芯片組成的單片機(jī)最小系統(tǒng)來實(shí)現(xiàn)一個(gè)完整的USB設(shè)備,大大提高了通信速率。在設(shè)計(jì)中,采用的控制器是51單片機(jī)AT89S52,USB電氣接口則是PHILIPS公司的USB接口芯片PDIUSBD12。單片機(jī)控制器作為下位機(jī),通過USB電氣接口芯片和USB總線與PC機(jī)交換數(shù)據(jù),并實(shí)現(xiàn)USB設(shè)備的邏輯功能。系統(tǒng)開發(fā)的最終硬件成果是一個(gè)帶有USB接口的設(shè)備,通過USB電纜與PC機(jī)相連接,能夠?qū)崿F(xiàn)主機(jī)對(duì)設(shè)備的列舉,以及和PC機(jī)交換數(shù)據(jù),并實(shí)現(xiàn)其擴(kuò)展功能。[關(guān)鍵詞]USB;單片機(jī)系統(tǒng);PDIUSBD12;AT89S52;接口技術(shù)USBinterfaceinthedesignofcommunication[Abstract]Thecommunicationrateoftheseries51chipisloweranditformsatarebottleneckinserialcommunication.ThispaperintroducedasimpleandconvenientmethodtodesignaUSBapparatus,thatistosay,torealizeanintactUSBapparatuswithaminimumsystemofsingle-chipcomputerthatmadeof51single-chipcomputerandUSBinterface,thecircuitgreatlyimprovescommunicationrate.Inthissystem,Iadopted51one-chipcomputersAT89S52asitscontroller,thechipPDIUSBD12ofPHILIPSCompanyasitselectricinterface.Theone-chipcomputerasthenextmachine,exchangesthedatawiththePC,throughtheUSBbusandUSBelectricinterfacechip,anditrealizesthelogicfunctionofUSBapparatus.ItcanexchangedatawithPC,andrealizeitsexpandingfunction,throughconnectingwithPC.[Keywords]single-chipcomputersystem;interfacetechnology;PDIUSBD12;AT89S52;USB目錄TOC\o"1-4"\u0引言10.1選題現(xiàn)狀、研究意義以及發(fā)展趨勢(shì)10.2系統(tǒng)實(shí)現(xiàn)功能21USB技術(shù)41.1USB總線概述41.1.1USB總線簡(jiǎn)介41.2.2USB總線的優(yōu)點(diǎn)41.2USB協(xié)議簡(jiǎn)介51.2.1USB物理體系結(jié)構(gòu)51.2.2USB設(shè)備邏輯結(jié)構(gòu)61.2.3USB傳輸類型81.2.4USB低層通信協(xié)議81.3USB接口技術(shù)102系統(tǒng)硬件電路設(shè)計(jì)112.1設(shè)備電路系統(tǒng)概述112.251系列單片機(jī)最小系統(tǒng)112.2.1AT89S52單片機(jī)的介紹和選用112.2.2AT89S52與PDIUSBD12構(gòu)建的最小系統(tǒng)152.2.3AT89S52和外圍器件162.3PDIUSBD12外圍電路及其與單片機(jī)的連接設(shè)計(jì)172.3.1PDIUSBD12介紹172.3.2USB外圍電路及其與單片機(jī)連接212.4擴(kuò)展功能電路的設(shè)計(jì)222.4.1PS/2串行接口的擴(kuò)展設(shè)計(jì)232.4.2Flash存儲(chǔ)器的擴(kuò)展設(shè)計(jì)232.4.3LPT并行接口的擴(kuò)展設(shè)計(jì)253系統(tǒng)軟件設(shè)計(jì)273.1固件程序的設(shè)計(jì)與實(shí)現(xiàn)273.1.1描述符273.1.2固件程序的結(jié)構(gòu)293.2驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)323.2.1驅(qū)動(dòng)程序概述323.2.2WDM設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)333.2.3驅(qū)動(dòng)程序開發(fā)的工具軟件333.2.4用WinDriver開發(fā)驅(qū)動(dòng)程序343.3系統(tǒng)應(yīng)用程序開發(fā)353.3.1應(yīng)用程序的實(shí)現(xiàn)的功能353.3.2利用WinDriver實(shí)現(xiàn)應(yīng)用程序354系統(tǒng)調(diào)試374.1系統(tǒng)硬件測(cè)試374.2系統(tǒng)軟件調(diào)試及系統(tǒng)測(cè)試37結(jié)論39致謝語40參考文獻(xiàn)41附錄一:原理圖42附錄二:程序43附錄三:英文原文53附錄四:英文譯文630引言0.1選題現(xiàn)狀、研究意義以及發(fā)展趨勢(shì)USB(UniversalSerialBus)即通用串行總線,是現(xiàn)在非常流行的一種快速、雙向、廉價(jià)、可以進(jìn)行熱插拔的接口,在現(xiàn)在的每一臺(tái)PC機(jī)上都可以找到一對(duì)USB接口。USB是近年來應(yīng)用在PC領(lǐng)域的新型接口技術(shù),是一些PC大廠商,如Microsoft、Intel等為了解決日益增加的PC外設(shè)與有限的主板插槽和端口之間的矛盾而制定的一種串行通信的標(biāo)準(zhǔn),自1995年在Comdex上亮相以來至今已廣泛地為各PC廠家所支持。現(xiàn)在生產(chǎn)的PC幾乎都配備了USB接口,Microsoft的Windows98、NT以及Linux、FreeBSD等流行操作系統(tǒng)都增加了對(duì)USB的支持。在這之前,個(gè)人電腦的外部接口規(guī)格十分“繁華”,例如,鍵盤要接AT口或PS/2的接口,鼠標(biāo)要接COM口或PS/2接口,Modem要接另一個(gè)COM口,打印機(jī)要接ParallelPort(并口),而搖桿則要跟MIDI裝置共搶Game/MIDI口,每個(gè)外設(shè)都是這樣單獨(dú)地與電腦連接。如果各位繞到電腦背后看看,一定可以看到一堆慘不忍睹的“糾結(jié)”現(xiàn)象,這正是USB想解決的一個(gè)問題。

除了線路紊亂與安裝模糊混淆外,這些線路都是不可以隨意插拔的,必須在開機(jī)前裝好才能正常使用。如果在電腦工作期間插上或拔出,雖然有時(shí)電腦還是可以繼續(xù)工作,但大多數(shù)時(shí)候電腦會(huì)停止響應(yīng),或是插入的裝置無法工作,甚至死機(jī),嚴(yán)重的還會(huì)燒壞主板接口。

USB就是要解決上述這些問題,它是一種新規(guī)格的外接串聯(lián)口,提出該規(guī)格的廠商希望用USB來取代現(xiàn)有種種的外接設(shè)備接口。它還具備連接單一化、軟件自動(dòng)“偵測(cè)”以及熱插拔的功能,也就是說,在電腦不關(guān)機(jī)的情況下,就可以將設(shè)備連接到電腦上或是將設(shè)備從電腦上拔下來拿走。在操作系統(tǒng)的支持下,還可以不用干預(yù)自動(dòng)安裝驅(qū)動(dòng)程序,可以說是做到了真正的即插即用。隨著大量支持USB的個(gè)人電腦的普及,USB逐步成為PC機(jī)的標(biāo)準(zhǔn)接口已經(jīng)是大勢(shì)所趨。幾乎三年內(nèi)生產(chǎn)的主板都有2個(gè)或以上的USB標(biāo)準(zhǔn)接口,支持USB的外設(shè)越來越多,像USB鍵盤和USB鼠標(biāo)、USB調(diào)制解調(diào)器、USB音箱、USB打印機(jī)、USB掃描儀、USB游戲桿、USBHub、USB顯示器、USB數(shù)碼相機(jī)、USB攝像頭、USB硬盤等等設(shè)備。現(xiàn)在的USB生產(chǎn)廠商很多,幾乎所有的硬件廠商都有USB的產(chǎn)品。USB控制器一般有兩種類型:一種是MCU集成在芯片里面的,如Intel的8X930AX、CYPRESS的EZ-USB、SIEMENS的C541U以及MOTOLORA、NationalSemiconductors等公司的產(chǎn)品。另一種就是純粹的USB接口芯片,僅處理USB通信,如PHILIPS的PDIUSBD11(I2C接口)、PDIUSBP11A、PDIUSBD12(并行接口)、NationalSemiconductor的USBN9602、USBN9603、USBN9604等。前一種由于開發(fā)時(shí)需要單獨(dú)的開發(fā)系統(tǒng),因此開發(fā)成本較高;而后一種只是一個(gè)芯片與MCU接口實(shí)現(xiàn)USB通信功能,因此成本較低,而且可靠性高。本文詳細(xì)介紹了利用89s52與PDIUSBD12相連的USB接口電路的應(yīng)用。51系列的芯片在目前來說是性價(jià)比最高的單片機(jī),而且供貨充足,有多家公司生產(chǎn),而且51系列芯片的開發(fā)是最容易的,開發(fā)周期短,特別是國內(nèi)的院校大都采用了51系列來學(xué)習(xí)單片機(jī)系統(tǒng)。然而,使用51系列芯片,其串口的最高通信速率為19.2kbp/s,在要求高傳輸率的場(chǎng)合根本無法滿足要求,這樣在51系列芯片的串口通信中會(huì)形成一個(gè)速度瓶頸。AT89S52是MCS51系列兼容單片機(jī),工作電壓4-6V,通常封裝為DIP40或PLCC44,工作頻率24MHZ。增強(qiáng)的部分主要有:8KFLASH程序存儲(chǔ)器(8051用PROM,無法編程寫入,導(dǎo)致實(shí)際上多數(shù)用無ROM的8031外擴(kuò)的EPROM。8KFLASH一般已經(jīng)夠用,通常無需外擴(kuò)程序存儲(chǔ)器,理論可寫入次數(shù)1000)、256BRAM數(shù)據(jù)存儲(chǔ)器(8051為128)、3個(gè)定時(shí)計(jì)數(shù)器(8051為2個(gè))、WDT(8051沒有)、ISP(8051沒有)。利用89S52與PDIUSBD12相連的USB接口電路能大大提高89S52的通信速率。而PDIUSBD12通常用作微控制器系統(tǒng)中實(shí)現(xiàn)與微控制器進(jìn)行通信的高速通用并行接口,因此具有廣闊的應(yīng)用前景。這種實(shí)現(xiàn)USB接口的標(biāo)準(zhǔn)組件,使得我們可以在各種不同類型微控制器中選擇出最合適的微控制器。這種靈活性不但減小了開發(fā)的時(shí)間、風(fēng)險(xiǎn)以及費(fèi)用,而且利用USB總線技術(shù)的即插即用、熱插拔等特性,可以開發(fā)出高性能的USB接口,從而用最快捷的方法實(shí)現(xiàn)最經(jīng)濟(jì)的USB外設(shè)的解決方案,因此,研究意義較為深遠(yuǎn)。系統(tǒng)實(shí)現(xiàn)功能系統(tǒng)是一個(gè)人機(jī)接口設(shè)備(HID),主要完成的是USB設(shè)備的基本功能,即主機(jī)對(duì)設(shè)備的列舉和中斷方式的數(shù)據(jù)傳輸。這兩點(diǎn)是USB設(shè)備所必須擁有的功能,可以稱作USB設(shè)備的基本功能。設(shè)備主體由AT89S52和PDIUSBD12以及維持它們正常工作所必需的外圍元件組成,設(shè)備主體接上主機(jī)之后,能夠單獨(dú)完成設(shè)備的識(shí)別和配置,并可以實(shí)現(xiàn)數(shù)據(jù)通信功能。為了豐富設(shè)備的功能,對(duì)系統(tǒng)還做了一定的擴(kuò)充,還擴(kuò)展了8位撥碼開關(guān)輸入和8位發(fā)光二極管LED輸出,另外還實(shí)現(xiàn)以下設(shè)備功能:1)簡(jiǎn)單的演示設(shè)備用于演示HID設(shè)備配置過程和中斷傳輸方式下基本數(shù)據(jù)交換過程。2)PS/2接口擴(kuò)展電路擴(kuò)展PS/2接口,可實(shí)現(xiàn)將PS/2鍵盤和PS/2鼠標(biāo)轉(zhuǎn)換為USB設(shè)備使用。3)Flash存儲(chǔ)器擴(kuò)展利用SamsungK9F2808芯片(16MB的Flash存儲(chǔ)器芯片,數(shù)據(jù)字寬8位)擴(kuò)展為移動(dòng)存儲(chǔ)器設(shè)備。4)LPT并行接口擴(kuò)展保留了LPT并行接口,可用于并口打印機(jī)信號(hào)到USB打印機(jī)信號(hào)的轉(zhuǎn)換或者其它類型的數(shù)據(jù)傳輸擴(kuò)展。以上幾種擴(kuò)展不可能同時(shí)實(shí)現(xiàn),設(shè)備可在上電后由一個(gè)2位的撥碼開關(guān)選擇自己配置哪種設(shè)備。設(shè)備的系統(tǒng)結(jié)構(gòu)框圖如圖所示。單片機(jī)控制器單片機(jī)控制器USB接口芯片F(xiàn)lash存儲(chǔ)器芯片輸入輸出模塊LPT并行接口PS/2串行接口圖設(shè)備系統(tǒng)結(jié)構(gòu)框圖[1]1USB技術(shù)1.1USB總線概述1USB總線簡(jiǎn)介USB(UniversalSerialBus)的中文含義是通用串行總線。早先的微機(jī)系統(tǒng)中,外設(shè)與CPU的連接存在接口標(biāo)準(zhǔn)各自獨(dú)立、互不兼容、無法共享的問題,并且安裝、配置也很麻煩。這不僅使外設(shè)日益多樣化的發(fā)展趨勢(shì)與系統(tǒng)(I/O端口、IRQ)有限性的矛盾更加突出,而且給用戶對(duì)外設(shè)的連接和使用帶來極大不便,因此,迫切需要新的通用型外設(shè)標(biāo)準(zhǔn)出臺(tái)。為了實(shí)現(xiàn)整個(gè)計(jì)算機(jī)系統(tǒng)中總線的一致性,以Intel公司為主,并聯(lián)合Compaq,Hewlett-Packard,Lucent,Microsoft,NEC以及Philips共七家公司共同開發(fā)的一種快速的、雙向的、同步傳輸?shù)牟⒖梢詿岚尾宓男滦屯ㄓ么锌偩€,簡(jiǎn)稱USB總線。1.2.2USB總線的優(yōu)點(diǎn)隨著各種類型的USB外設(shè)(如USB閃存盤、USB視頻頭、USB鼠標(biāo)等)的陸續(xù)出現(xiàn),USB通信的優(yōu)點(diǎn)越來越廣泛的被人們所熟知,將外設(shè)連接到計(jì)算機(jī)時(shí),USB接口成為優(yōu)先的選擇,不管是使用外設(shè)的用戶或是開發(fā)USB軟硬件的設(shè)計(jì)者,USB都有讓雙方滿意的特性。根據(jù)USB總線規(guī)范的定義,USB總線主要具有以下優(yōu)點(diǎn):1)方便最終用戶的使用(1)電纜和連接器具有唯一的型號(hào)。(2)對(duì)最終用戶隱藏了電氣細(xì)節(jié),例如總線終結(jié)。(3)設(shè)備自動(dòng)識(shí)別,自動(dòng)安裝驅(qū)動(dòng)程序和配置。(4)支持動(dòng)態(tài)接入和動(dòng)態(tài)配置。2)工作負(fù)荷和應(yīng)用范圍廣(1)支持傳輸速率從幾Kb/s至幾Mb/s的設(shè)備。(2)同一組總線上可以同時(shí)支持同步和異步傳輸類型。(3)支持對(duì)多個(gè)設(shè)備的同時(shí)操作(多連接)。(4)支持多達(dá)127個(gè)物理外設(shè)。(5)支持在主機(jī)和設(shè)備間多個(gè)數(shù)據(jù)和消息流的傳輸。(6)具有較小的協(xié)議開銷,總線利用率較高。3)同步帶寬(1)可以為外設(shè)提供確定的帶寬和很小的時(shí)延。(2)同步負(fù)荷可以使用總線上全部帶寬。4)靈活性(1)可以有很多不同大小的分組,并允許在一定范圍內(nèi)選擇設(shè)備的緩沖區(qū)。(2)通過支持不同的分組緩沖區(qū)和時(shí)延要求,支持不同數(shù)據(jù)傳輸速率的設(shè)備。(3)提供了用于控制緩沖區(qū)的流控功能。5)穩(wěn)定性(1)協(xié)議中包含錯(cuò)誤檢測(cè)機(jī)制。(2)支持動(dòng)態(tài)接入和插出(熱插拔)。6)與PC工業(yè)協(xié)同作用(1)符合PC即插即用體系結(jié)構(gòu)。(2)對(duì)現(xiàn)存操作系統(tǒng)接口產(chǎn)生極大影響。7)成本低廉(1)組件與電纜價(jià)格便宜。(2)低速模式(l.5Mb/s)更加經(jīng)濟(jì)。(3)利用了商用技術(shù)。8)易于升級(jí)[10]1.2USB協(xié)議簡(jiǎn)介1.2.1USB物理體系結(jié)構(gòu)USB總線設(shè)備以星型的拓?fù)浣Y(jié)構(gòu)實(shí)現(xiàn)與主機(jī)的物理連接,其物理拓?fù)浣Y(jié)構(gòu)如圖所示。USB的接入點(diǎn)由集線器(Hub)來提供。這種由集線器提供的額外的接入點(diǎn)稱為端口(Port)。主機(jī)中包含了一個(gè)嵌入的集線器,稱為根集線器(Roothub)通過根集線器,主機(jī)可以提供一個(gè)或多個(gè)接入點(diǎn)。為主機(jī)提供附加功能的設(shè)備稱為功能模塊。為了防止出現(xiàn)環(huán)形接入的情況,在USB中使用了分層的拓?fù)浣Y(jié)構(gòu)。這種結(jié)構(gòu)具有樹型結(jié)構(gòu)。通過使用集線器擴(kuò)展可連接多達(dá)127個(gè)外設(shè)。復(fù)合設(shè)備復(fù)合設(shè)備根HUB主機(jī)設(shè)備設(shè)備HUB設(shè)備設(shè)備HUB設(shè)備設(shè)備圖USB物理總線拓?fù)浣Y(jié)構(gòu)USB的電纜有4根線,兩根傳送的是十5V電源,另外兩根是數(shù)據(jù)線。其定義如表所示。信號(hào)線的特性阻抗為9052,而信號(hào)是利用差模方式送入信號(hào)線的。利用這種差模傳輸方式,接收端的靈敏度可以達(dá)到不低于200mV。功率不大的外設(shè)可以直接使用USB總線電源供電,而不必外接電源,USB總線最大可以提供5V,500mA電源,并支持節(jié)約能源的掛機(jī)和喚醒模式。表1.1USB電纜信號(hào)定義編號(hào)信號(hào)名稱顏色注釋1VBUS紅色電源線2D-白色-數(shù)據(jù)3D+綠色+數(shù)據(jù)4GND黑色地線1USB設(shè)備邏輯結(jié)構(gòu)USB的設(shè)備可以分成多個(gè)不同類型,同類型的設(shè)備可以擁有一些共同的行為特征和工作協(xié)議,這樣可以使設(shè)備驅(qū)動(dòng)程序的編寫變得簡(jiǎn)單一些。USB協(xié)議規(guī)范中定義了USB的設(shè)備類型,比如音頻、通信、HID、HUB等設(shè)備類。USB設(shè)備的邏輯結(jié)構(gòu)如圖,USB設(shè)備的物理連接不影響這個(gè)邏輯視圖。圖1.2USB邏輯結(jié)構(gòu)每個(gè)USB設(shè)備內(nèi)有一個(gè)或多個(gè)邏輯連接點(diǎn),稱為端點(diǎn)(Endpoint),每個(gè)端點(diǎn)指定下面的傳輸類型之一:控制傳輸、中斷傳輸、塊傳輸和等時(shí)傳輸。在USB協(xié)議規(guī)范中用4位地址標(biāo)識(shí)端點(diǎn)地址,每個(gè)設(shè)備最多有16個(gè)端點(diǎn)。所有設(shè)備都有一個(gè)端點(diǎn)0傳輸,用于配置和控制各設(shè)備。管道(Pipe)實(shí)現(xiàn)了在主機(jī)的一個(gè)內(nèi)存緩沖區(qū)和設(shè)備的端點(diǎn)之間的數(shù)據(jù)傳輸,主機(jī)USB系統(tǒng)軟件和設(shè)備的端點(diǎn)0之間的連接稱為缺省管道。管道是具有多個(gè)特征的信道,如帶寬分配、包大小、管道類別以及數(shù)據(jù)流向。管道分為流管道(StreamPipe)和消息管道(MessagePipe)。流管道傳輸?shù)臄?shù)據(jù)包的內(nèi)容不具有USB要求的結(jié)構(gòu),它是單向傳輸?shù)模涣鞴艿乐С峙?、等時(shí)和中斷傳輸方式。而消息管道與流管道具有不同的行為。首先,由主機(jī)發(fā)請(qǐng)求給USB設(shè)備,然后在適當(dāng)?shù)姆较蛏蟼鬏敂?shù)據(jù),最后是到達(dá)一個(gè)狀態(tài)階段。為了保證三個(gè)階段的數(shù)據(jù)傳輸,消息管道定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)使命令可靠地被識(shí)別和傳輸。消息管道是雙向的,它只支持控制傳輸方式。一個(gè)設(shè)備對(duì)主機(jī)表現(xiàn)為一組合適的端點(diǎn),一組相關(guān)的端點(diǎn)稱為一個(gè)接口,有多個(gè)接口的設(shè)備稱為組合設(shè)備。最后,設(shè)備可以有多組接口。每一組稱為一個(gè)配置,一次只能有一個(gè)配置是活動(dòng)的。但是,當(dāng)前配置中的所有接口(和它們的端點(diǎn))可以同時(shí)是活動(dòng)的。大多數(shù)的設(shè)備只有一個(gè)配置和一個(gè)接口。主機(jī)從設(shè)備讀取各種描述符,了解有什么配置、接口和端點(diǎn)可用。當(dāng)設(shè)備第一次使用缺省管道插入時(shí),主機(jī)讀取這些描述符。主機(jī)操作系統(tǒng)要為發(fā)現(xiàn)的每個(gè)配置或接口建立內(nèi)核設(shè)備[19]。1USB傳輸類型在USB級(jí),設(shè)備可以使用4種不同的傳輸類型通信:控制傳輸、中斷傳輸、批量傳輸和等時(shí)傳輸。如果從頭設(shè)計(jì)一個(gè)USB設(shè)備,必須決定那些傳輸類型是合適的。1)控制傳輸:主要用于命令袱態(tài)操作,由主機(jī)軟件發(fā)起的請(qǐng)求/響應(yīng)通信過程,具有突發(fā)性,非周期的特點(diǎn)。任何一個(gè)USB設(shè)備都必須支持與一個(gè)控制傳輸類型相對(duì)應(yīng)的端點(diǎn)0。2)中斷傳輸:單向的并且對(duì)于主機(jī)來說只有輸入的通信方式。主要用于定時(shí)查詢?cè)O(shè)備是否有中斷數(shù)據(jù)要傳送,用來支持那些偶然需要少量數(shù)據(jù)通信,但服務(wù)時(shí)間受限制的設(shè)備。鍵盤,鼠標(biāo)和游戲桿都屬于這種類型。3)批量傳輸:主要用于沒有帶寬和間隔時(shí)間要求的大量數(shù)據(jù)的傳送和接收。它具有非周期和突發(fā)性強(qiáng)等特點(diǎn)。它并不能保證傳輸?shù)乃俾剩梢员WC傳輸?shù)目煽啃?,出現(xiàn)錯(cuò)誤的時(shí)候會(huì)要求發(fā)送方重發(fā)。打印機(jī)和掃描儀屬于這種類型。4)同步傳輸:主要用于主機(jī)和設(shè)備與時(shí)間有關(guān)的信息傳輸,具有周期性、連續(xù)性等特點(diǎn)。它要求有一個(gè)恒定的速率。例如進(jìn)行語音業(yè)務(wù)傳輸時(shí),使用等時(shí)傳輸方式是很好的選擇。1USB低層通信協(xié)議USB協(xié)議定義串行數(shù)據(jù)線路上發(fā)生的動(dòng)作??捎玫臄?shù)據(jù)傳輸時(shí)間(帶寬)被劃分成幀,每個(gè)幀lms長(zhǎng),一個(gè)全速的數(shù)據(jù)幀最多含有1500字節(jié),而對(duì)于低速的幀最多含有187字節(jié)。1)包在串行線路上傳輸?shù)淖钚?shù)據(jù)塊是包,它僅沿一個(gè)方向發(fā)送,要么來自主機(jī),要么發(fā)送給主機(jī)。一個(gè)包通常由同步信號(hào)、包標(biāo)志(PID)、地址、傳送的數(shù)據(jù)和CRC等組成。PID由8位組成,其中后4位是糾錯(cuò)位。有4類10個(gè)PID如表所示。2)事務(wù)事務(wù)是主機(jī)和一個(gè)設(shè)備之間使用一個(gè)或多個(gè)包的離散交互。一個(gè)事務(wù)通常由主機(jī)開始,一般分三個(gè)階段,第一階段發(fā)送令牌(token)包,第二階段發(fā)送是數(shù)據(jù)(data)包(可以沿任何一個(gè)方向發(fā)送),在數(shù)據(jù)包傳送完之后,就會(huì)由設(shè)備返回一個(gè)握手(handshake)包。3)幀開始(SOF)SOF包由主機(jī)發(fā)送,指示一個(gè)幀的開始。這個(gè)包包括一個(gè)11位的幀號(hào),這個(gè)幀號(hào)從0到Ox7FF連續(xù)變化,并重新折回0,SOF包被所有高速設(shè)備看到。像任何其它包一樣,SOF包可能被破壞。4)事務(wù)包結(jié)構(gòu)控制傳輸涉及主機(jī)給設(shè)備發(fā)送一個(gè)SETUP包、任一方向的0個(gè)或多個(gè)DATA包以及一個(gè)握手包。IN包或OUT包開始所有其它的傳輸。設(shè)備端點(diǎn)的定義確定它是中斷傳輸、塊傳輸還是同步傳輸。主機(jī)定時(shí)啟動(dòng)中斷傳輸,看設(shè)備端點(diǎn)是否有任何數(shù)據(jù)可用。設(shè)備端點(diǎn)可以返回?cái)?shù)據(jù)。另外,設(shè)備可能發(fā)送NAK,指示沒有可用的數(shù)據(jù),或者狀態(tài)沒有改變[4]。表1.2PID類型[17]PID類型PID名PID[3:0]描述標(biāo)記(Token)輸出(OUT)0001B在主機(jī)到功能部件的事務(wù)中有地址+端口號(hào)輸入(IN)1001B在功能部件到主機(jī)的事務(wù)中有地址+端口號(hào)幀開始(SOF)0101B幀開始標(biāo)記和幀號(hào)建立(SETUP)1101B在主機(jī)到功能部件建立一個(gè)控制管道的事務(wù)中有地址+端口號(hào)數(shù)據(jù)(DATA)數(shù)據(jù)0(DATA0)0011B偶數(shù)據(jù)包PID數(shù)據(jù)1(DATA1)1011B奇數(shù)據(jù)包PID握手(Handshake)確認(rèn)(ACK)0010B接收器收到無錯(cuò)誤數(shù)據(jù)包不確認(rèn)(NAK)1010B接收設(shè)備部不能接受數(shù)據(jù),或發(fā)送設(shè)備不能發(fā)送數(shù)據(jù)停止(STALL)1110B端口掛起,或一個(gè)控制管道請(qǐng)求不被支持。專用(Special)前同步(PRE)1100B主機(jī)發(fā)送的前同步字。打開到低速設(shè)備的下行總線通信。1.3USB接口技術(shù)在進(jìn)行一個(gè)USB設(shè)備開發(fā)之前,首先要根據(jù)具體使用要求選擇合適的USB控制器。實(shí)現(xiàn)USB設(shè)備與計(jì)算機(jī)之間的接口連接,通常的做法有以下的兩種:一種是采用分離的USB接口芯片和微處理芯片。USB接口芯片,是指芯片廠商生產(chǎn)的可以用單片機(jī)控制的,帶有USB電氣接口,并完成將USB總線中的物理信號(hào)同單片機(jī)可以識(shí)別的TTL電平信號(hào)之間相互轉(zhuǎn)換的接口芯片。USB接口芯片常見的有PHILIPS的PDIUSBD11(I2C接口),PDIUSBD11A另一種就是采用帶有USB接口電路的單片機(jī),這種單片機(jī)的芯片上集成了USB接口電路,可以直接處理USB傳輸線上的數(shù)據(jù)。如Intel的8X930AX,CYPRESS的EZ-USB,SIEMENS的C541以及MOTOLORA,NationalSemiconductors等公司的產(chǎn)品。采用這種結(jié)構(gòu)的設(shè)備外圍電路簡(jiǎn)單,設(shè)計(jì)方便,周期短,但這些要采用專業(yè)的開發(fā)設(shè)備,且投資高[2]。因此,選擇的方案是功能強(qiáng)大,支持總線供電和設(shè)備自供電兩種方式的PDIUSBD12作為接口芯片來設(shè)計(jì)USB設(shè)備接口,單片機(jī)控制器作為下位機(jī),通過USB接口芯片和USB總線與PC機(jī)交換數(shù)據(jù),并實(shí)現(xiàn)USB設(shè)備的邏輯功能。2系統(tǒng)硬件電路設(shè)計(jì)2.1設(shè)備電路系統(tǒng)概述USB設(shè)備的硬件通常是由處理器和接口電路實(shí)現(xiàn)組成。本系統(tǒng)實(shí)際上是AT89S52和PDIUSBD12單片機(jī)組成的單片機(jī)系統(tǒng)。其核心就是單片機(jī)控制器,它負(fù)責(zé)完成設(shè)備所有的控制功能;USB接口芯片和其它輸入輸出模塊作為單片機(jī)的外圍部件掛接在系統(tǒng)總線上,所有器件在單片機(jī)的控制下協(xié)同工作。2.251系列單片機(jī)最小系統(tǒng)2.2.1AT89S52單片機(jī)的介紹和選用單片機(jī)采用51系列兼容的AT89S52單片機(jī)。AT89S52是低功耗,高性能,采用COMS工藝的8位單片機(jī)。其片內(nèi)具有8KB的可在線編程的Flash存儲(chǔ)器,比80C51單片機(jī)多4K的程序存儲(chǔ)器。該單片機(jī)采用了ATMEL公司的高密度,非易失性存儲(chǔ)技術(shù),與工業(yè)標(biāo)準(zhǔn)型80C51單片機(jī)的指令系統(tǒng)與引腳完全兼容;片內(nèi)的Flash存儲(chǔ)器可在線重新編程,或使用通用的非易失性存儲(chǔ)器編程器;通用的8位CPU與在線可編程Flash集成在一塊芯片上,從而使AT89S52功能更加完善,應(yīng)用更加靈活;具有較高的性能價(jià)格比,使其在嵌入式控制系統(tǒng)中有著廣泛的應(yīng)用前景。所以我選用AT89S52單片機(jī)做此畢業(yè)設(shè)計(jì)。1)AT89S52單片機(jī)的主要性能:(1)與MCS-51單片機(jī)產(chǎn)品兼容(2)8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器(3)1000次擦寫周期(4)全靜態(tài)操作:0Hz~33Hz(5)三級(jí)加密程序存儲(chǔ)器(6)32個(gè)可編程I/O口線(7)三個(gè)16位定時(shí)器/計(jì)數(shù)器(8)八個(gè)中斷源(9)全雙工UART串行通道(10)低功耗空閑和掉電模式(11)掉電后中斷可喚醒(12)看門狗定時(shí)器(13)雙數(shù)據(jù)指針(14)掉電標(biāo)識(shí)符2)AT89S52單片機(jī)的標(biāo)準(zhǔn)功能8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52可降至0Hz靜態(tài)輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止[16]。3)AT89S52引腳及其功能:AT89S52有40個(gè)管腳分布如圖2.1所示:圖AT89S52引腳圖功能說明:VCC:電源GND:接地P0口:P0口是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。在flash編程時(shí),P0P1口:P1口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P1輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對(duì)P1端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,和分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入()和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(),具體如表在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。表P1口引腳第二功能引腳號(hào)第二功能T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制)MOSI(在系統(tǒng)編程用)MISO(在系統(tǒng)編程用)SCK(在系統(tǒng)編程用)P2口:P2口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對(duì)P2端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX@DPTR)時(shí),P2口送出高八位地址。在這種應(yīng)用中,P2口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX@RI)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗(yàn)時(shí),P2口也接收高8P3口:P3口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對(duì)P3端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89S52特殊功能(第二功能)使用,如表所示。在flash編程和校驗(yàn)時(shí),P3表P3口引腳第二功能引腳號(hào)第二功能RXD(串行輸入)TXD(串行輸出)INT0(外部中斷0)INT0(外部中斷0)T0(定時(shí)器0外部輸入)T1(定時(shí)器1外部輸入)WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)RD(外部數(shù)據(jù)存儲(chǔ)器寫選通)RST:復(fù)位輸入。晶振工作時(shí),RST腳持續(xù)2個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位。看門狗計(jì)時(shí)完成后,RST腳輸出96個(gè)晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。ALE/PROG:地址鎖存控制信號(hào)(ALE)是訪問外部程序存儲(chǔ)器時(shí),鎖存低8位地址的輸出脈沖。在flash編程時(shí),此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE脈沖將會(huì)跳過。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE僅在執(zhí)行MOVX或MOVC指令時(shí)有效。否則,ALE將被微弱拉高。這個(gè)ALE使能標(biāo)志位(地址為8EH的SFR的第0位)的設(shè)置對(duì)微控制器處于外部執(zhí)行模式下無效。PSEN:外部程序存儲(chǔ)器選通信號(hào)(PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng)AT89S52從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN在每個(gè)機(jī)器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN將不被激活。EA/VPP:訪問外部程序存儲(chǔ)器控制信號(hào)。為使能從0000H到FFFFH的外部程序存儲(chǔ)器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,EA也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。2.2.2AT89S52與PDIUSBD12構(gòu)建的最小系統(tǒng)在設(shè)備電路中,真正起到USB設(shè)備實(shí)質(zhì)作用的只有單片機(jī)和USB接口芯片,所以本系統(tǒng)的重點(diǎn)是AT89S52單片機(jī)和PDIUSBD12接口芯片組成的單片機(jī)系統(tǒng),也是最小系統(tǒng),如圖。當(dāng)P27=1時(shí),89S52給PDIUSBD12發(fā)命令;當(dāng)P27=0時(shí),向PDIUSBD12寫數(shù)據(jù)或從PDIUSBD12讀數(shù)據(jù)。PDIUSBD12的GL_N接LED,對(duì)其工作狀態(tài)進(jìn)行監(jiān)控,LED在USB被連接時(shí)會(huì)發(fā)光,在進(jìn)行數(shù)據(jù)傳輸時(shí)會(huì)閃爍,LED常亮或一直不亮說明USB接口有問題。R1,R2是串聯(lián)終端電阻。L1,L2是磁珠,分別串聯(lián)在電源和地中,USB總線電源從L1引入。因?yàn)槭窃O(shè)備自供電,可以不接L1。對(duì)于自供電設(shè)備的電源必須要與總線的電源進(jìn)行隔離,自供電電源與USB總線的電源之間只能共地,同時(shí)設(shè)備不能通過USB口向VBUS輸出電流。PDIUSBD12片內(nèi)集成了6MHZ—8MHZ時(shí)鐘乘法鎖相環(huán)(PLL),這樣就可以使用低成本的6MHZ晶振。同時(shí),PDIUSBD12的時(shí)鐘輸出可以作為微處理器的外部晶振輸入[11]。

圖AT89S52與PDIUSBD12構(gòu)建的最小系統(tǒng)2.2.3AT89S52和外圍器件單片機(jī)控制器部分的電路原理圖如圖所示。74LS373是一種帶三態(tài)門的8D鎖存器,其中:1D-8D為8個(gè)輸入端,1Q-8Q為8個(gè)輸出端。

LE為數(shù)據(jù)打入端:當(dāng)LE為“1”時(shí),鎖存器輸出狀態(tài)同輸入狀態(tài);當(dāng)LE由“1”變“0”時(shí),數(shù)據(jù)打入鎖存器。

OE為輸出允許端:當(dāng)OE=0時(shí),三態(tài)門打開;當(dāng)OE=1時(shí),三態(tài)門關(guān)閉,輸出高阻。圖中單片機(jī)的P0口接74LS373后,引出地址總線A0~A7,本系統(tǒng)中外部空間的高8位地址沒有使用,故不再列出;P0口引出的AD0~AD7本為地址/數(shù)據(jù)分時(shí)復(fù)用總線,在這樣連接之后就不可以考慮地址出現(xiàn)的時(shí)間,只用做數(shù)據(jù)總線;單片機(jī)接外部振蕩時(shí)鐘源,由PDIUSBD12提供,這是因?yàn)镈12可以外接6MHZ石英晶振,在內(nèi)部用鎖相環(huán)(PLL)倍頻產(chǎn)生高頻時(shí)鐘,并通過編程產(chǎn)生4MHZ至48MHZ時(shí)鐘輸出提供給單片機(jī),這種方式比較靈活,而且也為USB接口芯片減小了相應(yīng)的高頻電磁干擾。圖AT89S52和外圍器件在構(gòu)建最小系統(tǒng)的同時(shí),為了方便調(diào)試,還為單片機(jī)擴(kuò)展了8位LED輸出和8位撥碼開關(guān)控制的電平輸入,分別接在AT89S52的P1口和P2口上,LED可備調(diào)試設(shè)備固件程序時(shí)使用。LED輸出直接通過1KΩ上拉電阻排接到+5V電源上,以低電平驅(qū)動(dòng);撥碼開關(guān)輸入則由于與LPT并口接口擴(kuò)展有沖突,沒有直接連接在單片機(jī)P2口上,而是通過74245三態(tài)門緩沖器連接三態(tài)門作為總線開關(guān),它的使能端由單片機(jī)的P3.4口控制,即在使用這一模塊時(shí)限制了模式選擇開關(guān)的低位應(yīng)為低電平[3]。2.3PDIUSBD12外圍電路及其與單片機(jī)的連接設(shè)計(jì)2.3.1PDIUSBD12介紹1)PDIUSBD12簡(jiǎn)介PDIUSBD12是一款性價(jià)比很高的USB器件。它通常用作微控制器系統(tǒng)中實(shí)現(xiàn)與微控制器進(jìn)行通信的高速通用并行接口。它還支持本地的DMA傳輸。PDIUSBD12完全符合版的規(guī)范。它還符合大多數(shù)器件的分類規(guī)格:成像類,海量存儲(chǔ)器件,通信器件,打印設(shè)備以及人機(jī)接口設(shè)備。同樣,PDIUSBD12理想地適用于許多外設(shè),例如:打印機(jī),掃描儀,外部的存儲(chǔ)設(shè)備(Zip驅(qū)動(dòng)器)和數(shù)碼相機(jī)等等。它使得當(dāng)前使用SCSI的系統(tǒng)可以立即降低成本。PDIUSBD12所具有的低掛起功耗連同LazyClock輸出可以滿足使用ACPI,OnNOW和USB電源管理的要求低的操作功耗可應(yīng)用于使用總線供電的外設(shè)。此外它還集成了許多特性包括SoftConnetTM,GoodLinkTM,可編程時(shí)鐘輸出,低頻晶振和終止寄存器集合。2)PDIUSBD12的特性(1)符合通用串行總線USB1.1版規(guī)范(2)高性能USB接口器件集成了SIE、FIFO存儲(chǔ)器、收發(fā)器以及電壓調(diào)整器(3)符合大多數(shù)器件的分類規(guī)格(4)可與任何外部微控制器/微處理實(shí)現(xiàn)高速并行接口2M字節(jié)/秒(5)完全自治的直接內(nèi)存存取DMA操作(6)集成320字節(jié)多結(jié)構(gòu)FIFO存儲(chǔ)器(7)主端點(diǎn)的雙緩沖配置增加了數(shù)據(jù)吞吐量并輕松實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)傳輸(8)在批量模式和同步模式下均可實(shí)現(xiàn)1M字節(jié)/秒的數(shù)據(jù)傳輸速率(9)具有良好EMI特性的總線供電能力(10)在掛起時(shí)可控制LazyClock輸出(11)可通過軟件控制與USB的連接(12)采用GoodLink技術(shù)的連接指示器,在通信時(shí)使LED閃爍(13)可編程的時(shí)鐘頻率輸出(14)符合ACPIOnNOW和USB電源管理的要求(15)內(nèi)部上電復(fù)位和低電壓復(fù)位電路(16)有SO28和TSSOP28兩種封裝(17)工業(yè)級(jí)操作溫度-40~+85℃(18)高于8kV的在片靜電防護(hù)電路減少了額外元件的費(fèi)用(19)具有高錯(cuò)誤恢復(fù)率(>99%)的全掃描設(shè)計(jì)確保了高品質(zhì)(20)雙電源操作3.3V或擴(kuò)展的5V電源,范圍為3.6~5.5V(21)多中斷模式實(shí)現(xiàn)批量和同步傳輸3)PDIUSBD12芯片功能框圖及其說明芯片內(nèi)部結(jié)構(gòu)框圖如圖所示。圖2.4PDIUSBD12芯片內(nèi)部結(jié)構(gòu)框圖(1)模擬收發(fā)器集成的收發(fā)器接口可通過終端電阻直接與USB電纜相連。(2)電壓調(diào)整器片內(nèi)集成了一個(gè)的調(diào)整器用于模擬收發(fā)器的供電。該電壓還作為輸出連接到外部Ω的上拉電阻??蛇x擇PDIUSBD12提供的帶Ω內(nèi)部上拉電阻的軟件連接技術(shù)。(3)PLL片內(nèi)集成了6M到48M時(shí)鐘乘法PLL。這樣就可使用低成本的6M晶振。EMI也隨之降低。PLL的工作不需要外部元件。(4)位時(shí)鐘恢復(fù)位時(shí)鐘恢復(fù)電路使用4X過采樣規(guī)則,從進(jìn)入的USB數(shù)據(jù)流中恢復(fù)時(shí)鐘。它能跟蹤USB規(guī)定范圍內(nèi)的抖動(dòng)和頻漂。(5)Philips串行接口引擎PSIEPhilipsSIE實(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)生。(6)SoftConnectTM與USB的連接是通過Ω上拉電阻將D+(用于高速USB器件)置為高實(shí)現(xiàn)的。Ω上拉電阻集成在PDIUSBD12片內(nèi),默認(rèn)狀態(tài)下不與VCC相連。連接的建立通過外部/系統(tǒng)微控制器發(fā)送命令來實(shí)現(xiàn)。這就允許系統(tǒng)微控制器在決定與USB建立連接之前完成初始化時(shí)序。USB總線連接可以重新初始化而不需要拔出電纜。PDIUSBD12在連接可以建立之前會(huì)檢測(cè)VBUS是否可用。VBUS可通過EOT_N管腳進(jìn)行檢測(cè)。(7)GoodLinkTMGoodLinkTM技術(shù)可提供良好的USB連接指示。在枚舉中,LED指示根據(jù)通信的狀況間歇閃爍。當(dāng)PDIUSBD12成功地枚舉和配置后,LED指示將一直點(diǎn)亮。隨后與PDIUSBD12之間成功的傳輸(帶應(yīng)答)將關(guān)閉LED,處于掛起狀態(tài)時(shí),LED將會(huì)關(guān)閉。該特性為USB器件,集線器和USB通信狀態(tài)提供了用戶友好的指示。作為一個(gè)診斷工具,它對(duì)隔離故障的設(shè)備是很有用的。該特性降低了現(xiàn)場(chǎng)支持和熱線的成本。(8)存儲(chǔ)器管理單元MMU和集成RAM在以12M/s的速率傳輸并與微控制器并口相連時(shí),MMU和集成RAM作為USB之間速度差異的緩沖區(qū)。這就允許微控制器以它自己的速率對(duì)USB信息包進(jìn)行讀寫。(9)并行和DMA接口[14]一個(gè)普通的并行接口定義成易于使用,快速而且可以與主流的微控制器直接接口。對(duì)一個(gè)微控制器而言,PDIUSBD12看起來就像一個(gè)帶8位數(shù)據(jù)總線和一個(gè)地址位(占用2個(gè)位置的)存儲(chǔ)器件。PDIUSBD12支持多路復(fù)用和非復(fù)用的地址和數(shù)據(jù)總線。還支持主端點(diǎn)與本地共享RAM之間直接讀取的DMA傳輸。支持單周期和突發(fā)模式的DMA傳輸。4)PDIUSBD12引腳極其功能表定義了芯片的引腳:表PDIUSBD12的引腳定義符號(hào)類型描述1DATA0IO2雙向數(shù)據(jù)位02DATA1IO2雙向數(shù)據(jù)位13DATA2IO2雙向數(shù)據(jù)位24DATA3IO2雙向數(shù)據(jù)位35GNDP地6DATA4IO2雙向數(shù)據(jù)位47DATA5IO2雙向數(shù)據(jù)位58DATA6IO2雙向數(shù)據(jù)位69DATA7IO2雙向數(shù)據(jù)位710ALEI地址鎖存允許。在多路地址/數(shù)據(jù)復(fù)用總線系統(tǒng)中,ALE下降沿用于鎖存地址;在獨(dú)立地址/數(shù)據(jù)總線系統(tǒng)中,ALE應(yīng)一直接地。11CS_NI片選(低電平有效)12SUSPENDLOD4芯片進(jìn)入掛起狀態(tài)13CLKOUTO2可編程時(shí)鐘輸出14INT_NOD4中斷輸出(低電平有效)15RD_NI讀使能(低電平有效)16WR_NI寫使能(低電平有效)17DMREQO4DMA請(qǐng)求18DMACK_NIDMA響應(yīng)(低電平有效)19EOT_NIDMA傳輸結(jié)束(低電平有效)20RESET_NI異步復(fù)位(低電平有效)。片內(nèi)有上電復(fù)位電路,此腳可以一直接高電平。21GL_NOD8GoodLinkLED指示22XTAL1I晶振連接123XTAL2O晶振連接2。使用外部振蕩源接1時(shí),此腳懸空24VccP25D-AUSB數(shù)據(jù)線D-26D+AUSB數(shù)據(jù)線D+27P28A0I地址位。1選擇命令,0選擇地址。多路復(fù)用地址/數(shù)據(jù)總線配置時(shí),接高電平。PDIUSBD12采用28PIN腳模式,SO28和TSSOP28封裝。。圖2.5PDIUSBD12引腳圖USB外圍電路及其與單片機(jī)連接D12與51單片機(jī)的連接非常簡(jiǎn)單,可以參照?qǐng)D。圖2.6PDIUSBD12與單片機(jī)的連接圖中,ALE接為低電平表示一個(gè)獨(dú)立的地址和數(shù)據(jù)總線配置PDIUSBD12的A0腳與AT89S52的任意一個(gè)I/O口相連。該端口控制PDIUSBD12的命令和數(shù)據(jù)狀態(tài)。AT89S52的多位地址和數(shù)據(jù)總線可直接與PDIUSBD12的數(shù)據(jù)總線相連。μμF的去耦電容,Vcc接5V;使用3.3V電源供電,需要把Vcc和Vout3.3兩腳都接3.3V,設(shè)備選擇的是5V電源供電。D12與單片機(jī)連接時(shí)可以給它加接6M的石英晶體,單片機(jī)的外部時(shí)鐘則由D12的CLKOUT引腳提供,時(shí)鐘輸出的頻率為12M[20]。圖是D12器件和它的外圍電路原理圖,D12的D0~D7引腳接系統(tǒng)數(shù)據(jù)總線,A0接數(shù)據(jù)線A0,片選信號(hào)接數(shù)據(jù)線A5,這樣D12的數(shù)據(jù)口地址就可以定為10h,而地址口地址定為11h(由于A5不參與其它芯片的地址譯碼,所以這樣的地址分配不會(huì)引起沖突)[5]。圖PDIUSBD12外圍電路2.4擴(kuò)展功能電路的設(shè)計(jì)系統(tǒng)基本功能電路設(shè)計(jì)完畢以后,可以再對(duì)系統(tǒng)進(jìn)行擴(kuò)展。擴(kuò)展單片機(jī)系統(tǒng)具體來說,就是以擴(kuò)展存儲(chǔ)空間的方式,給每個(gè)外圍器件分配一個(gè)或者多個(gè)地址,即將單片機(jī)最小系統(tǒng)的地址總線按一定的規(guī)律譯碼,使得某些特定的地址組合時(shí)器件的片選有效,同時(shí)外圍數(shù)字器件就能夠在單片機(jī)的控制下與單片機(jī)通信。從電路原理圖中可以清楚看到設(shè)備的單片機(jī)系統(tǒng)的構(gòu)成,幾個(gè)外圍器件的數(shù)據(jù)端口都接在單片機(jī)系統(tǒng)的數(shù)據(jù)總線上,讀/寫使能信號(hào)也接在一起,而它們的片選端有效則由不同的地址組合確定。2.4.1PS/2串行接口的擴(kuò)展設(shè)計(jì)PS/2接口擴(kuò)展可用于連接傳統(tǒng)的PS/2接口鍵盤或者鼠標(biāo),在單片機(jī)中使軟件的方法,使設(shè)備整體在邏輯上被主機(jī)認(rèn)為是一個(gè)USB接口的鍵盤或者鼠標(biāo),并且能夠正常工作。PS/2口引腳定義如表所列。表2.4PS/2接口引腳定義[18]引腳123456功能未定義Vcc未定義DataGndClkPS/2接口中有定義的引腳只有4個(gè),其中包含兩條電源和地,另外2條Data和Clk上傳輸?shù)腡TL電平信號(hào),可以直接用單片機(jī)來處理。Data和Clk被接在AT89S52的P3.0和P3.1端口上,這兩個(gè)端口也可以用做串行通信口RXD和TXD,但是由于PS/2接口信號(hào)是類似I2C總線信號(hào)的形式工作的,不能與AT89S52補(bǔ)充一點(diǎn):硬件上鍵盤的PS/2接口與鼠標(biāo)的PS/2接口實(shí)際上有區(qū)別,就是PS/2鼠標(biāo)一側(cè),Data和Clk兩個(gè)端口都是集電極開路OC輸出,而在主機(jī)的PS/2鼠標(biāo)接口上Data和Clk兩條線與Vcc之間都加了10KΩ的上拉電阻,這樣PS/2鼠標(biāo)的Data和Clk在主機(jī)不干預(yù)的情況下會(huì)直接浮為高電平;而鍵盤則不是OC輸出,主機(jī)的鍵盤接口一側(cè)也沒有上拉電阻。雖然PS/2接口存在這樣不一致的情況,但是AT89S52單片機(jī)的P1~P3端口內(nèi)已經(jīng)集成了上拉電阻,所以不需要在硬件上對(duì)此分別考慮。2Flash存儲(chǔ)器的擴(kuò)展設(shè)計(jì)為實(shí)現(xiàn)Flash移動(dòng)存儲(chǔ)器的功能,擴(kuò)展了一塊容量為16M×8字節(jié)的FlashE2PROM芯片SamsungK9F2808。該Flash芯片采用NAND技術(shù)集成,與傳統(tǒng)的NOR技術(shù)相比性能優(yōu)越、集成度非常高,所以才能以低廉的成本獲得大的容量。該芯片允許一百萬次以上的編程和擦除,并能保持?jǐn)?shù)據(jù)、達(dá)10年以上。且有硬件數(shù)據(jù)保護(hù)機(jī)制,防止誤操作引起的數(shù)據(jù)丟失。由于考慮到單片機(jī)編程方便和USB總線供電等因素,系統(tǒng)電路板的主要部件都使用了5V電源,而2808要求2.7~3.6V電源供電。。1117是一個(gè)低壓差電壓調(diào)節(jié)器,其壓差在1.2V輸出,負(fù)載電流為800mA時(shí)為1.2V。1117有可調(diào)電壓的版本,通過2個(gè)外部電阻可實(shí)現(xiàn)1.25~13.8V輸出電壓范圍。另外還有5個(gè)固定電壓輸出(1.8V、2.5V、2.85V、3.3V和5V)的型號(hào)。1117提供電流限制和熱保護(hù)。調(diào)節(jié)端通過一個(gè)旁路電容,可防止輸出電壓放大倍數(shù)的增加。輸出電容對(duì)于保持輸出電壓的穩(wěn)定性起著非常重要的作用,如果使用鉭電容,1117要求輸出電容的最小值為10uF。2808除了16M×8字節(jié)的存儲(chǔ)空間外,還集成了512K×8字節(jié)的備用空間,可以用作存放數(shù)據(jù)校驗(yàn)等冗余信息,以保證數(shù)據(jù)存放的可靠性。對(duì)于51單片機(jī),2808最突出的特點(diǎn)在于它是針對(duì)8位微處理器設(shè)計(jì)的。對(duì)于一般的51系列單片機(jī),它的地址總線只有16位,也就是說最多只能尋址到64KB空間。2808解決8位微處理器的這個(gè)局限是用了以下的方法:不再像傳統(tǒng)的存儲(chǔ)器那樣采用分離的外部地址總線和外部數(shù)據(jù)總線,數(shù)據(jù)總線用來尋址存儲(chǔ)器內(nèi)部的數(shù)據(jù)空間,而是通過內(nèi)部的一個(gè)控制邏輯,分時(shí)地從8位數(shù)據(jù)口輸入命令、地址和數(shù)據(jù),并以外部引腳片選和地址有效分3次送出24位地址,這樣就使16位數(shù)據(jù)總線和8位數(shù)據(jù)總線的51單片機(jī)可以輕松地尋址到16M字節(jié)空間。圖是K9F2808部分的電路原理圖,nCE、CLE、ALE以及附加的74245三態(tài)緩沖器的nE和DIR分別受到來自地址總線的A0、A1、A2、A4的控制。這樣連接使得以2808為主的這個(gè)Flash存儲(chǔ)器模塊有如以下的地址分配:2808的命令口(只寫):21h;2808的地址口(只寫):22h;2808的數(shù)據(jù)口(讀):24h;2808的數(shù)據(jù)口(寫):20h。圖Flash存儲(chǔ)器模塊電路原理圖2LPT并行接口的擴(kuò)展設(shè)計(jì)電路也擴(kuò)展了LPT并行接口,其引腳定義按照LPT打印機(jī)的接口定義預(yù)先連接了地線,其它引腳D0,D7,nStrobe,nACK,Busy,Pe,Sel,nAutoFd,nError,nInit和nSelIn分別連接在單片機(jī)的P0口,P2口,P3.3口上,如圖2.9所示。由于LPT模塊與基本模塊的8位撥碼開關(guān)輸入模塊共用P2口,所以在使用LPT模塊時(shí),應(yīng)禁止撥碼開關(guān)模塊的輸入,這里是通過模式選擇開關(guān)S1的低位接在用做總線開關(guān)的74245上的,故使用LPT模塊時(shí)應(yīng)保證該位為高電平。同時(shí),由P0向LPT接口的D0~D7讀/寫數(shù)據(jù)時(shí),由于同在系統(tǒng)總線上的D12和2808并不會(huì)受到影響。P2口和P3.3口按端口讀/寫的方式以及LPT并行接口的定義讀/寫接口的每一位。LPT接口模塊除了可以用做打印機(jī)擴(kuò)展之外,還可以重新定義它的引腳功能作其他數(shù)據(jù)傳輸之用,前提是單片機(jī)固件中相應(yīng)的描述符要更改為打印機(jī)之外的其它設(shè)備[9]。圖LPT并行接口的連接[6]注:系統(tǒng)整體電路圖見附錄1所示系統(tǒng)軟件設(shè)計(jì)硬件開發(fā)完了之后,如果沒有軟件的支持,USB設(shè)備不能實(shí)現(xiàn)任何功能,本章介紹系統(tǒng)的軟件設(shè)計(jì)。本系統(tǒng)的軟件設(shè)計(jì)包括三個(gè)大的方面:固件(Firmware)、WDM客戶驅(qū)動(dòng)(主機(jī)操作系統(tǒng)上的客戶驅(qū)動(dòng)程序)以及主機(jī)應(yīng)用軟件。主機(jī)應(yīng)用軟件通過客戶驅(qū)動(dòng)程序與設(shè)備進(jìn)行通信,由設(shè)備產(chǎn)生USB數(shù)據(jù)的傳輸動(dòng)作;固件則響應(yīng)各種來自設(shè)備的USB標(biāo)準(zhǔn)請(qǐng)求,完成各種數(shù)據(jù)的交換工作和事件處理。其中,USB設(shè)備中單片機(jī)控制器的固件程序的設(shè)計(jì)與實(shí)現(xiàn)是本章的重點(diǎn)。3.1固件程序的設(shè)計(jì)與實(shí)現(xiàn)固件是FireWare的中文意思,它實(shí)際上足單片機(jī)的程序文件,可以采用C語言或是匯編語言編寫。它的操作方式與硬件聯(lián)系緊密,包括USB設(shè)備的連接、USB協(xié)議、中斷處理等,它不是單純的軟件,而是軟件和硬件的結(jié)合,需要對(duì)端口、中斷和硬件結(jié)構(gòu)非常熟悉。在本系統(tǒng)中,當(dāng)PDIUSBD12從USB接受到一個(gè)數(shù)據(jù)包,就對(duì)CPU產(chǎn)生一個(gè)中斷請(qǐng)求,CPU立即響應(yīng)中斷。在ISR(中斷服務(wù)程序)中,固件讀取數(shù)據(jù),并將數(shù)據(jù)保存值到循環(huán)數(shù)據(jù)緩沖區(qū),隨后置柏應(yīng)事件的標(biāo)志位,CPU繼續(xù)前臺(tái)程序,檢測(cè)事件標(biāo)志,執(zhí)行完成相應(yīng)的事件任務(wù)。固件程序放入AT89S52的FlashMemory中,當(dāng)把設(shè)備連接到主機(jī)上時(shí),上位機(jī)可以發(fā)現(xiàn)新設(shè)備,然后建立連接。因此,編寫固件程序的一個(gè)最主要的目的就是讓W(xué)indows可以檢測(cè)和識(shí)別設(shè)備。3描述符USB的描述符定義了關(guān)于設(shè)備的各種信息,描述符是一種預(yù)定義的數(shù)據(jù)結(jié)構(gòu),每一個(gè)描述符的第1個(gè)字節(jié)都是該描述符的總字節(jié)數(shù)長(zhǎng)度,第2個(gè)字節(jié)則為該描述符自身類型的標(biāo)識(shí)。其中,設(shè)備描述符(devicedescriptor),配置描述符(configurationdescriptor),接口描述符(interfacedescriptor)和端點(diǎn)描述符(endpointdescriptor)為每個(gè)USB設(shè)備所必須有的,字符串描述符(stringdescriptor),各設(shè)備類不同的類描述符(classdescriptor)及報(bào)告描述符(reportdescriptor)則可以根據(jù)不同的設(shè)備進(jìn)行添加或刪減。在系統(tǒng)固件文件中,定義了系統(tǒng)所使用的各種USB描述符,它們的定義和作用如下:1)設(shè)備描述符設(shè)備描述符是設(shè)備接入主機(jī)之后向設(shè)備要求的第一個(gè)描述符。設(shè)備描述符包含了設(shè)備的基本信息,包括數(shù)據(jù)傳輸時(shí)設(shè)備遵守USB規(guī)范的版本、數(shù)據(jù)封包大小,以及設(shè)備包括的若干特定字符串描述符和配置描述符。2)配置描述符配置描述符向主機(jī)報(bào)告設(shè)備的配置信息,包括設(shè)備供電方式、最大電流等屬性,并指定了一個(gè)配置包含的接口數(shù)。對(duì)每個(gè)設(shè)備而言,可能會(huì)有一個(gè)或多個(gè)配置類型,其配置的數(shù)目由設(shè)備描述符的最后一個(gè)字段bNumConfigurations所設(shè)定的。3)接口描述符接口描述符用來描述設(shè)備的接口,指明接口的類型和遵循的傳輸協(xié)議等屬性。對(duì)一個(gè)設(shè)備的配置來說,可能是一種或多種接口類型,其接口的數(shù)目是由配置描述符的bNumInterface字段指定的。4)端點(diǎn)描述符號(hào)端點(diǎn)描述符用來描述端點(diǎn)的屬性以及各個(gè)端點(diǎn)的位置,包含此端點(diǎn)的傳輸方向、傳輸類型以及傳輸率等信息。每一個(gè)接口可能對(duì)應(yīng)一個(gè)或多個(gè)端點(diǎn),其端點(diǎn)數(shù)目由接口描述符的bNumEndpoints字段設(shè)定。5)類(HID)描述符類描述符的作用是告訴主機(jī)設(shè)備的類相關(guān)特性,它根據(jù)具體設(shè)備類的不同而不同。6)報(bào)告描述符報(bào)告描述符是USB中最復(fù)雜的描述符。報(bào)告描述符定義了設(shè)備傳送給主機(jī)和主機(jī)發(fā)送給設(shè)備的數(shù)據(jù)格式,并且告知主機(jī)該如何處理數(shù)據(jù)。在一個(gè)報(bào)告描述符中必須有以下項(xiàng)目:(1)輸入(input)、輸出(output)、特性(feature)或集合(collection);(2)用途(usage);(3)用途頁(usagepage);(4)邏輯最大值(logicalmaximum);(5)邏輯最小值(logicalminimum);(6)報(bào)告長(zhǎng)度(reportsize);(7)報(bào)告記數(shù)值(reportcount)。7)字符串描述符字符串描述符的結(jié)構(gòu)非常簡(jiǎn)單,它以文字形式存放了設(shè)備的一些說明信息。對(duì)很多USB設(shè)備來說,字符串描述符都不是必須的,但是字符串描述符的使用有助于提高設(shè)備界面的友好性。3固件程序的結(jié)構(gòu)1)固件結(jié)構(gòu)概述本系統(tǒng)的核心為AT89S52單片機(jī),從單片機(jī)的角度看,固件程序的結(jié)構(gòu)包括兩部分,即主程序和中斷子程序。主程序完成的工作是上電初始化PDIUSBD12、給全局變量置初值、初始化中斷系統(tǒng),初始化完成之后進(jìn)入死循環(huán),等待D12的中斷信號(hào)。中斷子程序只包括由D12觸發(fā)的INT0外部中斷,電平方式觸發(fā),單片機(jī)的其它中斷都是被禁止的。單片機(jī)初始化的最后一步將D12的SoftConnect功能打開,從這時(shí)起,主機(jī)才能檢測(cè)到設(shè)備的接入。初始化完成之后,主循環(huán)實(shí)際上不再參與USB通信,而只是做無用的死循環(huán)或設(shè)備的其他功能操作。每次PDIUSBD12接口芯片檢測(cè)到USB總線上主機(jī)發(fā)給這個(gè)設(shè)備的信號(hào)時(shí)候就觸發(fā)一次單片機(jī)的外部中斷。中斷處理子程序要做的工作就是首先D12讀取中斷信息,查看D12收到了什么樣的封包,然后根據(jù)主機(jī)的不同要求做出響應(yīng)。中斷程序所做的工作應(yīng)該包括對(duì)每個(gè)包的接收清除中斷標(biāo)志,以使D12能夠觸發(fā)下一次中斷[7]。設(shè)備固件程序結(jié)構(gòu)圖如圖所示。主程序中斷處理程序主程序中斷處理程序USB協(xié)議USB電氣接口驅(qū)動(dòng)擴(kuò)展功能圖設(shè)備固件功能結(jié)構(gòu)圖2)USB電氣接口驅(qū)動(dòng)(D12.C)USB電氣接口驅(qū)動(dòng)(D12.C)實(shí)現(xiàn)的功能是與PDIUSBD12接口芯片之間的通信。源文件實(shí)現(xiàn)4個(gè)函數(shù):d12comm()、d12read()、d12write()和d12delay()。d12comm()函數(shù)的原型為voidd12comm(unsignedcharcomm.),實(shí)現(xiàn)的功能是向D12接口芯片的命令口寫一個(gè)字節(jié)的命令字。D12芯片的命令端口地址在本系統(tǒng)中為0x11,定義為unsignedpdataD12_COMM_at_0x11,在D12.H頭文件中有定義。該端口為只讀。d12read()函數(shù)的原型為chard12read(void),實(shí)現(xiàn)的功能是從D12接口芯片的數(shù)據(jù)口讀一個(gè)字節(jié)的數(shù)據(jù)字。D12芯片的數(shù)據(jù)端口地址在本系統(tǒng)中為0x10,定義為unsignedcharvolatileD12_DATA_AT_0X10,在D12.H中定義。d12write()函數(shù)的原型為voidd12write(unsignedchardat),實(shí)現(xiàn)的功能是向D12接口芯片的數(shù)據(jù)口寫一個(gè)字節(jié)的數(shù)據(jù)字。D12delay()函數(shù)的原型為voidd12delay(void),它的功能是在兩次對(duì)D12芯片的操作間加入一定的延時(shí),這個(gè)函數(shù)只能在上面3個(gè)函數(shù)中使用。D12芯片要求在寫命令端口的操作與讀數(shù)據(jù)端口或?qū)懚丝诘牟僮髦g至少600ns以上的延時(shí),否則芯片工作結(jié)果不正確。一般將這個(gè)延時(shí)控制在10ms左右。3)主程序主程序(MAIN.C)完成的任務(wù)有設(shè)備上電后的初始化工作和主循環(huán)。在只實(shí)現(xiàn)基本USB設(shè)備功能的本系統(tǒng)中,目前單片機(jī)的外部器件中只需要對(duì)D12進(jìn)行初始化。D12一共有4條初始化的指令:設(shè)置地址/使能(setaddress/enable)、設(shè)置端點(diǎn)/使能(setendpoint/enable)、設(shè)置模式(setmode)以及設(shè)置DMA(setDMA)。說明:上電后默認(rèn)地址為0,暫時(shí)不需要改動(dòng),一般在收到設(shè)定地址的要求時(shí)再使用;SoftConnect為斷開狀態(tài),即這時(shí)主機(jī)檢測(cè)不到設(shè)備的接入,需軟件設(shè)置SoftConnect為連接狀態(tài)后主機(jī)才能檢測(cè)到設(shè)備接入;初始時(shí)鐘輸出為4MHz,本系統(tǒng)要求的系統(tǒng)時(shí)鐘為12MHz或24MHz;而設(shè)置DMA(setDMA)指令只要在設(shè)備內(nèi)部的D12和存儲(chǔ)器間使用DMA才會(huì)用到,本系統(tǒng)不用。所以,本系統(tǒng)上電時(shí)唯一需要用到的初始化指令是設(shè)置模式(setmode)。以下是初始化D12的單片機(jī)語句:d12comm(0xf3);d12write(0x16);d12write(0x43);d12comm(0xf3)表示向D12的命令端口寫字節(jié)0xf3(即setmode的命令字),接著通過d12write()函數(shù)向D12的數(shù)據(jù)端口寫2個(gè)字節(jié)的數(shù)據(jù)0x16和0x43,分別表示使SoftConnect狀態(tài)變?yōu)檫B接以及更改D12對(duì)單片機(jī)的時(shí)鐘輸出為12MHz。4)中斷處理程序本系統(tǒng)的中斷處理程序(ISR.C)流程如圖3.2所示。程序在進(jìn)入中斷處理函數(shù)入口后,先要讀D12的中斷狀態(tài)寄存器(指令F4),從讀出的第1個(gè)狀態(tài)字來判斷引發(fā)這一次中斷的是哪一個(gè)端點(diǎn)的哪一類傳輸(讀中斷狀態(tài)寄存器的指令返回值的定義見表所列)。表讀中斷寄存器返回值位76543210初始值00000000說明掛起狀態(tài)改變總線重置端點(diǎn)2輸入端點(diǎn)2輸出端點(diǎn)1輸入端點(diǎn)1輸出控制輸入控制輸出本系統(tǒng)設(shè)備中,固件程序只須處理端點(diǎn)0的輸出和輸入要求就可以完成設(shè)備的正常配置和基本工作。在圖3.2中,SOF包和總線重置的處理程序都是自定義的部分,是為了更好地配合設(shè)備工作而添加的代碼,與設(shè)備的實(shí)質(zhì)沒有太大關(guān)系;而掛起狀態(tài)改變引起的中斷在這里不需要做處理;由于USB的數(shù)據(jù)傳輸都是由D12自動(dòng)完成,端點(diǎn)1和2的輸出/輸入中斷處理就沒有什么實(shí)質(zhì)內(nèi)容。讀中斷狀態(tài)寄存器讀中斷狀態(tài)寄存器判斷中斷類型端點(diǎn)0輸出端點(diǎn)0輸入端點(diǎn)1、2輸入輸出SOF包掛起總線重置接收SETUPBAOBAO響應(yīng)設(shè)備要求讀傳輸狀態(tài)寄存器自定義自定義圖中斷處理程序流程圖注意:在對(duì)端點(diǎn)0、1和2的輸出/輸入引發(fā)中斷的處理時(shí),必須要做這樣一步操作:讀上次傳輸狀態(tài)寄存器(40~45)。通過這條指令清除相應(yīng)端點(diǎn)的中斷狀態(tài),表示已讀此端點(diǎn),只有這樣D12向單片機(jī)的中斷請(qǐng)求才會(huì)撤除,否則單片機(jī)將不得不持續(xù)中斷狀態(tài)(中斷方式為電平出發(fā))。所以,中斷處理程序的功能就是從端點(diǎn)0(控制端點(diǎn))輸出得到主機(jī)的各項(xiàng)設(shè)備要求,把設(shè)備要求發(fā)送USB協(xié)議層譯碼,得到相應(yīng)的描述符,再把描述符按指定的包長(zhǎng)打包,最后通過USB接口D12的端點(diǎn)0輸入送往主機(jī)。簡(jiǎn)言之,中斷處理程序的功能就是協(xié)調(diào)在USB電氣接口與USB通信協(xié)議之間的數(shù)據(jù)傳輸。5)USB通信協(xié)議實(shí)現(xiàn)USB通信協(xié)議實(shí)現(xiàn)(USB.C)的功能就是響應(yīng)主機(jī)提出的設(shè)備要求。響應(yīng)函數(shù)對(duì)設(shè)備要求bmRequest域和Request域的譯碼,確定設(shè)備要求的類別;然后在存放存儲(chǔ)區(qū)的所有描述符中找到合適的描述符;再把這個(gè)描述符返回給主機(jī)[8]。注:固件程序的源代碼見附錄2。3.2驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)在設(shè)備硬件和單片機(jī)固件都開發(fā)調(diào)試通過之后,主機(jī)就能夠正確識(shí)別設(shè)備了,但主機(jī)與USB設(shè)備的信息交互是通過軟件來實(shí)現(xiàn)的。主機(jī)軟件開發(fā)在本系統(tǒng)中占很大的分量也是本系統(tǒng)設(shè)計(jì)的難點(diǎn)之一。USB主機(jī)系統(tǒng)軟件開發(fā)分為兩部分:主機(jī)操作系統(tǒng)上的客戶驅(qū)動(dòng)程序以及主機(jī)應(yīng)用程序。主機(jī)應(yīng)用程序通過驅(qū)動(dòng)程序與系統(tǒng)USBI(USBDeviceInterface)進(jìn)行通信,其主要任務(wù)是根據(jù)所需處理功能的要求來完成各種基于Windows程序的處理[13]。3驅(qū)動(dòng)程序概述設(shè)備驅(qū)動(dòng)程序是保證用戶應(yīng)用程序軟件訪問設(shè)備硬件的程序軟件。設(shè)備驅(qū)動(dòng)程序的任務(wù)是在應(yīng)用層和硬件控制代碼之間進(jìn)行轉(zhuǎn)換操作。應(yīng)用層的代碼為操作系統(tǒng)提供函數(shù),硬件代碼則包括了訪問外部設(shè)備的必要協(xié)議。在Windows操作系統(tǒng)中,程序代碼以以下兩種方式之一運(yùn)行:用戶或內(nèi)核。在訪問內(nèi)存和其它系統(tǒng)資源時(shí),允許代碼有不同的優(yōu)先級(jí)。應(yīng)用程序必須運(yùn)行在用戶模式下,一般不允許直接操作I/O端口,除非驅(qū)動(dòng)預(yù)留了端口。驅(qū)動(dòng)程序一般運(yùn)行在內(nèi)核模式下。在內(nèi)核模式下,代碼運(yùn)行在Ring0模式,不限制訪問系統(tǒng)資源,可以直接執(zhí)行內(nèi)存管理指令和訪問I/O端口。[15]。3WDM設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)一個(gè)WDM設(shè)備驅(qū)動(dòng)程序的功能模塊一般包括如下的幾個(gè)部分:初始化。創(chuàng)建和刪除設(shè)備。處理Win32程序打開和關(guān)閉文件句柄的要求。處理Win32的輸入/輸出(I/O)請(qǐng)求。實(shí)現(xiàn)對(duì)設(shè)備的串行化訪問。訪問硬件。取消I/O請(qǐng)求。超時(shí)I/O請(qǐng)求。調(diào)用其它驅(qū)動(dòng)程序。處理電源管理請(qǐng)求。處理Windows管理診斷(WMI)向系統(tǒng)管理員報(bào)告。處理一個(gè)可熱插拔的設(shè)備被加入或刪除的情況。其中“初始化”模塊是一定不能少的,其它模塊可選。3驅(qū)動(dòng)程序開發(fā)的工具軟件Windows設(shè)備驅(qū)動(dòng)程序的開發(fā)工具應(yīng)用比較廣泛的有:一種是DDK。使用DDK開發(fā)過程靈活,開發(fā)出的驅(qū)動(dòng)程序的代碼效率高,與操作系統(tǒng)結(jié)合好。但是用DDK開發(fā),需要系統(tǒng)程序員對(duì)計(jì)算機(jī)計(jì)算機(jī)硬件和Windows操作系統(tǒng)相當(dāng)熟悉,而且開發(fā)過程大部分場(chǎng)合都直接使用匯編語言編程,一般來說難度太大,這里不采用這種開發(fā)工具。另一種具有代表性的有VtoolsD和DriverWorks等開發(fā)工具軟件。這類工具一般以源代碼和庫函數(shù)調(diào)用的形式提供給開發(fā)者許多現(xiàn)成的設(shè)備底層驅(qū)動(dòng)支持,開發(fā)者只需要調(diào)用工具中的預(yù)定義類和底層驅(qū)動(dòng)接口就可以方便地生成符合用戶要求的完整驅(qū)動(dòng)程序。使用這類工具開發(fā)驅(qū)動(dòng)程序不如使用DDK靈活,但大大減小開發(fā)者的工作量和難度,縮短了開發(fā)周期。WinDriver工具軟件就是這樣的一種開發(fā)工具,但它與VtoolsD、DriverWorks等開發(fā)工具又不同。區(qū)別在于DriverWorks等工具可以開發(fā)出獨(dú)立但是完整的驅(qū)動(dòng)程序,而使用WinDriver軟件時(shí)工具只提供一個(gè)設(shè)備安裝信息文件(.inf),真正的驅(qū)動(dòng)程序在安裝WinDriver時(shí)就已經(jīng)加載了。3用WinDriver開發(fā)驅(qū)動(dòng)程序在USB設(shè)備已經(jīng)有主機(jī)列舉成功后,就可以使用WinDriver開發(fā)調(diào)試USB驅(qū)動(dòng)程序了。打開DriverWizard,建立一個(gè)新的工程,在彈出的CardInformation窗口中,如圖所示,就可以看到要生成驅(qū)動(dòng)程序的設(shè)備信息,有接口類型、生產(chǎn)廠商和ProductID3個(gè)設(shè)備信息。單擊Generate.INFfile按鈕,就可以生成設(shè)備的一個(gè)硬件配置信息文件,Windows操作系統(tǒng)就可以按照這個(gè)文件中的內(nèi)容來為設(shè)備配置驅(qū)動(dòng)程序,實(shí)際的驅(qū)動(dòng)程序一直存放在WinDriver的安裝目錄下。當(dāng)設(shè)備初次接入時(shí),將被系統(tǒng)識(shí)別為標(biāo)準(zhǔn)的人機(jī)接口設(shè)備HID,并自動(dòng)為其安裝驅(qū)動(dòng)程序,之后操作系統(tǒng)將對(duì)這個(gè)設(shè)備類似對(duì)鼠標(biāo)鍵盤的方式不停查詢(電路板的GoodLink指示LED不停閃爍,而且計(jì)數(shù)器的8位LED輸出也在不停的變化),這時(shí)用戶就無法對(duì)其與主機(jī)的數(shù)據(jù)傳輸進(jìn)行監(jiān)控,所以就必須為其安裝專用的驅(qū)動(dòng)程序。圖CardInformation窗口在按照上述步驟生成并保存.inf文件之后,再到Windows的設(shè)備管理器窗口中為設(shè)備更換驅(qū)動(dòng)程序,系統(tǒng)設(shè)置安裝的路徑為剛才保存.inf文件的路徑,操作系統(tǒng)就會(huì)把設(shè)備的驅(qū)動(dòng)程序安裝為新的驅(qū)動(dòng)程序。之后就會(huì)發(fā)現(xiàn)設(shè)備的掃描已經(jīng)暫時(shí)停止了(這時(shí)電路板的GoodLink指示LED不再閃爍,計(jì)數(shù)器不顯示輸出)。這表明驅(qū)動(dòng)程序的安裝已經(jīng)完成,之后就可以基于這個(gè)驅(qū)動(dòng)程序來編寫應(yīng)用程序,來控制與設(shè)備的數(shù)據(jù)交換了。3.3系統(tǒng)應(yīng)用程序開發(fā)3應(yīng)用程序的實(shí)現(xiàn)的功能應(yīng)用程序是基于驅(qū)動(dòng)程序提供的接口工作的,所以本系統(tǒng)涉及的應(yīng)用程序必須調(diào)用WinDriver提供的驅(qū)動(dòng)程序接口。應(yīng)用程序是處在應(yīng)用層的上層軟件,它提供了用戶界面,通過應(yīng)用程序可以對(duì)設(shè)備實(shí)行控制。本系統(tǒng)的應(yīng)用程序的開發(fā)是為了更好的實(shí)現(xiàn)數(shù)據(jù)的傳輸,把USB設(shè)備中數(shù)據(jù)的傳輸過程動(dòng)態(tài)地呈現(xiàn)出來,讓使用者能夠直觀地看到主機(jī)對(duì)設(shè)備的控制,即數(shù)據(jù)的接收和發(fā)送。3利用WinDriver實(shí)現(xiàn)應(yīng)用程序在安裝好WinDriver提供的驅(qū)動(dòng)程序之后,從新打開DriverWizard,建立一個(gè)新工程;在CardInformation對(duì)話框中選擇要控制的USB設(shè)備,然后單擊確定;這時(shí)就可以彈出的Resource窗口中看到設(shè)備支持的所有管線,并通過右側(cè)的幾個(gè)按鈕來讀/寫指定管線,觀察主機(jī)與設(shè)備的數(shù)據(jù)交換過程。在Build菜單中選擇GenerateCode,WinDriver就會(huì)提示生成一個(gè)應(yīng)用程序的工程源代碼,打開VC對(duì)所建工程編譯連接,就可以對(duì)得到一個(gè)控制臺(tái)的可執(zhí)行程序,這個(gè)程序運(yùn)行同樣可以用來對(duì)設(shè)備的所有管線進(jìn)行讀/寫。WinDriver工具軟件生成的驅(qū)動(dòng)程序提供了一些間接控制設(shè)備硬件的接口函數(shù),可以完成USB通信的大部分功能,現(xiàn)將WinDriver的部分操作USB設(shè)備的函數(shù)列表。當(dāng)設(shè)備接入主機(jī)之后,從應(yīng)用程序中可以開啟和關(guān)閉設(shè)備。開啟設(shè)備之后,就可以顯示設(shè)備和管線信息等USB設(shè)備的固有屬性。單擊“監(jiān)聽管線”后,應(yīng)用程序通過驅(qū)動(dòng)程序?qū)υO(shè)備的中斷端點(diǎn)進(jìn)行掃描,這時(shí)設(shè)備單片機(jī)內(nèi)部的記數(shù)值就會(huì)發(fā)給主機(jī),在應(yīng)用程序的文本框中就會(huì)顯示出來[12]。表WinDriver庫函數(shù)函數(shù)名功能USB_RegisterWinDriverWinDriver注冊(cè),所有程序必須調(diào)用USB_Open打開USB設(shè)備USB_Close關(guān)閉USB設(shè)備USB_GetDeiverInfo讀取設(shè)備信息USB_ResetDevice設(shè)備復(fù)位BOOLUSB_ResetPipe管線復(fù)位USB_ReadWritePipes讀寫管線USB_ReadPipe00讀00管線USB_WritePipe00寫00管線USB_StopTransferPipe0000管線停止傳輸U(kuò)SB_ReadPipe81讀81管線USB_StopTransferPipe8181管線停止傳輸系統(tǒng)調(diào)試系統(tǒng)電路設(shè)計(jì)完之后,需要對(duì)系統(tǒng)硬件和軟件進(jìn)行調(diào)試。為方便調(diào)試,硬件部分一開始只搭建了USB基本功能模塊,即由AT89S52和PDIUSBD12以及其外圍器件構(gòu)成的模塊。USB基本功能電路調(diào)試通過以后,再加入擴(kuò)展功能模塊來實(shí)現(xiàn)完整的系統(tǒng)。由于本系統(tǒng)的軟件調(diào)試過程,都是在軟件工具WinDriver的輔助下,在硬件的基礎(chǔ)上進(jìn)行的,所以軟件的調(diào)試基本上可以稱為系統(tǒng)調(diào)試。4.1系統(tǒng)硬件測(cè)試系統(tǒng)硬件搭建完畢以后,需要對(duì)硬件調(diào)試。對(duì)系統(tǒng)硬件調(diào)試,主要按以下步驟來實(shí)現(xiàn):1)看板子是否通。首先用眼睛看電路板是否有虛焊、脫焊,有問題的地方重新焊接;然后對(duì)照電路原理圖,分模塊以系統(tǒng)的核心器件為中心,發(fā)散到外圍器件,利用萬用表,認(rèn)真檢查每一條線走的是否正確,保證線路

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論