AT89C51單片機USB接口驅動和應用程序的開發(fā)畢業(yè)論文_第1頁
AT89C51單片機USB接口驅動和應用程序的開發(fā)畢業(yè)論文_第2頁
AT89C51單片機USB接口驅動和應用程序的開發(fā)畢業(yè)論文_第3頁
AT89C51單片機USB接口驅動和應用程序的開發(fā)畢業(yè)論文_第4頁
AT89C51單片機USB接口驅動和應用程序的開發(fā)畢業(yè)論文_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、北方民族大學學士學位論文論文題目: at89c51單片機usb接口驅動和應用程序的開發(fā) 院(部)名 稱: 電信學院 學 生 姓 名: 楊闖 專 業(yè): 測控技術與儀器 學 號: 20060249 指導教師姓名: 周春艷 論文提交時間: 2010年5月24日 論文答辯時間: 2010年5月29日 學位授予時間: 北方民族大學教務摘 要通用串行總線usb是一種新興的并逐漸取代其他接口標準的數(shù)據通信標準。usb,由于速度快,使用方便靈活,易于擴展,支持即插即用,成本低廉等一系列優(yōu)點,得到了廣泛的應用。本論文以基于usb總線的數(shù)據采集系統(tǒng)的研制過程為主要內容,闡述了利用ch372與atmel的at89c

2、51等組成的一套數(shù)據采集系統(tǒng)的設計方案、開發(fā)方法和開發(fā)過程,并給出了具體實現(xiàn)方案。論文首先簡要介紹了usb總線的相關內容,然后介紹了數(shù)據采集系統(tǒng)的設計。數(shù)據采集系統(tǒng)的設計包括硬件設計、固件程序開發(fā)、驅動程序開發(fā)和應用程序開發(fā)四部分。在硬件設計部分,首先介紹了設計中所用的ch372的性能和特點,然后給出了具體硬件設計方案,并對設計中應該注意的問題進行了說明。驅動和應用程序主要完成usb設備的讀寫和即插即用功能,并提供一個友好的人機界面,對數(shù)據采集系統(tǒng)進行控制并顯示采集后的數(shù)據。本論文已完成了基于usb總線的數(shù)據采集系統(tǒng)的設計,用其實現(xiàn)了基本的數(shù)據采集功能。使用usb總線傳輸數(shù)據,為數(shù)據采集系統(tǒng)與

3、計算機之間的通訊開辟了新的道路。關鍵詞:usb、驅動程序、應用程序、at89c51、ch372abstractuniversal serial bus usb is one kind of emerging and replace other interface standards of data communication standards. usb, due to fast, convenient and flexible easy to expand, to support plug and play, low cost advantages, such as widely appli

4、cation.the paper is mainly concerned with design process of data acquisition system that is based on usb bus. the design scheme, developing method and developing process of a suit of data acquisition system used with ch372 and atmels at89c51 are expatiate. in addition, the paper also gives the mater

5、ial realization scheme.at fist, the paper introduces the protocol of usb bus in brief, and then discusses the design of data acquisition system, which includes four parts, hardware design, firmware design, device driver and application program. in hardware part, the performance of ch372 is fistly de

6、scribed; then the hardware scheme are given in detail; the questions which should be paid attention to in design is explained. drivers and applications of the main equipment and usb plug and play function, and provide a friendly human-machine interface, control of data acquisition system and display

7、 the data collection.the paper has finished the design of data acquisition system based on usb bus and realized the basal data acquisition foundation. using usb bus to transfer data blazed a way in communication between data acquisition system and computer.keywords: usb、drive、applications、at89c51、ch

8、372目 錄第1章 緒論11.1 引言11.2 usb的特點11.3 usb實時數(shù)據采集系統(tǒng)的實現(xiàn)方案3第2章 usb體系簡介42.1 體系概述42.2 usb的傳輸類型52.3 usb的設備狀態(tài)7第3章 usb數(shù)據采集系統(tǒng)的硬件設計113.1 usb 接口方案113.2 usb接口的硬件設計113.2.1 ch372簡介113.2.2 usb接口的硬件電路設計163.3 usb接口硬件的實現(xiàn)173.3.1時鐘電路173.3.2 復位電路183.3.3 a/d轉換電路183.3.4 ch372接口電路193.3.5 單片機擴展ram接口電路20第4章 usb數(shù)據采集系統(tǒng)設備固件編寫214.1

9、固件設計方案及工作流程214.1.1固件的設計思想214.1.2固件的工作流程214.2固件開發(fā)224.2.1主循環(huán)模塊(mainloop.c)224.2.2外接口模塊224.2.3 ch375_init初始化模塊234.2.4上傳數(shù)據塊模塊234.2.5上傳中斷數(shù)據模塊23第5章 usb設備驅動程序及應用程序245.1驅動開發(fā)工具的選擇245.2 wdm概述245.3 主要模塊設計255.3.1 初始化模塊255.3.2即插即用管理模塊265.3.3io控制模塊285.4 應用程序設計與實現(xiàn)285.4.1 操作例程及初始化285.4.2 設備讀寫接口程序的實現(xiàn)295.4.3 數(shù)據傳輸程序的設

10、計和實現(xiàn)305.5 用戶應用程序的具體實現(xiàn)34結束語35致謝36參考文獻37附錄一38附錄二39第1章 緒論1.1 引言現(xiàn)代工業(yè)生產和科學研究對數(shù)據采集系統(tǒng)的要求日益提高,目前比較通用的方法已逐漸不能適應其要求。例如在pc機及工控機內安裝數(shù)據采集板卡,如a/d卡、422卡或485卡等。這些數(shù)據采集系統(tǒng)存在以下缺陷:安裝麻煩;價格昂貴;受計算機插槽數(shù)量、地址、終端資源的限制,可擴展性差;在一些電磁干擾性強的測試現(xiàn)場,無法專門對其做電磁屏蔽,導致采集的數(shù)據失真等。usb是universal serial bus的簡稱,譯為通用串行總線。usb是一種外設總線,所不同的是,它是由intel、compa

11、q、digital、ibm、microsoft、nec及northern telecom等幾家計算機和通信公司聯(lián)合制訂的,并成為了行業(yè)標準。目前usb 1.1標準得到了廣泛支持。2000年初,usb 2.0標準問世,usb 2.0以480mb/s的傳輸速率得到了廣泛關注,在一定基礎上代表了計算機接口的發(fā)展趨勢。1.2 usb的特點usb作為新一代的計算機接口,具備如下特點:(1)低成本。為了把外圍設備連接到計算機上去,usb提供了一種低成本的解決方案,所有系統(tǒng)的智能機制都駐留在主機并嵌入芯片組中,方便了外設的制造。(2)熱插拔。usb實現(xiàn)了真正的“即插即用”功能。設備連接后由usb自檢測,并且

12、由軟件自動配置,完成后立刻就能使用,不需要用戶進行干涉。在操作系統(tǒng)方面,由主機負責掃描總線上的所有接口,自動識別usb設備的插拔,并相應的加載或卸載設備驅動程序,實現(xiàn)了即插即用功能。(3)單一的連接器類型。usb定義了一種簡單的連接器,僅使用一個四芯電纜,即可用來連接任何一個usb設備。多個連接器可以通過usb集線器連接。(4)最多可通過網絡連接127個設備,每個usb總線支持127個設備的連主機 roothubroot hub設備設備設備設備設備設備hubhub圖1.1 樹形拓撲結構示意圖接,其樹形拓撲結構如圖1.1所示。在圖1.1中,每個hub集線器可向上連接到另一個hub,深度可達5層。

13、由于協(xié)議中規(guī)定使用8位數(shù)據尋址,因此每一個主機最多可連接127個設備。(其中0x00地址用于缺省地址,在設備剛入網或復位時使用)(5)如圖1.1所示,無論多少個設備連接在系統(tǒng)中,主機只給usb主控制器分配固定的i/o地址和中斷向量,不會額外占用系統(tǒng)資源。(6)usb有兩種設備傳輸率:1.5mb/s和12mb/s,并且兩種速率能夠自適應轉換。usb 2.0的傳輸速率可達480mb/s。(7)獨立供電。usb設備提供總線供電和自供電兩種方式,通過集線器向設備提供電源。當外設的電源要求電壓為5伏且電源小于500ma時,可以直接從usb總線獲取電源,這樣usb設備就無需專用電源線,從而降低了設備的成本

14、。(8)錯誤檢測和恢復。usb事物處理包括錯誤檢測機制,它們用于確保數(shù)據無錯誤發(fā)送。在發(fā)生錯誤時,事物處理可以重新進行。(9)電源保護。如果連續(xù)3ms沒有總線活動,則usb會自動進入掛起狀態(tài),處于掛起狀態(tài)的設備消耗的電流不超過500ua。(10)支持四種類型的傳輸方式。usb定義了四種不同的傳輸類型來滿足不同設備的需求,這些傳輸類型包括等待傳輸、塊傳輸、中斷傳輸和控制傳輸?;趗sb總線的數(shù)據采集系統(tǒng),充分利用了usb總線的優(yōu)點,有效解決了傳統(tǒng)數(shù)據采集系統(tǒng)的缺陷,是數(shù)據采集系統(tǒng)設計的一種較好選擇。1.3 usb實時數(shù)據采集系統(tǒng)的實現(xiàn)方案usb數(shù)據采集系統(tǒng)的硬件模塊包括多路模擬開關、a/d轉換器

15、、微控制器和usb接口芯片等。硬件總體結構如圖1.2所示。微控制器usb芯片 模擬開關a/d轉換器pc機 多 路 信 號圖1.2 usb實時數(shù)據采集系統(tǒng)的硬件模塊系統(tǒng)的模擬開關、a/d轉換器均采用傳統(tǒng)的設計方法,根據系統(tǒng)功能、采集的精度、速率、通道數(shù)等諸元素選擇合適的芯片。微控制器采用了atmel公司的at89c51,usb接口芯片采用ch372。usb數(shù)據采集系統(tǒng)的軟件包括usb設備驅動程序、設備固件、主機端應用程序三部分。我主要負責使用delphi語言進行usb設備驅動程序和應用的開發(fā)。其中設備固件對數(shù)據采集系統(tǒng)進行控制,還要控制usb接口芯片實現(xiàn)usb協(xié)議。這要求設計者不僅熟悉delph

16、i程序設計,還要熟悉usb協(xié)議windows核心態(tài)。第2章 usb體系簡介2.1 體系概述usb 體系包括“主機”、“設備”以及“物理連接”三個部分。其中主機是一個提供usb 接口及接口管理能力的硬件、軟件及固件的復合體,可以是pc,也可以是otg 設備。從圖2.1中可以看出usb采用分層的星型拓撲來連接所有的usb設備。(圖中的func代表usb設備):圖2.1 usb體系圖在任何usb系統(tǒng)中都只有一個主機,它是usb通信的中心。主機管理總線,就必須知道總線上有哪些設備,以及每個設備的功能??偩€上的各個設備有不同的要求,這些設備都在企圖同時性的傳輸數(shù)據。主機必須讓每一個設備都可以正確地發(fā)送和

17、接收數(shù)據。主機所完成的usb相關工作:1、為外圍設備提供電源;2、檢測設備的連接和移除;3、檢查數(shù)據的錯誤;4、管理數(shù)據通信、5、與外圍設備交換數(shù)據。usb 集線器最基本的作用是作為與設備融合為一體的分離器和中繼器。集線器在 usb 設備和主機之間提供了電接口。集線器直接負責支持能使 usb 用戶友好并讓用戶方便易用的各種屬性。集線器提供了超越主機實施所能提供的額外結合點,并重播了在面對上行端口及面對下行端口上查看的所有通信量。集線器可以檢測其下行端口上的連接與斷開情況,并將此信息報告給主機。此外,集線器必須能夠支持與下行端口相連的 usb 外設的所有速度或類型, 集線器必須能夠從所有因連接目

18、標錯誤條件引發(fā)的總線故障中檢測和恢復。此外,集線器負責為其下行端口管理電源,并將所有的電源問題報告給主機從而通知用戶。usb協(xié)議規(guī)范為集線器定義了兩種不同的電源類型:總線供電和自加電。usb設備是帶有usb接口并可以完成特定功能的外設,它通過usb總線發(fā)送和接收數(shù)據/控制信息。每個usb設備都包含設置信息,來描述該設備的性能和所需資源。在功能部件使用前,主機要對其進行設置。設置信息包括usb帶寬分配,選擇設備的設置信息等。目前usb設備是usb總線中發(fā)展最快的部分,常見usb外設有:鼠標或光筆、鍵盤等。2.2 usb的傳輸類型usb通過通道在主機緩沖區(qū)與設備端點間傳送數(shù)據。在消息通道中傳遞的數(shù)

19、據具有usb定義的格式,它在數(shù)據凈荷區(qū)中包含的數(shù)據允許具有設備指定的格式。usb要求任何在通道上傳送的數(shù)據均被打包,數(shù)據的解釋工作由客戶層軟件和應用層軟件負責。usb協(xié)議中規(guī)定了四種不同的數(shù)據傳送類型,每種傳送類型在以下的幾個傳送特征上會有不同: usb規(guī)定的數(shù)據格式; 信息流的方向; 數(shù)據凈荷區(qū)的長度限制; 總線訪問的限制; 延時的限制; 出錯處理。usb設備的設計者可以決定設備上每個端點的能力。一旦為這個端點建立了一個通道,這個通道的絕大多數(shù)傳送特征也就固定下來了,一直到這個通道被取消為止。usb定義了4種傳送類型:(1) 控制傳送 控制傳輸屬于突發(fā)式、非周期性的,由主機軟件發(fā)起的請求或響

20、應的通信,它用于支持在客戶軟件和功能設備之間的關于設置信息、命令信息、狀態(tài)信息的傳送??刂苽魉鸵话阌扇齻€階段組成:首先是設置階段,通過(setup stage)包建立聯(lián)系,把請求信息從主機傳到它的應用設備;接下來是數(shù)據階段(data stage),零個或多個數(shù)據傳送事物按照setup包中指明的方向傳送數(shù)據;最后是狀態(tài)信息的回傳,應用設備將狀態(tài)信息傳到主機??刂苽魉褪褂玫氖窍⑼ǖ郎想p向信息流。所以,一旦一個控制通道被確認之后,這個通道就使用了具有某個端點號的兩個端點,一個輸入,一個輸出。(2) 同步傳送 usb要求等時傳送能提供以下幾點:固定的延遲下,確保對usb帶寬的訪問;只要數(shù)據能提供得上

21、,就能保證通道上的恒定數(shù)據傳送速度;由于錯誤而造成的傳送失敗時,并不重傳數(shù)據。只有高速設備可以使用等時傳送。usb設備要求一個幀內不能有超過90%的時間用于等時傳送或中斷傳送(因為嗎,每幀都得保留10%的時間用于控制傳送)。等時傳送不支持因總線錯誤而進行的重傳。接收器可以判斷是否發(fā)生了一個錯誤。一般情況下,可以由握手信號來通知發(fā)送者包是否被成功的接收。對于等時傳送來說,定時比正確性和重傳更重要??紤]到總線的錯誤率較低,協(xié)議認為傳送一般均能成功。同步接受者可以判斷自己是否在一個幀內錯過了一些數(shù)據,而且知道丟失了多少數(shù)據。(3) 中斷傳送 中斷傳送是低頻率、固定延遲的通信。中斷傳送適用于那些請求傳

22、輸?shù)念l率不高,但是必須在指定時間內完成傳輸?shù)臄?shù)據。一般的應用包括usb的鍵盤、鼠標、游戲桿和集線器的狀態(tài)報告。中斷傳輸需要快速地向主機報告當前的狀態(tài),這是由設備的屬性和使用的場合所決定的。要在usb上進行中斷傳送,必須在每個周期對端口進行訪問。主機無法知道一個端口何時準備好一個中斷傳送,除非它訪問這個端點,并同時請求一個中斷傳送,等待回答。如果端口無數(shù)據需要中斷傳送,就請求其回送一個nak信號。如果端口傳送數(shù)據時會有中斷情況發(fā)生,一定要用中斷傳送,以防中斷產生時,客戶軟件誤以為irp結束。長度為0的數(shù)據凈荷區(qū)的傳送是合法的,而且對某些實現(xiàn)是很有用的。低速、全速和高速設備都支持中斷傳送。中斷傳送

23、支持像游戲手柄,鼠標和鍵盤等輸入設備,這些設備與主機間數(shù)據傳輸量小,無周期性,但對響應時間敏感,要求馬上響應。(4) 批量傳送 批量傳送支持在不確定時間進行的相當大量的數(shù)據通信,它可以利用任何可獲得的帶寬,批量傳送有以下特點: 可以獲得帶寬訪問總線; 如果總線出現(xiàn)錯誤,傳送失敗,可進行重發(fā); 可以保證數(shù)據必能被發(fā)送,但不能保證帶寬和延遲;只有當可獲得帶寬時,批量傳送才會發(fā)生。如果usb有較多的空閑帶寬0則批量傳送發(fā)生地相對頻繁,如果空閑帶寬較少,則可能有很長時間沒有批量傳送發(fā)生。通常打印機、掃描儀和數(shù)字相機以這種方式與主機聯(lián)接。2.3 usb的設備狀態(tài)usb設備狀態(tài)共有6個,分別是連接(att

24、ached)、加電(powered)、缺省(default)、地址(address)、配置(configured)和掛起(suspended),下面將分別對各個狀態(tài)的具體含義進行介紹:(1) 連接狀態(tài) 連接狀態(tài)又稱接入狀態(tài),表示設備剛接入集線器的某下游接口上,如果此集線器是配置好的,集線器會通過中斷傳輸通知給運行于主機端的集線器驅動程序,設備進入加電狀態(tài);否則設備將停留在接入狀態(tài)。(2) 加電狀態(tài)設備接入總線后帶電時的狀態(tài)稱為加電狀態(tài)。通過總線的端口獲得電源的模式稱為總線供電模式(bus-powered)。設備對電源支持能力是通過配置描述符(configuration descriptor)反

25、映的。一個設備可以既支持自供電模式,又支持總線供電模式。自供電的接口功能和總線供電的接口功能是有區(qū)別的。當設備處于加電狀態(tài)后,集線器發(fā)出一個復位命令,激活連接端口,使連接的設備可以與主機進行通信,這時設備進入缺省狀態(tài)。(3) 缺省狀態(tài)缺省狀態(tài)表示設備使用總線的缺省地址與usb主機進行通信時的狀態(tài)。設備在加電以后,端口在收到復位信號之前不應響應總線的任何傳輸,因為它還沒有地址。等到復位完成后,此設備獲得了肚子使用總線缺省地址0的權力,所以此狀態(tài)為缺省狀態(tài)??偩€的缺省地址0是被總線上所有設備共享的,每一個時刻只能有一個設備處于缺省狀態(tài),這種按次序占用總線缺省地址的功能一般由集線器驅動程序實現(xiàn)。通過

26、缺省地址,主機可以識別這個新接入的設備,并通過設備的默認控制端點0獲得它的設備描述符(通過get_descriptor命令),并為設備設置一個唯一的設備地址(通過set_address命令)當設備的唯一地址被成功設置后,設備將進入地址狀態(tài)。(4) 地址狀態(tài)地址狀態(tài)表示設備獲得一個唯一的設備地址。從此之后,主機將通過此地址識別這個設備。當usb設備處于掛起狀態(tài)時,它仍然保持這個地址不變。進入地址狀態(tài)時,為了使設備正常工作,usb主機會對此設備進行進一步的配置,包括獲得設備的描述符、各種配置符以及每種配置描述符下的接口描述符和端點描述符等。這些工作完成后設備將進入配置完成狀態(tài)(簡稱配置狀態(tài))。(5

27、) 配置狀態(tài)配置狀態(tài)表示主機激活了設備的某個配置,從此設備將在此配置下工作。在usb設備正常工作以前,設備必須被正確配置。從設備的角度來看,它必須保存主機為它配置的當前活動的配置信息。需要注意的是,即使是在i/o設備已經處于設置的狀態(tài),主機仍然可以發(fā)送控制請求。實際上如果設備有多個配置,主機可以發(fā)送一個set_configuration請求來指配置使i/o設備返回到它的地址狀態(tài),暫停設備傳輸活動。(6) 掛起狀態(tài)如果一個i/o設備檢測到總線沒有活動的時間達到3ms,它就要轉移到低功耗的掛起狀態(tài),在這個狀態(tài)下它從總線取得的電流不大于0.5ma。這時,usb設備保持當前的內部狀態(tài),包括它的設備地址

28、及配置值信息等??偩€沒有活動的時間達到3ms,表明主機已經停止發(fā)送sof包。這時因為主機關機或進入睡眠狀態(tài)。如果主機關機,則沒有必要使大多數(shù)i/o設備保持加電狀態(tài)。在掛起狀態(tài)下,總線上的任何活動將導致i/o設備從掛起狀態(tài)返回,進入活動狀態(tài)。i/o設備也可以使pc主機走出睡眠狀態(tài),這種能力稱為remote_wakeup。只有在這種情況下,才可以由i/o設備啟動一個信號。例如,若i/o設備是一部電話,電話鈴響,它就要喚醒主機。這種能力必須在設備配置描述符中預先做出說明,使主機對這樣的事件有所準備。i/o設備要先驅動一個遠程喚醒信號向它的本地集線器報警,集線器再把這個信號傳到根集線器,喚醒主機。總線

29、活動掛起可能是因為主機本身進入了掛起狀態(tài)。另外,usb設備必須在所連接的集線器端口失效時進入掛起狀態(tài),這就是所謂的選擇性掛起(selective suspend)。當usb設備接上或usb設備移開的時候,主機啟動一個被稱作總線枚舉(bus enumeration)的進程,來標識并管理設備狀態(tài)的改變,當usb設備接上一個加電端口時,系統(tǒng)將采取以下操作:1usb設備所連的集線器通過其通向主機的狀態(tài)改變通道向主機匯報本usb設備已連接上。此時,usb設備處于加電狀態(tài),它所連接的端口是無效的。2主機通過尋問集線器決定此次狀態(tài)改變的確切含義。3主機一旦得知新設備已連上以后,它至少等待100ms以使得插入

30、操作的完成以及設備電源穩(wěn)定工作。然后主機發(fā)出端口使能及復位命令給那個端口。4集線器將發(fā)向端口的復位信號持續(xù)10ms。當復位信號撤消后,端口已經有效了。這時usb設備處于缺省狀態(tài),并且可從vbus汲取小于100ma的電流,所有設備寄存器及狀態(tài)己經被復位,設備可對缺省地址產生響應。5主機給設備分配一個唯一的地址,設備轉向地址狀態(tài)(address state)。6在usb設備接受設備地址之前,它的缺省控制通道(default control pipe)在缺省地址處自然是可尋址的,主機通過讀取設備描述表,判決設備缺省通道的地址。7、設備驅動程序開始收集關于設備的信息,包括接口和端點。如果設備有多個配置

31、,驅動程序通常也要全部讀出。8、當設備已被配置好并且可以運行時,它將進入配置狀態(tài)。第3章 usb數(shù)據采集系統(tǒng)的硬件設計系統(tǒng)的模擬開關、a/d轉換器均采用傳統(tǒng)的設計方法。本章主要介紹usb接口的設計。3.1 usb 接口方案usb接口設計中有三種芯片選擇方案:第一種方案是選用設計成標準usb控制器的低層芯片,例如cypress公司的cy7c63xxx系列,這類芯片是完全按照usb協(xié)議設計的,但由于其結構不同于其它常用控制芯片,開發(fā)者需要較長的學習時間,不利于快速開始一個項目;另一種方案是采用具備usb通信功能的單片機,例如intel/cypress的8x931、cypress的ez-usb,這些

32、單片機采用開發(fā)者熟悉的結構和指令集,處理能力強,構成系統(tǒng)的電路簡單,調試方便,是目前常用的一種方案。但由于具備了usb接口,與過去的開發(fā)系統(tǒng)通常不兼容,需要購買新的開發(fā)系統(tǒng),投資較高;第三種方案是采用連接到一般微控制器的接口芯片,例如philps的pdiusbd11/12、national半導體公司的usbn960x、南京沁恒電子有限公司的ch372等,它可用一般的單片機開發(fā)系統(tǒng)進行開發(fā),不需購買新系統(tǒng),而且usb芯片本身價格較便宜,所以這種接口方案成本很低。另外由于采用一般單片機,熟悉單片機的開發(fā)人員可以很快的開始一個項目。其缺點是需要兩個芯片,電路設計和調試比較復雜,接口性能由于開發(fā)者的因

33、素差異較大。根據本系統(tǒng)的設計要求和實際情況,在設計中選擇了第三種方案。3.2 usb接口的硬件設計3.2.1 ch372簡介ch372是一個usb總線的通用設備接口芯片。在本地端,ch372具有8位數(shù)據總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到單片機/dsp/mcu/mpu等控制器的系統(tǒng)總線上;在計算機系統(tǒng)中,ch372的配套軟件提供了簡潔易用的操作接口,與本地端的單片機通訊就如同讀寫文件。ch372的主要特點包括以下方面:(1)全速usb設備接口,兼容usb v2.0,即插即用,外圍元器件只需要晶體和電容。(2)提供一對主端點和一對輔助端點,支持控制傳輸、批量傳輸、中斷傳輸。(3

34、)具有省事的內置固件模式和靈活的外部固件模式。(4)內置固件模式下屏蔽了相關的usb協(xié)議,自動完成標準的usb枚舉配置過程,完全不需要本地端控制器作任何處理,簡化了單片機的固件編程。(5)通用windows驅動程序提供設備級接口,通過dll提供api應用層接口。(6)產品制造商可以自定義廠商標識(vendor id)和產品標識(product id)。(7) 通用的本地8位數(shù)據總線,4線控制:讀選通、寫選通、片選輸入、中斷輸出。(8) 主端點上傳下傳緩沖區(qū)各64字節(jié),輔助端點上傳下傳緩沖區(qū)各8字節(jié)。(9) 支持5v電源電壓和3.3v電源電壓,支持低功耗模式。表3-1 ch372引腳ch372用

35、到的命令如下表3-2所示:表3-2 ch372的命令如果命令的輸出數(shù)據是操作狀態(tài),參考表3-3。表3-3 操作狀態(tài)命令get_ic_ver:該命令獲取芯片及固件版本。返回的一個字節(jié)數(shù)據是版本號,其位7為1,位6為0,位5位0為版本號。如果返回值為0b7h,去掉位7的1,實際版本號為37h。命令enter_sleep:該命令使ch372芯片進入低功耗睡眠掛起狀態(tài)(部分型號的芯片不支持該功能)。進入低功耗狀態(tài)后,ch372芯片的時鐘停振,從而節(jié)約電能,直到檢測到以下兩種情況之一才退出低功耗狀態(tài):一是檢測到usb總線有信號;二是單片機向ch372芯片寫入新的命令(沒有輸入數(shù)據的命令,例如get_ic

36、_ver命令)。通常情況下,ch372芯片從低功耗狀態(tài)退出并恢復到正常工作狀態(tài)需要幾毫秒的喚醒時間,當完全恢復到正常工作狀態(tài)后,ch372將產生usb_int_wake_up事件中斷。命令reset_all:該命令使ch372執(zhí)行硬件復位。通常情況下,硬件復位在40ms時間之內完成。命令check_exist:該命令測試工作狀態(tài),以檢查ch372是否正常工作。該命令需要輸入1個數(shù)據,可以是任意數(shù)據,如果ch372正常工作,那么ch372的輸出數(shù)據是輸入數(shù)據的按位取反。例如,輸入數(shù)據是57h,則輸出數(shù)據是a8h。另外,在ch372復位后未收到任何命令之前,從其并口通常是讀出數(shù)據00h。命令chk

37、_suspend:該命令設置檢查usb總線掛起狀態(tài)的方式。該命令需要輸入兩個數(shù)據,分別是數(shù)據10h和檢查方式。檢查方式有2種:00h說明不檢查usb掛起(上電或復位后的默認值);04h說明以50ms為間隔檢查usb掛起。usb總線掛起狀態(tài)包括兩種情況:一是usb信號線物理斷開,完全沒有usb信號;二是usb主機端停止發(fā)送sof信號,也就是usb主機端要求usb設備進入掛起狀態(tài)。當檢查到usb總線掛起狀態(tài)后,ch372將產生usb_int_usb_suspend事件中斷。命令set_usb_id:該命令設置usb的廠商識別碼vendor-id和產品識別碼product-id。該命令需要輸入4個數(shù)

38、據,依次是廠商vid的低8位、廠商vid的高8位,產品pid的低8位,產品pid的高8位。如果需要設置id,那么該命令必須在set_usb_mode命令之前執(zhí)行。命令set_usb_mode:該命令設置usb工作模式。該命令需要輸入1個數(shù)據,該數(shù)據是模式代碼:模式代碼為00h時切換到未啟用的usb設備方式(上電或復位后的默認方式);模式代碼為01h時切換到已啟用的usb設備方式,外部固件模式;模式代碼為02h時切換到已啟用的usb設備方式,內置固件模式。在usb設備方式下,未啟用是指usb總線d+的上拉電阻被禁止,相當于斷開usb設備;啟用是指usb總線d+的上拉電阻有效,相當于連接usb設備

39、,從而使usb主機能夠檢測到usb設備的存在。通過設置是否啟用,可以模擬usb設備的插拔事件。通常情況下,設置usb工作模式在20us時間之內完成,完成后輸出操作狀態(tài)。命令get_status:該命令獲取ch372的中斷狀態(tài)并通知ch372取消中斷請求。當ch372向單片機請求中斷后,單片機通過該命令獲取中斷狀態(tài),分析中斷原因并處理。表3-4 中斷狀態(tài)字節(jié)下面是中斷狀態(tài)的分析說明。在內置固件模式的usb設備方式下,單片機只需要處理表中標注為灰色的中斷狀態(tài),ch372內部自動處理了其它中斷狀態(tài)。表3-5 中斷狀態(tài)值命令unlock_usb:該命令釋放當前usb緩沖區(qū)。為了防止緩沖區(qū)覆蓋,ch37

40、2向單片機請求中斷前首先鎖定當前緩沖區(qū),暫停所有的usb通訊,直到單片機通過unlock_usb命令釋放當前緩沖區(qū),或者通過rd_usb_data命令讀取數(shù)據后才會釋放當前緩沖區(qū)。該命令不能多執(zhí)行,也不能少執(zhí)行。命令rd_usb_data0:該命令從當前usb中斷的端點緩沖區(qū)中讀取數(shù)據塊。首先讀取的輸出數(shù)據是數(shù)據塊長度,也就是后續(xù)數(shù)據流的字節(jié)數(shù)。數(shù)據塊長度的有效值是0至64,如果長度不為0,則單片機必須將后續(xù)數(shù)據從ch372逐個讀取完。該命令與rd_usb_data命令的唯一區(qū)別是后者在讀取完成后還會自動釋放當前usb緩沖區(qū)(相當于再加上unlock_usb命令)。命令wr_usb_data5

41、:該命令向usb端點1的上傳緩沖區(qū)寫入數(shù)據塊,在內置固件模式下,usb端點1就是中斷端點。首先寫入的數(shù)據是數(shù)據塊長度,也就是后續(xù)數(shù)據流的字節(jié)數(shù)。數(shù)據塊長度的有效值是0至8,如果長度不為0,則單片機必須將后續(xù)數(shù)據逐個寫入ch372。命令wr_usb_data7:該命令向usb端點2的上傳緩沖區(qū)寫入數(shù)據塊,在內置固件模式下,usb端點2就是批量端點。首先寫入的輸入數(shù)據是數(shù)據塊長度,也就是后續(xù)數(shù)據流的字節(jié)數(shù)。數(shù)據塊長度的有效值是0至64,如果長度不為0,則單片機必須將后續(xù)數(shù)據逐個寫入ch372。3.2.2 usb接口的硬件電路設計圖3-1 ch372的引腳圖ch372芯片的被動并行接口包括:8位雙向

42、數(shù)據總線d7d0、讀選通輸入引腳rd#、寫選通輸入引腳wr#、片選輸入引腳cs#、中斷輸出引腳int#以及地址輸入引腳a0。通過被動并行接口,ch372芯片可以很方便地掛接到各種8位單片機、dsp、mcu的系統(tǒng)總線上,并且可以與多個外圍器件共存。ch372芯片的rd#和wr#可以分別連接到單片機的讀選通輸出引腳和寫選通輸出引腳。cs#由地址譯碼電路驅動,用于當單片機具有多個外圍器件時進行設備選擇。int#輸出的中斷請求是低電平有效,可以連接到單片機的中斷輸入引腳或者普通i/o引腳,單片機可以使用中斷方式或者查詢方式獲知中斷請求。當wr#為高電平并且cs#和rd#及a0都為低電平時,ch372中

43、的數(shù)據通過d7d0輸出;當rd#為高電平并且cs#和wr#及a0都為低電平時,d7d0上的數(shù)據被寫入ch372芯片中;當rd#為高電平并且cs#和wr#都為低電平而a1為高電平時,d7d0上的數(shù)據被作為命令碼寫入ch372芯片中。ch372芯片占用兩個地址位,當a0引腳為高電平時選擇命令端口,可以寫入新的命令,或者讀出中斷標志;當a0引腳為低電平時選擇數(shù)據端口,可以讀寫數(shù)據。表3-6 并口i/o操作的真值表(表中x代表不關心此位,z代表ch372三態(tài)禁止)。ch372芯片的ud+和ud-引腳應該直接連接到usb總線上。如果為了芯片安全而串接保險電阻或者電感或者esd保護器件,那么交直流等效串聯(lián)

44、電阻應該在5之內。ch372芯片內置了電源上電復位電路,一般情況下,不需要外部提供復位。ch372芯片正常工作時需要外部為其提供12mhz的時鐘信號。一般情況下,時鐘信號由ch372內置的反相器通過晶體穩(wěn)頻振蕩產生。外圍電路只需要在x1和x0引腳之間連接一個標稱頻率為12mhz的晶體,并且分別為x1和x0引腳對地連接一個高頻振蕩電容。如果從外部直接輸入12mhz時鐘信號,那么應該從x1引腳輸入,而x0引腳懸空。ch372b芯片支持3.3v或者5v電源電壓。當使用5v工作電壓時,ch372芯片的vcc引腳輸入外部5v電源,并且v3引腳應該外接容量為4700pf到0.02uf左右的電源退耦電容。當

45、使用3.3v工作電壓時,ch372芯片的v3引腳應該與vcc引腳相連接,同時輸入外部的3.3v電源,并且與ch372芯片相連接的其它電路的工作電壓不能超過3.3v。3.3 usb接口硬件的實現(xiàn)綜合以上對usb的介紹和陳述,usb接口電路可有以下幾部分構成(總體電路圖的設計見附錄一)。3.3.1時鐘電路下圖為at89c51的時鐘電路圖,單片機內部有一個用于構成振蕩器的高增益反相放大器,引腳x1和x2分別是此放大器的輸入和輸出端。單片機的這個放大器與作為反饋元件的片外晶體一起構成了穩(wěn)定的自激振蕩器,發(fā)出的脈沖直接送入內部的時鐘電路。c1和c2值通常選擇30pf,他們對頻率有微調作用,震蕩的頻率范圍

46、是1.2mhz至12mhz。ch372的時鐘電路與此相似。圖3-2 時鐘電路3.3.2 復位電路圖3-3 復位電路單片機的復位是上電自動復位,它是利用電容來實現(xiàn)的,即上電瞬間rst/vpd端的電位與vcc相同,隨著充電電流的減少,rst/vpd的電位逐漸下降。上電復位的最短時間是振蕩周期建立時間加上2個機器周期時間,在這個時間內rst/vpd端的電平應維持高于施密特觸發(fā)器的下閾值。3.3.3 a/d轉換電路1、 用單片機的p2.0口控制兩個或門,當p2.0輸出高電平時則兩個或門關閉,當p2.0輸出低電平時,或門開啟,由單片機的wr#和rd#分別控制adc0809的ale、start和enabl

47、e。2、 通過一條單片機對adc0809的寫指令便能夠啟動其a/d轉換,當單片機執(zhí)行讀指令時,wr#輸出高電平,rd#輸出低電平,則adc0809的ale引腳為高,enable引腳也為高電平,所以首先地址被鎖存,然后數(shù)據允許被讀出11。3、 單片機的ale引腳通過外接分頻器(除2)為adc0809提供時鐘信號。4、 將adc0809的eoc通過非門與單片機的int0#相連,當a/d轉換結束時產生中斷信號,單片機在中斷處理程序中將數(shù)據讀出。圖3-4 a/d轉換電路3.3.4 ch372接口電路圖3-5 ch372接口電路1、c5和c6用于外部電源退耦,c6是容量為0.1f的獨石或者高頻瓷片電容,

48、電容c7用于ch372內部電源節(jié)點退耦,c7是容量為4700pf到0.02f的獨石或者高頻瓷片電容。2、con1是usb端口,usb總線包括一對5v電源線和一對數(shù)據信號線,通常,+5v電源線是紅色,接地線是黑色,d+信號線是綠色,d-信號線是白色。3、ch372的片選端cs#接地,一直處在工作狀態(tài)。單片機的p21與ch372的a0相連來選擇其地址,當p21輸出為1時選擇命令端口,可以寫入命令或讀出中斷標志;當p21輸出為0時選擇數(shù)據端口,可以讀寫數(shù)據。同樣,ch372的int#與單片機的int0#連起來以使單片機產生中斷進入中斷處理程序。3.3.5 單片機擴展ram接口電路at89c51片內的

49、ram只有128b,不能滿足本設計的要求,可以使用芯片8155對其進行擴展。圖3-6 單片機擴展ram接口電路第4章 usb數(shù)據采集系統(tǒng)設備固件編寫固件實質上是固化在硬件中的軟件,它直接與硬件進行通信,與硬件有著密切的聯(lián)系。本章闡述了以372為典型應用的usb2.0接口控制芯片固件的設計方案并闡述固件的工作流程。4.1 固件設計方案及工作流程固件的主要功能是負責接收和處理主機發(fā)給設備的各種請求,并向主機返回設備的狀態(tài)信息。usb2.0接口控制芯片控制usb協(xié)議的完成,同時控制外圍接口電路以使設備能通過usb2.0接口控制芯片與主機通信、接口控制芯片固件設計的目標是使mcu在usb總線上達到最大

50、的傳輸速率。4.1.1固件的設計思想固件要實現(xiàn)的功能包括:接口控制芯片的初始化;響應主機的標準請求,并做出合適的動作;主機要求通信時,能夠做出應有的響應。由于usb2.0協(xié)議的主/從式模式,我將固件設計成全中斷驅動的方式,mcu做它的前臺事務時,usb傳輸在后臺進行處理,即:當sei從usb總線上接收到一個請求包時,就觸發(fā)一個中斷事務,mcu立即執(zhí)行中斷服務程序以響應這個中斷,這樣做一方面保證了快速的數(shù)據傳輸和較好的軟件結構,另一方面簡化了編程和測試。圖3一1描述了設備處于特定狀態(tài)后固件相應的設計流程。4.1.2固件的工作流程當usb設備接入到主機的usb接口后,主機給其供電,usb設備等待主

51、機發(fā)過來的復位信號。固件在接收到復位信號后,usb設備進入到總線缺省狀態(tài),此時它有一個缺省地址0,主機通過此缺省地址與usb設備進行通信,等待主機給它分配一個唯一的非0地址,并對它進行配置;在usb設備枚舉過程完成以后,主機可以通過其分配的地址來通知usb設備完成相應的操作。整個過程可以歸納為主機通過usb設備的相應端點向固件發(fā)出各種操作請求,固件通過對這些請求的解析來控制硬件電路模塊完成相應的操作,并向主機返回設備的狀態(tài)信息。4.2固件開發(fā)主要劃分了以下幾個模塊:主循環(huán)模塊、對外接口模塊、ch375_init初始化模塊、上傳數(shù)據塊模塊、上傳中斷數(shù)據模塊、中斷服務模塊。下面就各個模塊的具體實現(xiàn)

52、進行介紹:4.2.1主循環(huán)模塊(mainloop.c)主循環(huán)檢查事件標志并進入對應的子程序進行進一步的處理。它還包含人機接口的代碼。mcu一旦上電就需要初始化其所有端口、存儲區(qū)、定時器和中斷服務程序。之后mcu將重新連接usb,包括將sotfconnect寄存器設置為on。因為這些過程確保了在mcu準備好服務d12之前d12不會進行操作,所以是很重要的。程序代碼:org 0000h;復位后單片機入口ljmp startorg 0003h;ch375中斷l(xiāng)jmp ch372_interstart:nopcall ch372_init;初始化setb ea;允許中斷wait_request:nop

53、 sjmp wait_request;主循環(huán)4.2.2外接口模塊1. ch372_init 初始化子程序,用到的寄存器有acc、r7和dptr。2. ch372_upload 上傳數(shù)據塊子程序(通過批量端點上傳)。entry:用dptr指向存放了準備上傳數(shù)據的緩沖區(qū),r7存放準備上傳的數(shù)據長度,有效數(shù)值是0到64,用到的寄存器有acc、r7和 dptr。3. ch372_up_int 上傳中斷數(shù)據子程序(通過中斷端點上傳)它是可選子程序。entry:dptr指向存放了準備上傳數(shù)據的緩沖區(qū),r7存放準備上傳的數(shù)據長度,有效數(shù)值是0到8。它用到的寄存器有acc,r7和dptr。4. ch372_i

54、nter 中斷服務子程序,它需要堆棧8字節(jié)。4.2.3 ch375_init初始化模塊初始化子程序包括測試ch372正常工作(可選程序段)、設置外部自定義的usb設備vid和pid(可選程序段)、設置usb工作模式、啟用中斷等程序段。它用到的寄存器包括acc, r7和dptr。4.2.4上傳數(shù)據塊模塊entry:r0指向片外ram中的上傳數(shù)據緩沖區(qū),r7準備上傳的數(shù)據長度, 有效數(shù)值是0到64。程序用到的寄存器包括acc, r0, r7和dptr。4.2.5上傳中斷數(shù)據模塊中斷數(shù)據是通過中斷端點上傳的,該段程序為可選子程序。entry: r0指向存放了準備上傳數(shù)據的緩沖區(qū)(位于片外ram中),

55、 r7 準備上傳的數(shù)據長度, 有效數(shù)值是0到8。程序用到的寄存器包括acc, r0, r7, dptr。第5章 usb設備驅動程序及應用程序計算機與外設通過ubs接口的通信是通過驅動程序來實現(xiàn)的。在windwos環(huán)境中,定義了wnidwos設備驅動程序模型,其中設立了兩種模式,即用戶模式和內核模式。應用程序只能工作在用戶模式下,而驅動程序大多運行在內核模式下。驅動程序采用了分層結構。設備驅動知道如何與系統(tǒng)的usb和訪問設備的用戶應用程序通信。設備驅動程序通過在應用層和固件專用代碼之間的轉換來完成它的任務。應用層代碼一般使用一套操作系統(tǒng)支持的函數(shù)。本章就驅動程序和應用程序來分別介紹。5.1驅動開

56、發(fā)工具的選擇目前驅動程序的開發(fā),有以下幾種方法可供選擇:1、直接使用windowsddk式開發(fā)難度大一些,而且有很多煩瑣的工作要做,大部分都是通用的基礎性工作。但如果選用這種方式的話,將對整個體系結構會有很好的理解和把握。2、使用drviersutdio:這種方法難度低一些,工具軟件幫你做了很多基礎性的工作。也封裝了一些細節(jié),你只要專心去做你需要的操作,但由于封裝的問題可能會帶來一些bug,有可能導致項目的失敗。3、使用wnidriver:這種方法幾乎沒有什么難度,但只能開發(fā)硬件相關的驅動,事實上你寫的只是定制和調用它提供的通用驅動而已,工作效率不是很高。但開發(fā)花費的時間與上面相比就很少了。5.2 wdm概述wdm(win32drivermodel),即win32驅動程序模型,是微軟公司全新的驅動程序模式,支持即插即用、電

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論