<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

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

硬件補丁程序

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

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

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

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

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

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

單芯片解決方案

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

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

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

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

軟件界面

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

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

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

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

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

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

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

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

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

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

在主文件頭部,用相應的USB聲明代替針對串行端口的#include聲明;

在主函數中,增加對USB-CDC初始化代碼的調用;

在主循環(huán)中,增加對USB后臺任務(wù)的調用;

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

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

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

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

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

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

獲得COM端口

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

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

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



關(guān)鍵詞: MCU USB

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>