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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 利用嵌入式USB主控進(jìn)行設(shè)計(jì)

          利用嵌入式USB主控進(jìn)行設(shè)計(jì)

          作者: 時(shí)間:2013-10-26 來源:網(wǎng)絡(luò) 收藏

          USB(通用串行總線)于1995年面世,目前已發(fā)展成為一種解決個(gè)人計(jì)算機(jī)與外設(shè)連接問題的事實(shí)標(biāo)準(zhǔn)。由于USB的應(yīng)用極為廣泛,因此對嵌入式系統(tǒng)的總線外部擴(kuò)展與連接應(yīng)用來說,它也有著巨大的吸引力。

          如今,集成后,嵌入式產(chǎn)品(如測試設(shè)備等)就可以和各種價(jià)格低廉、獲取方便的外設(shè)實(shí)現(xiàn)連接,如鍵盤、鼠標(biāo)和打印機(jī)。對同時(shí)扮演USB主端、外設(shè)(從端)雙重角色的裝置的需求,在移動裝置迅速流行的推動下也在不斷增長。具有雙重身份的這些裝置,可以讓PDA、打印機(jī)等傳統(tǒng)USB外設(shè)在無PC的情況下直接實(shí)現(xiàn)相互通信。

          USB之所以廣受歡迎,其原因主要在于使用的方便性。消費(fèi)者不論何時(shí)、把何種USB裝置插入PC中,它都可以實(shí)現(xiàn)無縫工作。這種即插即用能力的實(shí)現(xiàn),離不開各式各樣的USB主端裝置以及Microsoft Windows中驅(qū)動軟件的有力支持,但在嵌入式應(yīng)用環(huán)境中卻還找不到這樣的支持。

          我們從不同層次上對USB通信流進(jìn)行考察,就會發(fā)現(xiàn)完整的系統(tǒng)要包含如下三種基本要素:

          傳統(tǒng)的USB主控設(shè)計(jì)將整個(gè)主控系統(tǒng)劃分為主端控制器(host controller)和控制器之外的整套USB軟件。圖1示出了USB主控系統(tǒng)組成單元與傳統(tǒng)的主機(jī)體系結(jié)構(gòu)間的

          主端控制器一般制作成單獨(dú)的一塊芯片,其中包括了物理和數(shù)據(jù)鏈路層硬件(如USB收發(fā)器)、SIE(串行接口引擎)等,以及一個(gè)可以附加到上的總線接口。USB固件(主控棧和裝置驅(qū)動)駐留在帶有USB主端控制器的中。

          USB硬件和固件的分離反映了一個(gè)現(xiàn)實(shí):USB從根本上來說是一種PC總線的外部擴(kuò)展機(jī)制。從USB固件的角度來看,PC提供了無窮無盡的系統(tǒng)資源。此外,PC行業(yè)已經(jīng)實(shí)現(xiàn)標(biāo)準(zhǔn)化,統(tǒng)一于一個(gè)OS平臺——Microsoft Windows,而這一操作系統(tǒng)天生就具備支持USB主控棧和裝置驅(qū)動的能力。由于擁有極為豐富的系統(tǒng)資源和軟件支持,所以傳統(tǒng)的USB主控體系結(jié)構(gòu)是PC應(yīng)用的一種理想的解決方案。

          相形之下,嵌入式系統(tǒng)的設(shè)計(jì)者們?nèi)粢褌鹘y(tǒng)的USB主控移植到嵌入式裝置中,卻需要理清多方面的問題。嵌入式設(shè)計(jì)的挑戰(zhàn),根源在于把USB固件與嵌入式應(yīng)用及其基礎(chǔ)計(jì)算平臺集成為一體時(shí)所需解決的復(fù)雜問題。

          首先,嵌入式裝置一般帶有的系統(tǒng)資源(和存儲器)容量有限。在系統(tǒng)處理器上運(yùn)行USB主控固件,不僅會占用目標(biāo)應(yīng)用的資源,而且還會造成對應(yīng)用固件的大量反復(fù)寫入和優(yōu)化。

          其次,嵌入式應(yīng)用一般要對實(shí)時(shí)事件作出明確的響應(yīng)。把USB固件添加到系統(tǒng)中,就會增加復(fù)雜性,導(dǎo)致在實(shí)時(shí)應(yīng)用的設(shè)計(jì)和調(diào)試中出現(xiàn)更多中斷和實(shí)時(shí)事件。

          最后,嵌入式市場具有種類繁多的處理器和實(shí)時(shí)操作系統(tǒng)。將USB固件開發(fā)和移植到任何特定處理器/實(shí)時(shí)操作系統(tǒng)平臺的努力都將花費(fèi)大量時(shí)間,而且需要工作人員在USB技術(shù)上具有很高的專業(yè)技能。由于USB規(guī)范的內(nèi)容繁多,因此,對于一個(gè)設(shè)計(jì)周期為6~12個(gè)月的典型嵌入式項(xiàng)目來說,學(xué)習(xí)過程實(shí)在過長,也過于艱深。

          克服嵌入式裝置中USB主控設(shè)計(jì)的復(fù)雜性問題,方法之一就是把與USB即插即用能力相關(guān)的智能揉入U(xiǎn)SB主端控制器本身之中。要做到這一點(diǎn),所采取的辦法是:

          該設(shè)計(jì)方法,可以為我們帶來一個(gè)無需系統(tǒng)處理器干預(yù)就能處理USB主控活動的USB主端控制器。它不僅讓系統(tǒng)資源的消耗降至最低,而且也將通過系統(tǒng)總線的USB數(shù)據(jù)流減至最小。

          這種設(shè)計(jì)方法的另一個(gè)好處則是簡化了所生成的API。API的設(shè)計(jì)將簡單易行,并且獨(dú)立于處理器和實(shí)時(shí)操作系統(tǒng),從而有效地降低了API集移植和集成的難度。

          相應(yīng)的,任何一種專用USB裝置驅(qū)動都可以由這一不大的API集開發(fā)而成。為了進(jìn)一步降低USB主控實(shí)現(xiàn)的復(fù)雜程度,USB裝置的驅(qū)動也應(yīng)該以獨(dú)立于處理器/實(shí)時(shí)操作系統(tǒng)的API形式建立,并呈現(xiàn)給系統(tǒng)設(shè)計(jì)者。裝置驅(qū)動API可讓已有的和新出現(xiàn)的嵌入式應(yīng)用很快集成USB主控功能。

          Atmel公司的AT43USB370 USB主控/功能處理器的設(shè)計(jì),采用了上文提到的設(shè)計(jì)方法,其目標(biāo)就是將復(fù)雜的USB問題屏蔽掉。下面的實(shí)例將向讀者表明,利用AT43USB370 海量存儲裝置驅(qū)動API,開發(fā)一個(gè)海量存儲器應(yīng)用只需少數(shù)幾個(gè)步驟即可。設(shè)計(jì)目標(biāo)是從相連的USB儲存裝置的根目錄下讀取一個(gè)文件。

          file://step1: 等待裝置完成盤點(diǎn)
          connectStatus = MS_Get_Final_Stat();
          DeviceAddr = connectStatus.Dev_Addr; file://裝置地址
          DriveNum = connectStatus.Part_Num;//分區(qū)數(shù)
          // Step2:獲取根目錄的內(nèi)容 (ID 0x00)
          cmdResponse = Get_Dir(DeviceAddr,DriveNum,0x00);
          CommandId = cmdResponse.CmdId;
          getDirStatus = MS_Get_Final_Stat(); file://等待目錄信息
          if (getDirStatus.Get_Cmd_Id == CommandId)
          {
          file://目錄信息采取getDirStatus.pDir_Buff結(jié)構(gòu)
          }
          // Step 3:為文件內(nèi)容安排緩沖
          int* pMSC_File =(int*)malloc(0x00008023*(sizeof (unsigned char)));
          // Step 4:將文件內(nèi)容讀到緩沖器內(nèi)
          // ID據(jù)報(bào)為 0x0000F17C,大小= 0x8023
          cmdResponse = Read_File(DeviceAddr,DriveNum ,
          0x0000F17C,pMSC_File, 0x00008023);
          CommandId = sreadIntCmdResponse.CmdId;
          readStatus = MS_Get_Final_Stat();
          if (readStatus.Get_Cmd_Id == CommandId)
          {
          file://文件已被拷貝到pMSC_File緩沖中
          }

          總而言之,USB的即插即用功能需要充分的固件支持。嵌入式環(huán)境中USB主控和裝置驅(qū)動固件的缺乏會導(dǎo)致產(chǎn)品開發(fā)周期的延長。因此,在選擇嵌入式USB主控時(shí),固件的體系結(jié)構(gòu)和可用性應(yīng)該作為重點(diǎn)來考慮。設(shè)計(jì)完善的嵌入式主控應(yīng)該將消耗的系統(tǒng)資源降至最低,讓傳輸?shù)较到y(tǒng)處理器的USB往來數(shù)據(jù)流量、中斷等減至最少,讓所呈現(xiàn)的API集簡單化,并將復(fù)雜的USB協(xié)議問題隱藏起來。



          評論


          技術(shù)專區(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); })();