畢業(yè)論文-數(shù)控機(jī)床RS232-USB接口轉(zhuǎn)接技術(shù)研究及實(shí)現(xiàn)_第1頁(yè)
畢業(yè)論文-數(shù)控機(jī)床RS232-USB接口轉(zhuǎn)接技術(shù)研究及實(shí)現(xiàn)_第2頁(yè)
畢業(yè)論文-數(shù)控機(jī)床RS232-USB接口轉(zhuǎn)接技術(shù)研究及實(shí)現(xiàn)_第3頁(yè)
畢業(yè)論文-數(shù)控機(jī)床RS232-USB接口轉(zhuǎn)接技術(shù)研究及實(shí)現(xiàn)_第4頁(yè)
畢業(yè)論文-數(shù)控機(jī)床RS232-USB接口轉(zhuǎn)接技術(shù)研究及實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、畢業(yè)設(shè)計(jì)數(shù)控機(jī)床RS232-USB接口轉(zhuǎn)接技術(shù)研究及實(shí)現(xiàn)三號(hào)楷三號(hào)楷機(jī)械工程系學(xué)生姓名: 學(xué)號(hào): 機(jī)械工程系機(jī)械電子工程系 部: 機(jī)械電子工程 指導(dǎo)教師: 二零一五年六月誠(chéng)信聲明本人鄭重聲明:本論文及其研究工作是本人在指導(dǎo)教師的指導(dǎo)下獨(dú)立完成的,在完成論文時(shí)所利用的一切資料均已在參考文獻(xiàn)中列出。 本人簽名: 年 月 日畢業(yè)設(shè)計(jì)任務(wù)書(shū)設(shè)計(jì)題目: 數(shù)控機(jī)床RS232-USB接口轉(zhuǎn)接技術(shù)研究及實(shí)現(xiàn) 系部: 機(jī)械工程系 專業(yè): 機(jī)械電子工程 學(xué)號(hào) 學(xué)生: 指導(dǎo)教師(含職稱): 1課題意義及目標(biāo) 學(xué)習(xí)并掌握RS232-USB接口轉(zhuǎn)接及相關(guān)知識(shí);在查閱資料的基礎(chǔ)上,完成系統(tǒng)整體方案設(shè)計(jì);完成系統(tǒng)硬件設(shè)計(jì),

2、完成系統(tǒng)元器件的選型,在掌握電子線路圖繪制工具軟件的基礎(chǔ)上,完成系統(tǒng)組成框圖的繪制、完成相關(guān)電路圖及系統(tǒng)原理圖的繪制;2主要任務(wù)(1)、認(rèn)真閱讀任務(wù)書(shū),通過(guò)查閱相關(guān)文獻(xiàn)資料,在了解課題研究目的意義及現(xiàn)狀等基礎(chǔ)上,構(gòu)建設(shè)計(jì)方案并進(jìn)行充分論證,并撰寫(xiě)開(kāi)題報(bào)告;(2)、進(jìn)行系統(tǒng)總體設(shè)計(jì),熟悉開(kāi)發(fā)環(huán)境;(3)、系統(tǒng)硬件設(shè)計(jì);(4)、畢業(yè)設(shè)計(jì)說(shuō)明書(shū);3主要參考資料1張宏USB接口設(shè)計(jì)電子科技大學(xué)出版社,2002:12 2馬偉,邵貝貝OTG補(bǔ)充協(xié)議開(kāi)辟USB應(yīng)用的新篇章電子產(chǎn)品世界,2002,6(A):68-69 3李肇慶,廖峰,劉建存USB接口技術(shù)國(guó)防工業(yè)出版社,2004 4進(jìn)度安排設(shè)計(jì)各階段名稱起 止

3、 日 期1查閱資料,撰寫(xiě)開(kāi)題報(bào)告并進(jìn)行開(kāi)題答辯3月3日3月23日2USB與RS232接口轉(zhuǎn)換設(shè)計(jì)方案的選擇3月24日4月13日3系統(tǒng)的總規(guī)劃4月14日5月4日4對(duì)系統(tǒng)硬件進(jìn)行設(shè)計(jì)5月5日6月1日5撰寫(xiě)設(shè)計(jì)說(shuō)明書(shū),準(zhǔn)備畢業(yè)答辯6月2日6月22日審核人: 年 月 PAGE 42數(shù)控機(jī)床RS232-USB接口轉(zhuǎn)接技術(shù)研究及實(shí)現(xiàn)摘 要 :本文提出一種 USB 接口到 RS232 接口無(wú)縫轉(zhuǎn)換的接口轉(zhuǎn)換器的設(shè)計(jì)方案,該方案基于單片機(jī)實(shí)現(xiàn),能使傳統(tǒng)設(shè)備直接使用其原有的 RS232 接口與主機(jī)的 USB總線接口進(jìn)行雙向數(shù)據(jù)傳輸。該方案具有雙向緩沖功能,具有即插即用、使用方便、性價(jià)比高等特點(diǎn)。 主要討論了 P

4、C 機(jī)外設(shè)接口的現(xiàn)狀分析;與本方案相關(guān)的 USB 接口規(guī)范;實(shí)現(xiàn) USB-RS232 接口轉(zhuǎn)換器的硬件設(shè)計(jì)細(xì)節(jié);固件程序的設(shè)計(jì)細(xì)節(jié); 關(guān)鍵詞:通用串行總線,RS232 接口,單片機(jī),轉(zhuǎn)換器。Research and implementation of RS232-USB interface transfer technology for NC machine toolAbstract: The following article delivers a design proposal from USB connection switch to RS232 seamless transformat

5、ion switch, which enables traditional equipment to use former RS232 connection switch to realize the bidirectional data transmission with the USB bus connection switch. And this proposal has such functions of bidirectional cushions as plug and play, easy to operate, high ratio of performance-to-pric

6、e. The article mainly discusses the current situation of peripheral device connection of PC machine: relative laws of USB connection; design details of realizing the transmission from USB to RS232 connection switch; design details of firmware; Keywords: general serial bus, RS232 interface, microcont

7、roller, converter.目錄 TOC o 1-3 h z u HYPERLINK l _Toc26806 1 引言 PAGEREF _Toc26806 1 HYPERLINK l _Toc31556 1.1 USB接口,RS232接口及其應(yīng)用 PAGEREF _Toc31556 1 HYPERLINK l _Toc6712 1.2 RS232與USB 轉(zhuǎn)換器的意義 PAGEREF _Toc6712 1 HYPERLINK l _Toc12018 1.3 本論文的主要工作 PAGEREF _Toc12018 2 HYPERLINK l _Toc31669 2 USB 通用串行總線協(xié)議

8、 PAGEREF _Toc31669 3 HYPERLINK l _Toc5506 2.1 USB系統(tǒng)的描述 PAGEREF _Toc5506 3 HYPERLINK l _Toc9484 2.1.1 USB總線結(jié)構(gòu) PAGEREF _Toc9484 3 HYPERLINK l _Toc9484 2.1.2 主機(jī) PAGEREF _Toc9484 3 HYPERLINK l _Toc9484 2.1.3 USB硬件結(jié)構(gòu) PAGEREF _Toc9484 3 HYPERLINK l _Toc9484 2.1.4 數(shù)據(jù)的傳輸 PAGEREF _Toc9484 3 HYPERLINK l _Toc2

9、063 2.1.5 USB 總線的協(xié)議 PAGEREF _Toc2063 4 HYPERLINK l _Toc28880 2.2 RS232接口描述 PAGEREF _Toc28880 4 HYPERLINK l _Toc27934 2.2.1 RS232的特點(diǎn) PAGEREF _Toc27934 4 HYPERLINK l _Toc20656 2.2.2 RS232的分類 PAGEREF _Toc20656 4 HYPERLINK l _Toc26616 2.3 小結(jié) PAGEREF _Toc26616 5 HYPERLINK l _Toc14812 3 USB-RS232 接口轉(zhuǎn)換器的硬件

10、電路設(shè)計(jì) PAGEREF _Toc14812 6 HYPERLINK l _Toc9194 3.1 系統(tǒng)設(shè)計(jì)要求 PAGEREF _Toc9194 6 HYPERLINK l _Toc9194 3.2 方案的選擇 PAGEREF _Toc9194 6 HYPERLINK l _Toc4548 3.3 AT90USB1286 芯片介紹 PAGEREF _Toc4548 7 HYPERLINK l _Toc8854 3.3.1 AT90USB1286 芯片特性介紹 PAGEREF _Toc8854 7 HYPERLINK l _Toc1452 3.3.2 AT90USB1286 的操作命令 PAG

11、EREF _Toc1452 7 HYPERLINK l _Toc28088 3.4 80C528 單片機(jī)介紹 PAGEREF _Toc28088 9 HYPERLINK l _Toc19420 3.4.1 80C528 的主要特點(diǎn) PAGEREF _Toc19420 9 HYPERLINK l _Toc19420 3.4.2 單片機(jī)的復(fù)位電路和晶振電路10 HYPERLINK l _Toc20483 3.4.3 MAX232電平轉(zhuǎn)換電路作用 PAGEREF _Toc20483 11 HYPERLINK l _Toc903 3.5 接口轉(zhuǎn)換器的硬件電路設(shè)計(jì) PAGEREF _Toc903 12

12、HYPERLINK l _Toc5639 3.5.1 硬件系統(tǒng)框圖 PAGEREF _Toc5639 12 HYPERLINK l _Toc20623 3.5 小結(jié) PAGEREF _Toc20623 13 HYPERLINK l _Toc8009 4 系統(tǒng)的軟件設(shè)計(jì) PAGEREF _Toc8009 14 HYPERLINK l _Toc31448 4.1 USB轉(zhuǎn)串口設(shè)備端的程序設(shè)計(jì) PAGEREF _Toc31448 14 HYPERLINK l _Toc2275 4.2 驅(qū)動(dòng)程序開(kāi)發(fā)環(huán)境-WINDDK的使用 PAGEREF _Toc2275 17 HYPERLINK l _Toc227

13、5 4.3 USB驅(qū)動(dòng)程序、虛擬串口的實(shí)現(xiàn)方法 PAGEREF _Toc2275 17 HYPERLINK l _Toc21707 4.4 使用DDK設(shè)計(jì)USB轉(zhuǎn)串口驅(qū)動(dòng)程序 PAGEREF _Toc21707 21 HYPERLINK l _Toc18029 4.4.1 USB轉(zhuǎn)串口的驅(qū)動(dòng)程序基本框架 PAGEREF _Toc18029 21 HYPERLINK l _Toc2856 4.4.2 makefile文件與source文件 PAGEREF _Toc2856 23 HYPERLINK l _Toc25350 4.4.3 修改安裝驅(qū)動(dòng)用的inf文件 PAGEREF _Toc25350

14、 24 HYPERLINK l _Toc20587 參考文獻(xiàn) PAGEREF _Toc20587 26 HYPERLINK l _Toc13228 致謝 PAGEREF _Toc13228 27 HYPERLINK l _Toc10314 附錄 A 系統(tǒng)電路原理圖 PAGEREF _Toc10314 28 HYPERLINK l _Toc19779 附錄 B 部分源程序 PAGEREF _Toc19779 29太原工業(yè)學(xué)院畢業(yè)設(shè)計(jì)1 引言1.1 USB接口,RS232接口及其應(yīng)用 USB-計(jì)算機(jī)串行接口,是由4家公司在1996年提出來(lái)的,到1997年出現(xiàn)標(biāo)準(zhǔn)的外設(shè),1999年介紹了USB2.0

15、的規(guī)范,其主要特點(diǎn)是傳輸速度高達(dá)120Mbps到240Mbps,并適用于打印機(jī)等存儲(chǔ)設(shè)備。目前,使用USB外設(shè)越來(lái)越廣泛,比如Appel和Windoes都對(duì)其提供了很高的支持,USB的使用也相當(dāng)方便,比如現(xiàn)在的手機(jī),數(shù)碼相機(jī),USB網(wǎng)卡,攝像頭,充電器等都用到USB接口。RS232,主要的作用在于終端數(shù)據(jù)和通訊數(shù)據(jù)之間的數(shù)據(jù)對(duì)換,讓各種各樣的設(shè)備進(jìn)行數(shù)據(jù)轉(zhuǎn)換。當(dāng)前,RS-232的數(shù)據(jù)通訊速度在0到20000bps之間。在電氣特性明確的規(guī)定中有相關(guān)問(wèn)題,由于大多是生產(chǎn)廠商都生產(chǎn)與其相兼容的通訊設(shè)備,所以在微機(jī)通訊接口方面得到了很廣泛的運(yùn)用。1.2 RS232與USB 轉(zhuǎn)換器的意義 USB -計(jì)算

16、機(jī)串行接口,在當(dāng)前應(yīng)用在很多地方,但還是有很多地方不足,因此還需要原有的串行總線接口。USB主要面向軟件的總線,還有其自己復(fù)雜的協(xié)議,但它沒(méi)有DMA(直接存儲(chǔ)訪問(wèn)),IO地址等,并且要實(shí)現(xiàn)USB的正常運(yùn)轉(zhuǎn),必須要滿足以下條件,第一點(diǎn):需要程序激發(fā),然后發(fā)出訪問(wèn)。第二點(diǎn):主機(jī)應(yīng)驅(qū)動(dòng)程序然后完成管理設(shè)備等工作。第三點(diǎn):硬件要與USB總線連接。所以在進(jìn)行使用USB接口時(shí),要做大量的工作,比如要完成軟件,硬件等設(shè)計(jì)等工作,不過(guò)RS-232使用起來(lái)非常方便,自身系統(tǒng)會(huì)驅(qū)動(dòng)設(shè)備,不需要大量的硬件和軟件設(shè)計(jì),軟件只要設(shè)計(jì)好傳輸速度和位就好。但是由于RS-232也存在很多的局限性,在進(jìn)行數(shù)據(jù)在主機(jī)上進(jìn)行存儲(chǔ)的

17、時(shí)候其傳輸?shù)淖畲笏俣纫膊贿^(guò)只有0.115Mbps,同時(shí)只能傳輸15米,所以在那些精度高,速度快的傳輸里面就不行,如果那樣傳輸?shù)脑挄?huì)導(dǎo)致時(shí)間過(guò)長(zhǎng)而導(dǎo)致數(shù)據(jù)的損失。不過(guò)采用并口傳輸(速度是串口的8倍),盡管速度提高了,但是由于接口太復(fù)雜,與主機(jī)接口比較少的特性相違背,所以要找一個(gè)比較好的辦法,最終找到USB接口,很好的解決主機(jī)個(gè)數(shù)有限的問(wèn)題。USB接口有很多的優(yōu)點(diǎn):第一點(diǎn):USB具有很高的傳輸速率,其最高可以達(dá)到12Mbps,比標(biāo)準(zhǔn)的串口(115kbps)快上100倍左右,比標(biāo)準(zhǔn)并口快上10倍左右,而USB2.0更快。而且USB設(shè)備所有的處理都是由主機(jī)處理,不需要占太多的系統(tǒng)存儲(chǔ)空間。還有I/O的

18、存儲(chǔ)空間第二點(diǎn):實(shí)現(xiàn)USB的成本非常的廉價(jià),所以在現(xiàn)實(shí)生活中用于很多的外設(shè)。而且USB數(shù)據(jù)線還可以自己供電,一些功率不大的外圍設(shè)備可以用其供電,那就不需要其他的電源啦。而且在USB的敘述中一臺(tái)計(jì)算機(jī)最高可以達(dá)到127個(gè)外設(shè)。第三點(diǎn):對(duì)于USB的通訊,可以使計(jì)算機(jī)與數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)對(duì)換有很廣的應(yīng)用,現(xiàn)在很多的計(jì)算機(jī)都是用到USB作為接口。在當(dāng)前,有大量的儀器儀表,控制設(shè)備還用到RS232的串行接口,而要將其立即變換成USB,很明顯成本及實(shí)施方面有很多的問(wèn)題,為了讓USB廣泛的應(yīng)用到現(xiàn)實(shí)生活中,很有必要開(kāi)發(fā)出RS232-USB接口的轉(zhuǎn)換器,如果將其應(yīng)用到現(xiàn)實(shí)生活中,會(huì)使很多傳統(tǒng)的設(shè)備不需要改造,

19、即可使USB總線接口與RS232直接實(shí)現(xiàn)雙向數(shù)據(jù)傳輸。以上是實(shí)施USB-RS232接口轉(zhuǎn)換的意義之一 另外,在今后的發(fā)展中,USB接口也會(huì)成為很常用的嵌入式系統(tǒng)主流通訊工具。1.3 本論文的主要工作本人主要的工作是根據(jù)現(xiàn)在的主流,將RS232串行接口與USB總線接口結(jié)合,設(shè)計(jì)出RS232-USB接口轉(zhuǎn)換器本人會(huì)從硬件電路的設(shè)計(jì),還有固件設(shè)計(jì)來(lái)分析RS232-USB轉(zhuǎn)換器設(shè)計(jì)。 2 USB 通用串行總線協(xié)議2.1 USB系統(tǒng)的描述 USB數(shù)據(jù)總線是為了解決計(jì)算機(jī)在與設(shè)備相連時(shí)時(shí)不具有隨意插,隨意拔,還有解決傳統(tǒng)數(shù)據(jù)傳輸?shù)乃俣嚷?,效率低,不能自?dòng)對(duì)點(diǎn)等缺點(diǎn)。因此USB具有數(shù)據(jù)傳輸速度快,還有只帶電

20、源,擴(kuò)充起來(lái)容易等功能,是一個(gè)新型的接口。USB通用串行線是由3個(gè)部分組成的,分別為主機(jī),USB總線上的設(shè)備,還有USB構(gòu)成。2.1.1 USB總線結(jié)構(gòu)從USB物理連接上講,其連接啦設(shè)備和主機(jī),它的特點(diǎn)很有特點(diǎn),有很高的層次性,還有其結(jié)構(gòu)像星型,在星型中心,有很多的網(wǎng)絡(luò)集線器,線縣相連形成拓?fù)浣Y(jié)構(gòu)。2.1.2 主機(jī)一般情況下,在一個(gè)USB系統(tǒng)中,只有主機(jī)一個(gè),而且是有其發(fā)起的,但是在一臺(tái)計(jì)算機(jī)中,主機(jī)可不止一個(gè),在主機(jī)控制中,它的控制很廣,有硬件,軟件等,在主機(jī)上,有集成線,可以連接別的線,從而與外面的設(shè)備相連。2.1.3 USB硬件結(jié)構(gòu)USB一共有4根電纜,它們的作用是有兩根用來(lái)電源,另外兩

21、根則用作串行通道,對(duì)于速度要求比較低的外設(shè)設(shè)備,USB以兩種速度進(jìn)行傳輸數(shù)據(jù),當(dāng)遇到低速的外設(shè)設(shè)備時(shí) ,USB以1500bps速度傳輸,當(dāng)遇到要求速度高的外設(shè)設(shè)備時(shí),USB的傳輸速度為12Mbps,而且USB會(huì)自動(dòng)調(diào)整。一般USB在USB系統(tǒng)中控制著令牌,設(shè)備通過(guò)發(fā)送令牌,然后USB檢測(cè)到,然后發(fā)送給主機(jī)數(shù)據(jù)來(lái)完成。2.1.4 數(shù)據(jù)的傳輸 USB為主機(jī)軟件的實(shí)現(xiàn)提供啦通道,并且有4中方式:中斷,等時(shí),控制,數(shù)據(jù)塊4種傳輸方式 中斷傳輸:如鍵盤(pán)設(shè)備,在與主機(jī)進(jìn)行傳輸時(shí),量不大,且無(wú)周期,不過(guò)速度要很快。 數(shù)據(jù)塊傳輸:傳輸數(shù)據(jù)要以塊的方式要求量大。比如打印機(jī)等。 控制傳輸類型:支持外設(shè)與主機(jī)間的控

22、制。 等時(shí)傳輸:支持計(jì)算機(jī)和電話機(jī)之間傳輸,支持有規(guī)律,且傳輸速率不變的 外設(shè)與主機(jī)傳輸。 2.1.5 USB 總線的協(xié)議 設(shè)備與主機(jī)之間的數(shù)據(jù)的傳輸方式主要是由USB總線協(xié)議規(guī)定的,規(guī)定啦它們是怎么傳輸?shù)模琔SB總線還有規(guī)定啦傳輸結(jié)構(gòu),還有位,包等結(jié)構(gòu)2.2 RS232接口描述2.2.1 RS232的特點(diǎn) 1.電壓與電平:RS232的信號(hào)線上的電壓為負(fù)邏輯,意思就是當(dāng)邏輯0時(shí),則電壓的大小為3到15V,反之當(dāng)是1時(shí)為負(fù),但是TTL電路恰好與其相反,為5V,所以需要電平的轉(zhuǎn)換。2.傳輸速率:它的傳輸速率較低一般最高也只有1500bpbs。3.傳輸?shù)木嚯x:傳輸距離短,最高只有15米2.2.2 R

23、S232的分類RS232 根據(jù)引腳的分為兩類:第一類為DB9:1 .DCD 表示載波檢測(cè)2.RXD 表示接收數(shù)據(jù)3 .TXD 表示發(fā)送數(shù)據(jù)4 DTR 表示數(shù)據(jù)終端準(zhǔn)備好5 .SGND表示信號(hào)地線6 .DSR表示數(shù)據(jù)準(zhǔn)備好7 .RTS 表示請(qǐng)求發(fā)送8 .CTS 表示清除發(fā)送 9 .RI 表示振鈴提示還有一類是為DB25,而本設(shè)計(jì)采用的是第一種DB9 2.3 小結(jié) 本章主要是介紹啦USB的結(jié)構(gòu),還有其傳輸方式,以及USB協(xié)議,然后介紹啦RS232的特點(diǎn)以及分類。3 USB-RS232 接口轉(zhuǎn)換器的硬件電路設(shè)計(jì)3.1 系統(tǒng)設(shè)計(jì)要求本系統(tǒng)需要實(shí)現(xiàn)兩大功能:第一點(diǎn):USB設(shè)備功能的實(shí)現(xiàn),用USB接PC的

24、USB口,對(duì)應(yīng)的RS232口接RS232的設(shè)備,通過(guò)以上的連接,實(shí)現(xiàn)USB和RS232之間的轉(zhuǎn)換第二點(diǎn):USB主機(jī)功能的實(shí)現(xiàn),將U盤(pán)接在USB接口上,RS232設(shè)備接入RS232口中那么最后會(huì)將RS232中的數(shù)據(jù)存到U盤(pán)中。具體設(shè)計(jì)考慮的要素有: 1、良好的兼容性; 在USB總線協(xié)議的條件下,兼容大部分移動(dòng)硬盤(pán)。 2、實(shí)現(xiàn)USB主機(jī)和設(shè)備功能 模塊作為設(shè)備使用時(shí),能夠完成主機(jī)的傳輸請(qǐng)求。實(shí)現(xiàn)USB/RS232/485的接口轉(zhuǎn)換 由于要實(shí)現(xiàn)RS232與USB數(shù)據(jù)之間的轉(zhuǎn)換,所以必須要遵守各自的協(xié)議。4、要方便用戶擴(kuò)展 為啦使用戶方便擴(kuò)展,應(yīng)保留用戶的接口 5、低功耗要求 模塊在保證驅(qū)動(dòng)能力的情況

25、下要盡量減少功耗以節(jié)省能源 6、成本要求在保證功能的情況下,盡可能降低成本。3.2 方案的選擇 一共有3中方案,第一種為傳統(tǒng)的USB接口轉(zhuǎn)換芯片,第二種為 利用集成USB模塊的微處理器,第三種為利用單片機(jī)+USB主機(jī)控制器。本設(shè)計(jì)采用的是方案3: 該方案的優(yōu)點(diǎn)在于不需要計(jì)算機(jī),而是直接用單片機(jī)來(lái)實(shí)現(xiàn)數(shù)據(jù)的傳輸,實(shí)現(xiàn)主機(jī)的功能,這個(gè)系統(tǒng)完全可以自給自足。還有可以隨意在外圍器件的配置上加上其他模塊來(lái)實(shí)現(xiàn)需要的功能。 該方案可以選擇不同的單片機(jī)作為芯片來(lái)實(shí)現(xiàn)自己的需要,不過(guò)基本硬件都差不多,只是考慮單片機(jī)的速度是否足夠快和內(nèi)存足夠大,還有弄出一些協(xié)議來(lái)達(dá)到簡(jiǎn)化。 3.3 AT90USB1286 芯片

26、介紹3.3.1 AT90USB1286 芯片特性介紹1、 符合 USB 全速規(guī)范。 2、 內(nèi)部集成了 SIE FIFO 存儲(chǔ)器收發(fā)器以及電壓調(diào)整器。 3、 接口靈活,可與任何 CPU 實(shí)現(xiàn)高速并行連接,速度 2M 字節(jié)/秒。 4、 具有直接內(nèi)存存取 DMA 功能。 5、 內(nèi)部集成 320 字節(jié)的 FIFO 存儲(chǔ)器用作數(shù)據(jù)緩沖區(qū)。 6、 主端點(diǎn)配置雙緩沖結(jié)構(gòu),增加 B 數(shù)據(jù)吞吐量。 7、 在批處理和同步模式下實(shí)現(xiàn) 1M 字節(jié)/秒的 USB 數(shù)據(jù)傳輸速率。 8、 設(shè)備掛起時(shí)可控制 LazyClock 輸出。 9、 可用軟件控制是否連接到 USB 總線。 10、 具有 GoodLink 技術(shù)的連接

27、LED 指示器,USB 通訊時(shí) LED 閃爍,方便調(diào)試。 11、 輸出時(shí)鐘的頻率可用軟件控制。 12、 內(nèi)部具有上電復(fù)位和低電壓復(fù)位電路。 13、 雙電源工作,3.30.3V 或 3.65.5V。3.3.2 AT90USB1286 的操作命令 單片機(jī)通過(guò)發(fā)送操作命令給 AT90USB1286 ,完成對(duì) AT90USB1286 的控制,命令一共有 15 種,分述如下: 1、設(shè)置地址/使能命令: 設(shè)定設(shè)備地址,允許芯片工作。 2、設(shè)置端點(diǎn)使能命令: 允許端點(diǎn)工作。 3、設(shè)置模式命令: 確定時(shí)鐘分頻系數(shù),軟連接功能,端點(diǎn)工作模式,中斷模式。 4、DMA 設(shè)置命令 DMA 方式設(shè)置。 5、讀中斷寄存器

28、命令: 指示中斷的來(lái)源。 6、讀最后處理狀態(tài)命令: 讀取芯片的最后處理狀態(tài),向芯片發(fā)出讀最后處理狀態(tài)命令后,再向芯片發(fā)讀請(qǐng)求,所得到的就是端點(diǎn)的最后處理狀態(tài)。這個(gè)命令同時(shí)還將中斷寄存器中的位清零。 7、選擇端點(diǎn)命令: 選擇設(shè)備的端點(diǎn),以進(jìn)行下一步的緩沖區(qū)操作。 8、設(shè)置端點(diǎn)狀態(tài)命令: 設(shè)定端點(diǎn)的工作狀態(tài)。 9、緩沖區(qū)清零命令: 芯片接收到數(shù)據(jù)包后,內(nèi)部的緩沖區(qū)滿標(biāo)志將置 1,如果單片機(jī)將數(shù)據(jù)讀出,單片機(jī)要調(diào)用清緩沖區(qū)命令,將緩沖區(qū)釋放,這樣才能接收新的數(shù)據(jù)。 10、使緩沖區(qū)有效命令: 單片機(jī)把數(shù)據(jù)寫(xiě)入緩沖區(qū)后,要設(shè)置緩沖區(qū)滿標(biāo)志,這樣,當(dāng)芯片接收到 IN包時(shí),數(shù)據(jù)會(huì)自動(dòng)組織成數(shù)據(jù)包,返回主機(jī)。

29、 11、讀緩沖區(qū)命令: 單片機(jī)讀 D12 的內(nèi)部緩沖區(qū)時(shí),先向芯片發(fā)讀緩沖區(qū)命令,接著再讀 D12,就可得到數(shù)據(jù)。 12、寫(xiě)緩沖區(qū)命令: 單片機(jī)在把數(shù)據(jù)送到 D12 的內(nèi)部緩沖區(qū)前,應(yīng)先發(fā)寫(xiě)緩沖區(qū)命令。 13、應(yīng)答設(shè)置命令: SETUP 信息包到來(lái)時(shí),單片機(jī)要發(fā)送應(yīng)答設(shè)備命令,這樣 SETUP 的內(nèi)容才能保留在 D12 的緩沖區(qū)中。 14、發(fā)送恢復(fù)命令: 喚醒設(shè)備。 15、讀當(dāng)前幀號(hào)命令: 讀總線的當(dāng)前幀號(hào)。 3.4 80C528 單片機(jī)介紹 USB-RS232 接口轉(zhuǎn)換器的核心電路由單片機(jī)組成,根據(jù)設(shè)計(jì)方案的要求,對(duì)單片機(jī)有以下的要求。 1、 單片機(jī)應(yīng)具有看門(mén)狗電路,提高系統(tǒng)的可靠性。 2、

30、 單片機(jī)應(yīng)具有程序存儲(chǔ)器。 3、 單片機(jī)應(yīng)具有內(nèi)部定時(shí)器,作程序定時(shí)之用。 4、 單片機(jī)應(yīng)具有大容量的數(shù)據(jù)存儲(chǔ)器。 5、 為與 D12 連接,單片機(jī)應(yīng)具有外部擴(kuò)展總線。 6、 單片機(jī)應(yīng)具有 UART 異步串行接口。 7、 單片機(jī)的程序存儲(chǔ)器應(yīng)具有硬件加密功能,防止硬件被復(fù)制。 8、 單片機(jī)工作速度要快、價(jià)格低、功耗低、可靠性高、抗干擾能力強(qiáng)。 9、 單片機(jī)應(yīng)支持高級(jí)語(yǔ)言編程。3.4.1 80C528 的主要特點(diǎn) 1、 增強(qiáng)型 8051 CPU 指令代碼完全兼容 8051。同時(shí)支持 C51 編程。2、內(nèi)8kROM(可擴(kuò)充64kB外部 HYPERLINK /view/87697.htm t /_b

31、lank 存儲(chǔ)器)4、32個(gè)雙向I/O口5、256x8bit內(nèi)部RAM(可擴(kuò)充64kB外部存儲(chǔ)器)6、3個(gè)16位可編程定時(shí)/計(jì)數(shù)器7、時(shí)鐘頻率3.5-12/24/33MHz8、5.0V工作電壓9、全雙工 HYPERLINK /view/716175.htm t /_blank 串行通信口10、4層優(yōu)先級(jí)中斷結(jié)構(gòu)89C528各引腳如下圖3.1所示: 圖3.180C528單片機(jī)3.4.2 單片機(jī)的復(fù)位電路和晶振電路的設(shè)計(jì)如下圖所示3.2所示:圖3.2 復(fù)位和晶振電路圖圖3.2復(fù)位電路和晶振電路圖復(fù)位電路: 單片機(jī)的復(fù)位電路就是在單片機(jī)受到環(huán)境干擾時(shí),按下自身按鈕就可以讓程序重頭開(kāi)始執(zhí)行。復(fù)位電路的

32、工作原理: 如圖所示,電容的大小設(shè)置為22uf,電阻的大小為10k,需要的時(shí)間為兩者相乘。如果按下開(kāi)關(guān),電容就會(huì)處于一種短路的狀態(tài),那么電容就會(huì)釋放出之前的電量,這個(gè)時(shí)候電阻的電量增加,所以單片機(jī)的RST接收到高電平,就會(huì)產(chǎn)生復(fù)位。 單片機(jī)的晶振電路及其工作原理:?jiǎn)纹瑱C(jī)的晶振作用是為單片機(jī)系統(tǒng)系統(tǒng)提供其所需的時(shí)鐘信號(hào),其提供的頻率越高,速度就越快。3.4.3 MAX232電平轉(zhuǎn)換電路作用如下圖所示為其轉(zhuǎn)換的電路圖3.3圖3.3 電平轉(zhuǎn)化電路目的:89C52單片機(jī)自帶一串口,不過(guò)是TTL電平的,而計(jì)算機(jī)上的串口為CMOS電平,因此需要接上MAX232,將其轉(zhuǎn)化為CMOS電平。串口傳輸需要速率較快

33、,整個(gè)系統(tǒng)要求工作地時(shí)鐘頻率較高,因而采用22.1184MHz的晶振,還加快啦傳輸速度,以保證數(shù)據(jù)不損失。3.5 接口轉(zhuǎn)換器的硬件電路設(shè)計(jì) 根據(jù) USB-RS232 接口轉(zhuǎn)換器的設(shè)計(jì)方案,設(shè)計(jì)了 USB-RS232 接口轉(zhuǎn)換器的硬件電路框圖和具體的電路圖。 3.5.1 硬件系統(tǒng)框圖 選定USB通信芯片與單片機(jī)后,接下來(lái)就是把芯片連接成電路,完整的電路原理圖如圖3.4:圖3.4 電路圖3.5 小結(jié) 本章首先分析了 USB-RS232 接口轉(zhuǎn)換器的設(shè)計(jì)方案。然后介紹了所選用的USB 接口芯片 AT90USB1286 的特點(diǎn)及操作命令,給出了與單片機(jī)的連接電路。接著介紹了所選用的單片機(jī)芯片 80c5

34、2最后實(shí)現(xiàn)了接口轉(zhuǎn)換器的硬件電路,給出了具體的硬件電路圖,包括單片機(jī)電路、USB 接口電路、TTL-RS232 電平轉(zhuǎn)換電路。4 系統(tǒng)的軟件設(shè)計(jì)4.1 USB轉(zhuǎn)串口設(shè)備端的程序設(shè)計(jì)硬件電路設(shè)計(jì)好了,接下來(lái)要想使電路運(yùn)行起來(lái),在此電路中,首先要通過(guò)單片機(jī)實(shí)現(xiàn)對(duì)AT90USB1286芯片的控制,就是控制它的驅(qū)動(dòng)程序,還需要控制的是單片機(jī)的驅(qū)動(dòng)。來(lái)構(gòu)成一個(gè)協(xié)議的框架。一般來(lái)說(shuō),要實(shí)現(xiàn)USB轉(zhuǎn)串口,有兩種可行的方法:一種是使用USB協(xié)議規(guī)定的CDC類中的抽象模型(abstract control model)子類中的通用AT命令(common AT commands)協(xié)議,此方案不需要開(kāi)發(fā)相應(yīng)的驅(qū)動(dòng)程

35、序。第二種:就是需要用戶自己開(kāi)發(fā)程序來(lái)驅(qū)動(dòng),自己定義USB協(xié)議,但是操作起來(lái)比較困難,但相對(duì)于第一種會(huì)比較變通。不過(guò)兩種的通訊方式是差不多的,最大的不同就在于它們的怎么敘述不同,可以通過(guò)89C52控制程序?qū)崿F(xiàn) 圖4.1 設(shè)備端程序流程圖 初始化部分,程序就開(kāi)始工作,它的主要工作是:初始化串口,讀出ID然后用程序的方式來(lái)控制USB的斷開(kāi)和連接。1)USB-CDC類設(shè)備的描述符如下:設(shè)備描述符(18字節(jié))0 x12,0 x01,0 x10,0 x01,0 x02,0 x00,0 x00,0 x10,0 x99,0 x99,0 x99,0 x99,0 x00,0 x01,0 x01,0 x02 0

36、x03,0 x01以下是配置描述符集合()配置描述符(9字節(jié))0 x09,0 x02,0 x43,0 x00,0 x02,0 x01,0 x00,0 x80,0 x32CDC類接口描述符(9字節(jié))0 x09,0 x04,0 x00,0 x00,0 x01,0 x02,0 x02,0 x01,0 x00,功能描述符(19字節(jié))Header Functional Descriptor0 x05,0 x24,0 x00,0 x10,0 x01Call Management Functional Descriptor0 x05,0 x24,0 x01,0 x00,0 x00Abstract Contr

37、ol Management Functional Descriptor0 x04,0 x24,0 x02,0 x02Union Functional Descriptor0 x05,0 x24,0 x06,0 x00,0 x01接口0的端點(diǎn)描述符(7字節(jié))0 x07,0 x05,0 x81,0 x03,0 x10,0 x00,0 x0A接口1(數(shù)據(jù)接口)的接口描述符(9字節(jié))0 x09,0 x04,0 x01,0 x00,0 x02,0 x0A,0 x00,0 x00,0 x00批量輸入端點(diǎn)2描述符(7字節(jié))0 x07,0 x05,0 x82,0 x02,0 x40,0 x00,0 x00批量

38、輸出端點(diǎn)2描述符(7字節(jié))0 x07,0 x05,0 x02,0 x02,0 x40,0 x00,0 x00配置好設(shè)備的描述符后,主機(jī)應(yīng)該可以成功地識(shí)別該設(shè)備了,但USB轉(zhuǎn)串口設(shè)備還不能算完成。還需要實(shí)現(xiàn)對(duì)端點(diǎn)的數(shù)據(jù)處理:首選要實(shí)再對(duì)SET_CONTROL_LINE_STATE SET_LINE_CONING 和 GET_LINE_CONING 請(qǐng)求的處理,另外,要實(shí)現(xiàn)對(duì)串口數(shù)據(jù)的處理,即將串口接收到的數(shù)據(jù)發(fā)送到端點(diǎn)2,將端點(diǎn)2接收到的數(shù)據(jù)發(fā)送到串口,數(shù)據(jù)代碼如下:if(ConfigValue!=0) if(Ep2InIsBusy=0) /判斷端點(diǎn)2是否空閑 SendUartDataToEp2

39、(); /調(diào)用函數(shù)將緩沖區(qū)數(shù)據(jù)發(fā)送到端點(diǎn)2 if(UsbEp2ByteCount!=0) /端點(diǎn)2接收緩沖區(qū)中還有數(shù)據(jù)未發(fā)送,則發(fā)送到串口 /發(fā)送一字節(jié)到串口 UartPutChar(UsbEp2BufferUsbEp2BufferOutputPoint); UsbEp2BufferOutputPoint+; /發(fā)送位置后移1 UsbEp2ByteCount-; /計(jì)數(shù)值減1 到現(xiàn)在,USB轉(zhuǎn)串基本完成,然后單片機(jī)接收到程序,并在主機(jī)端裝上驅(qū)動(dòng)程序后(Windows操作系統(tǒng)自帶有USB-CDC類驅(qū)動(dòng),用戶無(wú)需開(kāi)發(fā),只需提供一個(gè)安裝驅(qū)動(dòng)用的INF文件),即可產(chǎn)生一個(gè)虛擬串口了,(2)自定義USB

40、類設(shè)備的描述符如下:設(shè)備描述符(18字節(jié))0 x12,0 x01,0 x10,0 x01,0 xFF,0 x00,0 x00,0 x10,0 x99,0 x99,0 x99,0 x99,0 x00,0 x01,0 x01,0 x02,0 x03,0 x01配置描述符集合(32字節(jié))配置描述符(9字節(jié))0 x09,0 x02,sizeof(ConfigurationDescriptor)&0 xFF,(sizeof(ConfigurationDescriptor)8)&0 xFF,0 x01,0 x01,0 x00,0 x80,0 x32,接口描述符(9字節(jié))0 x09,0 x04,0 x00,

41、0 x00,0 x02,0 x00,0 x00,0 x00,0 x00批量輸入端點(diǎn)2描述符(7字節(jié))0 x07,0 x05,0 x82,0 x02,0 x40,0 x00,0 x00批量輸出端點(diǎn)2描述符(7字節(jié))0 x07,0 x05,0 x02,0 x02,0 x40,0 x00,0 x00語(yǔ)言描述符此處略去。4.2 驅(qū)動(dòng)程序開(kāi)發(fā)環(huán)境WinDDK的使用 WDM(Windows Driver Model)是Microsoft提出的一種全新的設(shè)備驅(qū)動(dòng)程序模型。它是在Windows NT 內(nèi)核驅(qū)動(dòng)模型(Kernel-model Driver Model)的基礎(chǔ)上發(fā)展起來(lái)的,增加了對(duì)即插即用(PnP

42、)、高級(jí)電源管理(Power Management)、Windows管理接口(WMI)的支持,更重要的是,WDM是一種通用的驅(qū)動(dòng)模式,提供了包括USB、IEEE1394、和HID等在內(nèi)的一系列驅(qū)動(dòng)程序類。在Windows 98 和Windows 2000/XP中,WDM驅(qū)動(dòng)程序均可正常使用。4.3 USB驅(qū)動(dòng)程序、虛擬串口的實(shí)現(xiàn)方法 DDK提供了構(gòu)造URB的內(nèi)核函數(shù)UsbBuildGetDescritorRequest,在功能驅(qū)動(dòng)中,所有與USB的通信,都需要用這個(gè)函數(shù)創(chuàng)建URB,并通過(guò)IRP發(fā)送到底層USB總線驅(qū)動(dòng),其聲明如下:VOID UsbBuildGetDescritorRequest

43、( IN OUT PURB Urb, IN USHORT Length, IN UCHAR DescriptorType,IN UCHAR Index,IN USHORT LanguageId,IN PVOID TransferBuffer OPTIONAL,IN PMDL TransferBufferMDL OPTIONAL,IN ULONG TransferBufferLength,IN PURB Link OPTIONAL); URB:用來(lái)輸出的URB結(jié)構(gòu)的指針。 Length:用來(lái)描述該URB結(jié)構(gòu)的大小。 DescriptorType:描述該URB的類型。它可以是USB_DEVICE_

44、DESCRIPTOR_TYPE、USB_CONFIGURATION_DESCRIPTOR_TYPE 和 USB_STRING_DESCRIPTOR_TYPE。 Index:用來(lái)描述設(shè)備描述符的索引。 LanguageId:用來(lái)描述語(yǔ)言ID。 TransferBuffer:如果用緩沖區(qū)讀取設(shè)備,TransferBuffer 是緩沖區(qū)內(nèi)存的指針。 TransferBufferMDL:如果用直接讀取內(nèi)存時(shí),TransferBufferMDL是直接讀取內(nèi)存時(shí)MDL的指針。 TransferBufferLength:對(duì)于該URB所操作內(nèi)存的大小。 功能驅(qū)動(dòng)將URB包構(gòu)造完畢后,就可以發(fā)送到底層總線驅(qū)動(dòng)上

45、了,URB包要和一個(gè)IRP相關(guān)聯(lián)起來(lái),這就需要用IoBuildDeviceControlRequest創(chuàng)建一個(gè)IO控制碼的IRP,然后將URB作為IRP的參數(shù),用IoCallDriver將URB發(fā)送到底層總線驅(qū)動(dòng)上。 與一般的驅(qū)動(dòng)類似,USB驅(qū)動(dòng)的初始化入口函數(shù)為DriverEntry,在該函數(shù)中,分別指定各個(gè)IRP的派遣函數(shù)地址、指定AddDevice例程函數(shù)地址、指定Unload例程函數(shù)地址等。 在AddDevice例程中,創(chuàng)建功能設(shè)備對(duì)像,然后將該對(duì)象掛載在總線設(shè)備對(duì)像之上,從而形成設(shè)備棧。另外為設(shè)備創(chuàng)建一個(gè)設(shè)備鏈接,以便于應(yīng)用程序可以找到這個(gè)設(shè)備。 插拔USB設(shè)備時(shí)會(huì)與4個(gè)IRP相關(guān),

46、即IRP_MN_START_DEVICE、IRP_MN_STOP_DEVICE、IRP_MN_EJECT、IRP_MN_SURPRISE_REMOVAL。其中,IRP_MN_START_DEVICE消息是當(dāng)驅(qū)動(dòng)爭(zhēng)取加載并運(yùn)行時(shí),操作系統(tǒng)的PnP管理器會(huì)將這個(gè)IRP發(fā)往設(shè)備驅(qū)動(dòng)。當(dāng)獲得這個(gè)IRP后,USB驅(qū)動(dòng)需要獲得USB設(shè)備類別描述符,如設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符等。并通過(guò)這些描述符有用的信息,記錄在設(shè)備擴(kuò)展中。 IRP_MN_STOP_DEVICE 是設(shè)備關(guān)閉前,PnP管理器發(fā)出的IRP。USB驅(qū)動(dòng)獲得這個(gè)IRP時(shí),應(yīng)該盡快結(jié)束當(dāng)前執(zhí)行的IRP,并將其逐個(gè)取消掉。另外,在

47、設(shè)備擴(kuò)展中還應(yīng)該有表示當(dāng)前狀態(tài)的變量,當(dāng)IRP_MN_STOP_DEVICE來(lái)臨時(shí),將當(dāng)前狀態(tài)記錄成停止?fàn)顟B(tài)。IRP_MN_EJECT是設(shè)備被正常彈出,而IRP_MN_SURPRISE_REMOVAL則是設(shè)備非自然彈出,有可能是意外掉電或者強(qiáng)行拔出等。在這種IRP到來(lái)的時(shí)候,應(yīng)該強(qiáng)迫所有未完成的讀寫(xiě)IRP結(jié)束并取消,并且將當(dāng)前設(shè)備狀態(tài)設(shè)置成設(shè)備被拔掉。 USB設(shè)備大部分?jǐn)?shù)據(jù)的傳送是通過(guò)Bulk管道來(lái)傳輸?shù)?,Bulk管理的讀取是在IRP_MJ_READ各IRP_MJ_WRITE的派遣函數(shù)中,應(yīng)用程序可以通過(guò)ReadFile、WriteFile等API對(duì)設(shè)備進(jìn)行操作。 在IRP_MJ_READ各I

48、RP_MJ_WRITE的派遣例程中設(shè)置了完成例程,其原理是將讀寫(xiě)的大小分成單位為BULKUSB_MAX_TRANSFER_SIZE的若干塊,依次將請(qǐng)求發(fā)往底層USB總線驅(qū)動(dòng)。虛擬串口就是當(dāng)本地并沒(méi)有對(duì)應(yīng)的串口硬件設(shè)備,而為應(yīng)用層提供串口設(shè)備一樣的系統(tǒng)調(diào)用接口,以兼容原本使用本地串口的應(yīng)用軟件的“虛”設(shè)備。本文作者給出了一種在Windows平臺(tái)上實(shí)現(xiàn)虛擬串口的方法,由此實(shí)現(xiàn)的“串口”具有真實(shí)串口完全相同的系統(tǒng)調(diào)用接口。DDK對(duì)串口驅(qū)動(dòng)提供了專門(mén)接口。只要編寫(xiě)的驅(qū)動(dòng)滿足這些接口,并按照串口標(biāo)準(zhǔn)的命名方法,不管是真實(shí)的還是虛擬的串口設(shè)備,Windows操作系統(tǒng)都會(huì)認(rèn)為這個(gè)設(shè)備是一個(gè)標(biāo)準(zhǔn)的串口設(shè)備。用

49、標(biāo)準(zhǔn)的串口調(diào)試工具都可以與這個(gè)設(shè)備進(jìn)行通信。串口驅(qū)動(dòng)的入口函數(shù)依然是DriverEntry,并在其中指定各種IRP的派遣函數(shù)、AddDevice例程、Unload例程等。其中在AddDevice例程中,需要?jiǎng)?chuàng)建設(shè)備對(duì)像,創(chuàng)建完設(shè)備對(duì)象之后,需要將設(shè)備對(duì)象指定一個(gè)符號(hào)鏈接,以便客戶程序(串口調(diào)試工具)能夠識(shí)別,該符號(hào)以COM開(kāi)頭,并接一個(gè)數(shù)字就可以了。編寫(xiě)串口驅(qū)動(dòng)的核心是對(duì)應(yīng)用程序發(fā)出的IO控制碼和讀寫(xiě)命令(即接口)進(jìn)行處理。這些控制碼分別是:(1)、IOCTL_SERIAL_SET_QUEUE_SIZE這個(gè)控制碼是應(yīng)用程序向驅(qū)動(dòng)請(qǐng)求設(shè)置串口驅(qū)動(dòng)內(nèi)部的緩沖區(qū)大小,它是向驅(qū)動(dòng)傳遞SERIAL_QU

50、EUE_SIZE數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行設(shè)置的。對(duì)于虛擬串口驅(qū)動(dòng)來(lái)說(shuō),這是不需要關(guān)心的。(2)、IOCTL_SERIAL_GET_BAUD_RATE應(yīng)用程序向驅(qū)動(dòng)程序IOCTL_SERIAL_GET_BAUD_RATE命令,這主要是詢問(wèn)驅(qū)動(dòng)這個(gè)設(shè)備的波特率。驅(qū)動(dòng)應(yīng)該回應(yīng)給應(yīng)用程序SERIAL_BAUD_RATE的數(shù)據(jù)結(jié)構(gòu)來(lái)通知波特率的數(shù)值。(3)、IOCTL_SERIAL_GET_LINE_CONTROL應(yīng)用程序向驅(qū)動(dòng)程序IOCTL_SERIAL_GET_LINE_CONTROL命令,這要是為了返回串口的行控制信息,行控制信息用SERIAL_LINE_CONTROL數(shù)據(jù)結(jié)構(gòu)表示typedef struc

51、t _SERIAL_LINE_CONTROL UCHAR StopBits; UCHAR Parity; UCHAR WordLength; SERIAL_LINE_CONTROL, *PSERIAL_LINE_CONTROL;(4)、IOCTL_SERIAL_GET_CHARS這個(gè)命令是應(yīng)用程序向驅(qū)動(dòng)請(qǐng)求特殊字符,用來(lái)與控制信號(hào)握手,用數(shù)據(jù)結(jié)構(gòu)SERIAL_CHARS表示Typedef struct _SERIAL_CHARS UCHAR EofChar; UCHAR ErrorChar; UCHAR BreakChar; UCHAR EventChar; UCHAR XonChar; UC

52、HAR XoffChar; SERIAL_CHARS,*PSERIAL_CHARS;其中EofChar代表是否是傳送結(jié)束、ErrorChar代表是否傳送中有錯(cuò)誤、BreakChar代表是否傳送有停止等。(5)、IOCTL_SERIAL_GET_HANDFLOW這個(gè)命令是負(fù)責(zé)向驅(qū)動(dòng)程序獲得串口驅(qū)動(dòng)的握手信號(hào),握手信號(hào)用SERIAL_HANDFLOW數(shù)據(jù)結(jié)構(gòu)表示。Typedef struct _SERIAL_HANDFLOWULONG ControlHandShake;ULONG FlowReplace;ULONG XonLimit;ULONG XoffLimit; SERIAL_HANDFLOW

53、,*PSERIAL_HANDFLOW;(6)、IOCTL_SERIAL_SET_WAIT_MASK這個(gè)命令主要是設(shè)置串口驅(qū)動(dòng)的某些事件發(fā)生時(shí),需要向應(yīng)用程序通知。這些事件包括以下幾種事件:#define SERIAL_EV_RXCHAR 0 x0001#define SERIAL_EV_RXFLAG 0 x0002#define SERIAL_EV_TXEMPTY 0 x0004#define SERIAL_EV_CTS 0 x0008#define SERIAL_EV_DSR 0 x0010#define SERIAL_EV_RLSD 0 x0020#define SERIAL_EV_BRE

54、AK 0 x0040#define SERIAL_EV_ERR 0 x0080(7)、IOCTL_SERIAL_WAIT_ON_MASK這個(gè)IO控制碼是最重要的一個(gè),當(dāng)應(yīng)用程序通過(guò)前面幾個(gè)IO控制碼初始化好后,就會(huì)發(fā)送這個(gè)請(qǐng)求。在驅(qū)動(dòng)程序中,應(yīng)該阻塞在那里返回PENDING狀態(tài),而不是完成這個(gè)IRP。當(dāng)IOCTL_SERIAL_WAIT_ON_MASK設(shè)置的事件中的一項(xiàng)發(fā)生時(shí),阻塞狀態(tài)改為完成,并通知應(yīng)用程序究竟是哪種事件發(fā)生了。串口驅(qū)動(dòng)程序完成處理IO控制碼之后,接下來(lái)就是對(duì)讀寫(xiě)IRP進(jìn)行處理了,對(duì)于寫(xiě)IRP的派遣函數(shù)中,主要寫(xiě)的數(shù)據(jù)存儲(chǔ)在設(shè)備擴(kuò)展中,以便以后讀的時(shí)候?qū)⑦@些內(nèi)容返回應(yīng)用程序,

55、另個(gè)使阻塞的IO控制蘇醒過(guò)來(lái),調(diào)用DriverCheckEvents函數(shù)阻塞IRP完成,使應(yīng)用程序的線程得以繼續(xù)運(yùn)行。并且這個(gè)線程還知道了SERIAL_EV_RXCHAR和SERIAL_EV_RX80FULL事件的到來(lái),從而發(fā)起一個(gè)讀請(qǐng)求,傳送到驅(qū)動(dòng)程序中就是讀IRP。在讀IRP派遣函數(shù)中,負(fù)責(zé)將存儲(chǔ)在設(shè)備擴(kuò)展中的數(shù)據(jù)通過(guò)IRP傳送到應(yīng)用程序。4.4 使用DDK設(shè)計(jì)USB轉(zhuǎn)串口驅(qū)動(dòng)程序4.4.1 USB轉(zhuǎn)串口的驅(qū)動(dòng)程序基本框架與一般的應(yīng)用程序流程類似,USB轉(zhuǎn)串口的驅(qū)動(dòng)程序流程也可分為初始化、數(shù)據(jù)處理、判斷是結(jié)束設(shè)備等部分。驅(qū)動(dòng)程序流程圖如下圖4.2所示: 圖4.2驅(qū)動(dòng)程序流程圖 系統(tǒng)初始化:

56、此部分主要DriverEntry函數(shù)來(lái)處理。DriverEntry是驅(qū)動(dòng)程序的入口點(diǎn),該函數(shù)由I/O系統(tǒng)直接調(diào)用。在函數(shù)中獲取設(shè)備的注冊(cè)表信息、并對(duì)以下的IRP指定相應(yīng)的派遣函數(shù):DriverObject-MajorFunctionIRP_MJ_CREATE = USB2COM_Create;DriverObject-MajorFunctionIRP_MJ_CLOSE = USB2COM_Close;DriverObject-DriverUnload = USB2COM_Unload;/ 用戶模式DeviceIoControl()調(diào)用此例程DriverObject-MajorFunctionI

57、RP_MJ_DEVICE_CONTROL=USB2COM_ProcessIOCTL;/ 用戶模式ReadFile()/WriteFile()調(diào)用此例程DriverObject-MajorFunctionIRP_MJ_WRITE = USB2COM_Write;DriverObject-MajorFunctionIRP_MJ_READ = USB2COM_Read;/系統(tǒng)PNP 與電源管理請(qǐng)求處理例程DriverObject-MajorFunctionIRP_MJ_SYSTEM_CONTROL= USB2COM_ProcessSysControlIrp;DriverObject-MajorFun

58、ctionIRP_MJ_PNP= USB2COM_ProcessPnPIrp;DriverObject-MajorFunctionIRP_MJ_POWER= USB2COM_ProcessPowerIrp;指定IRP派遣函數(shù)后,接下來(lái)AddDevice例程創(chuàng)建設(shè)備對(duì)象/ 當(dāng)設(shè)備插入時(shí)會(huì)調(diào)用此例程DriverObject-DriverExtension-AddDevice=USB2COM_PnPAddDevice;對(duì)USB設(shè)備而言,首先要檢查設(shè)備是否已啟用,如有必要復(fù)位設(shè)備所在的端口。使用IOCTL_INTERNAL_USB_GET_PORT_ST和IOCTL_INTERNAL_USB_RESE

59、T_PORT來(lái)構(gòu)造IRP,并將NextIrpStack-Parameters.Others.Argument1置為NULL,進(jìn)而調(diào)用IoCallDriver發(fā)送。 接下來(lái)就是用合適的配置弄設(shè)備和初始化通道,并用它們填充USBD_INTERFACE_LIST_ENTRY類型的數(shù)組,即接口描述符列表;再將接口描述符列表作為參數(shù),調(diào)用函數(shù)USBD_CreateConfigurationRequestEx構(gòu)造配置設(shè)備接口的URB,并發(fā)送,完成設(shè)備接口的配置。至此,初始化工作完成。4.4.2 makefile文件與source文件 大多數(shù)情況下,makefile文件只需寫(xiě)入如下內(nèi)容即可:!INCLUDE

60、 $(NTMAKEENV)makefile.def以上語(yǔ)句的含義是包含了DDK目錄中的makefile.def在這里還需要編寫(xiě)的一個(gè)文件source,本項(xiàng)目的source文件內(nèi)容如下:TARGETNAME=usb2rs232TARGETTYPE=DRIVERDRIVERTYPE=WDMTARGETPATH=objTARGETLIBS=$(DDK_LIB_PATH)usbd.lib、USE_MAPSYM=1USER_C_FLAGS=/FAcsSOURCES= usb2com.rc dbg.c usb.c pnp.c power.c ioctl.c rw.c serial.c buf.c wait

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論