<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 將應(yīng)用從串行接口移植到USB接口的簡(jiǎn)便方法

          將應(yīng)用從串行接口移植到USB接口的簡(jiǎn)便方法

          作者: 時(shí)間:2009-01-04 來(lái)源:網(wǎng)絡(luò) 收藏

          由于可以獲得很多支持的微控制器和接口器件,所以對(duì)嵌入式應(yīng)用設(shè)計(jì)工程師而言,沒(méi)有COM端口并不會(huì)帶來(lái)障礙。選擇正確的工具和軟件解決方案提供了一條轉(zhuǎn)移到的捷徑。

          硬件補(bǔ)丁程序

          對(duì)那些需要為基于串行端口的老項(xiàng)目提出快速解決方案的設(shè)計(jì)工程師來(lái)說(shuō),最先有吸引力的策略是采用一種補(bǔ)丁系統(tǒng)。

          這可通過(guò)在嵌入式控制器串行接口與PC機(jī)連接器之間增加一個(gè)定制的USB-UART轉(zhuǎn)換器來(lái)實(shí)現(xiàn)(圖1)。

          這些器件通常配有支持各種操作系統(tǒng)的定制驅(qū)動(dòng)程序,完全可以仿真一個(gè)標(biāo)準(zhǔn)的串行端口。

          圖1:與采用大部分USB-UART接口器件相比,兼容USB接口的單芯片解決方案具有更高的性能和更低的成本。

          該方法意味著需要重新設(shè)計(jì)嵌入式應(yīng)用電路板以騰出空間容納新的元件,但它不用改變固件和PC應(yīng)用程序。拆除已證明無(wú)用的串行端口接收器有時(shí)只增加幾美元成本,但卻失去了采用USB所帶來(lái)的大部分好處。

          實(shí)際上,USB能夠更快地傳輸數(shù)據(jù),傳輸速度可達(dá)到典型串行端口的100倍(12 Mbps與115 kbps),繼續(xù)使用UART,就會(huì)成為主要的設(shè)計(jì)瓶頸。另外,由于大部分USB-UART接口器件缺乏靈活性,無(wú)法實(shí)現(xiàn)靈活的電源管理,而這在許多嵌入式設(shè)計(jì)中是一個(gè)關(guān)鍵特性。

          單芯片解決方案

          從串行端口轉(zhuǎn)移到USB的一個(gè)更好的硬件選擇是采用單芯片解決方案,即選用具有USB接口的微處理器,并開(kāi)發(fā)驅(qū)動(dòng)程序(圖2)以模仿串行端口。從硬件角度來(lái)看,單芯片解決方案顯得非常有趣。

          圖2:采用單芯片解決解決方案可很好地將應(yīng)用從串行接口移植到USB接口。

          幾乎不增加額外成本就可以在通用模型上使用兼容USB的通用型微控制器。拆除了串行端口接收器,電路板上元件的數(shù)量也就相應(yīng)減少,可以在低成本USB連接器與新型兼容USB微控制器的D+/D-管腳間建立直接鏈接。

          當(dāng)通用微控制器和兼容USB的微控制器引腳互相兼容,就能將電路板重新設(shè)計(jì)的成本和工作量減小到最低。此外,不再為那些可以使用USB總線5V電源的應(yīng)用配備電源適配器,也可以進(jìn)一步降低成本。

          軟件界面

          一旦我們選擇了單芯片解決方案,我們就為應(yīng)用需要開(kāi)發(fā)新的PC驅(qū)動(dòng)程序,甚至可能是新的固件。幸運(yùn)的是,軟件開(kāi)發(fā)人員有多種選擇,可通過(guò)重復(fù)使用應(yīng)用界面種類(lèi)的方法來(lái)減小開(kāi)發(fā)工作量。

          被構(gòu)建到現(xiàn)在PC操作系統(tǒng)中,并具有最好支持的最常見(jiàn)USB接口類(lèi)大概要算所謂的人機(jī)接口設(shè)備(通常指HID類(lèi))。所有的PC都需要一些像鍵盤(pán)或鼠標(biāo)這樣的人機(jī)接口,這些設(shè)備的連接已經(jīng)從串行或者PS/2端口升級(jí)進(jìn)USB。

          所有操作系統(tǒng)都可以很好地支持HID,因?yàn)槠潋?qū)動(dòng)程序已經(jīng)捆綁在Windows、Linux和MAC OS的每個(gè)拷貝中。因此,對(duì)于那些想從不太復(fù)雜的嵌入式設(shè)備中讀寫(xiě)少量數(shù)據(jù)的設(shè)計(jì)工程師而言,HID是一個(gè)非常有吸引力的選擇。

          不幸的是,應(yīng)用編程接口(API)沒(méi)有什么能比得上COM端口接口,其結(jié)果是,將API移植到現(xiàn)有系統(tǒng)上更成問(wèn)題,特別當(dāng)PC上已經(jīng)有一個(gè)復(fù)雜的應(yīng)用軟件的時(shí)候。

          其它像打印機(jī)類(lèi)和海量存儲(chǔ)這樣的標(biāo)準(zhǔn)USB接口類(lèi)都是可能與嵌入式設(shè)備進(jìn)行通訊。它們將遭遇同樣問(wèn)題,即陌生的接口和開(kāi)發(fā)新PC應(yīng)用軟件的需求。

          驅(qū)動(dòng)程序開(kāi)發(fā)需要有操作系統(tǒng)底層的深厚知識(shí)。就Windows PC機(jī)而言,這意味著要熟悉通常叫做WDM的Windows驅(qū)動(dòng)程序模型。如果沒(méi)有這方面的專(zhuān)業(yè)知識(shí)(大部分嵌入式控制設(shè)計(jì)工程師并不是WMD方面的專(zhuān)家),那么開(kāi)發(fā)一個(gè)可基本工作的驅(qū)動(dòng)程序原型也需要花費(fèi)數(shù)月時(shí)間。

          幸運(yùn)的是,在大部分最新版本的Windows內(nèi)的一個(gè)接口類(lèi)可以使我們擺脫困境。微軟公司原先開(kāi)發(fā)這個(gè)叫做USB通訊設(shè)備類(lèi)(CDC)是用來(lái)支持調(diào)制解調(diào)器應(yīng)用。例如,開(kāi)發(fā)人員可以獲得CDC接口的完整源代碼,以進(jìn)行面向PIC18F4550系列的快閃USB 8位微控制器的開(kāi)發(fā)。

          CDC接口提供以下有用特性:固件庫(kù)的代碼量相對(duì)較小,為3KB;單芯片解決方案;數(shù)據(jù)存儲(chǔ)僅占用大約50B的存儲(chǔ)器空間(不包括緩沖區(qū));最大吞吐量為80 KBps;完全由USB協(xié)議控制數(shù)據(jù)流量(不需要RS-232 XON/XOFF和硬件流控)。

          簡(jiǎn)單的固件移植

          在以后情況中,我們假設(shè)原先的串行端口代碼是用C語(yǔ)言編寫(xiě)的,并且使用了可訪問(wèn)集成UART外設(shè)的公共C庫(kù)。給定這些條件后,將固件移植到CDC需要進(jìn)行如下的修改:

          在主文件頭部,用相應(yīng)的USB聲明代替針對(duì)串行端口的#include聲明;

          在主函數(shù)中,增加對(duì)USB-CDC初始化代碼的調(diào)用;

          在主循環(huán)中,增加對(duì)USB后臺(tái)任務(wù)的調(diào)用;

          驗(yàn)證應(yīng)用程序代碼,以實(shí)現(xiàn)與USB后臺(tái)任務(wù)的協(xié)同多任務(wù)處理;

          最后,為鏈接器提供USB-CDC專(zhuān)用庫(kù),生成最終的可執(zhí)行代碼,然后對(duì)快閃芯片進(jìn)行編程。

          在實(shí)踐中,上述這種情況要求包含阻塞循環(huán)的應(yīng)用程序不能調(diào)用任何功能,換而言之,它不能占用100%的處理器時(shí)間,也不能妨礙USB后臺(tái)任務(wù)執(zhí)行。反過(guò)來(lái),所有USB控制函數(shù)、中斷、標(biāo)志和緩沖機(jī)制都由CDC類(lèi)固件后臺(tái)任務(wù)管理,設(shè)計(jì)工程師無(wú)需關(guān)注其實(shí)現(xiàn)細(xì)節(jié)。所有顯示出來(lái)的只是一個(gè)非常類(lèi)似于公共串行端口庫(kù)的小的函數(shù)集。

          聯(lián)機(jī)的時(shí)間

          現(xiàn)在可以將應(yīng)用連接到PC上,Windows即插即用技術(shù)該登場(chǎng)了。在對(duì)所有USB應(yīng)用都適用的初始枚舉階段后,屏幕上將彈出一個(gè)對(duì)話框,提醒用戶已經(jīng)發(fā)現(xiàn)一個(gè)新的硬件設(shè)備,需要為操作系統(tǒng)對(duì)其進(jìn)行配置,以便使用它。

          雖然CDC驅(qū)動(dòng)程序已經(jīng)是操作系統(tǒng)的一部分,但仍然需要更多的信息來(lái)幫助將它們與新發(fā)現(xiàn)的設(shè)備進(jìn)行綁定,這也在Windows硬件管理器中創(chuàng)建一個(gè)端口特定的“屬性頁(yè)”,以后用戶可以用它卸載或重新配置端口。在安裝階段,一個(gè)很小的純文本文件(擴(kuò)展名為.inf)非常有用,它需要先用(文本編輯器)準(zhǔn)備好,當(dāng)即插即用向?qū)б髸r(shí)提供。

          獲得COM端口

          如果一切順利,此時(shí)即插即用已經(jīng)完成了安裝過(guò)程,一個(gè)新的串行設(shè)備就會(huì)出現(xiàn)在硬件管理器中,系統(tǒng)會(huì)自動(dòng)使用下一個(gè)可用的序列號(hào)為它指定一個(gè)名稱(chēng)(例如,已經(jīng)安裝了COM2和COM1,就會(huì)出現(xiàn)COM3),用戶可以使用已經(jīng)編寫(xiě)好用來(lái)訪問(wèn)實(shí)際COMx端口的程序來(lái)訪問(wèn)這個(gè)端口(如所有Windows軟件中的超級(jí)終端程序)。

          連接好后,除了通訊速度提高了,功能上沒(méi)有什么區(qū)別。與PC上最快的串行端口相比,通訊速度提高了一個(gè)或兩個(gè)數(shù)量級(jí)。Visual Basic或C++程序員可通過(guò)標(biāo)準(zhǔn)的Windows OpenFile()、ReadFile() 和WriteFile() API 來(lái)對(duì)仿真的COM端口進(jìn)行讀寫(xiě),而不用改變?nèi)魏未a。

          現(xiàn)在已經(jīng)可以使用兼容USB的、完整版閃存微控制器,這些單芯片解決方案為嵌入式控制設(shè)計(jì)工程師提供了最低的成本和最大的靈活性。通過(guò)使用CDC類(lèi)庫(kù),串行端口仿真為工程師們將應(yīng)用程序移植到更快的USB通訊、擺脫傳統(tǒng)串行端提供了一條捷徑,同時(shí)也消除了Windows開(kāi)發(fā)中的障礙。按照上述步驟,嵌入式設(shè)計(jì)工程師可以快速地從串行端口轉(zhuǎn)移到USB,使他們將100%的精力集中到嵌入式應(yīng)用這個(gè)主要的專(zhuān)業(yè)領(lǐng)域。



          關(guān)鍵詞: MCU USB

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();