機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
USB嵌入式主控制器設(shè)計(jì)
USB嵌入式主控制器設(shè)計(jì)
 更新時(shí)間:2008-8-18 10:20:51  點(diǎn)擊數(shù):27
【字體: 字體顏色

固件流程
設(shè)置一旦完成,第一項(xiàng)任務(wù)便是檢查增加或移除的設(shè)備。從USB主端口開(kāi)始,端口變更中斷可被用來(lái)察看在至USB主機(jī)的連接線路上是否發(fā)生了改變。如果有變化,則可對(duì)增加的設(shè)備進(jìn)行計(jì)數(shù),或?qū)σ谱叩脑O(shè)備進(jìn)行邏輯刪除。此后,如果仍有一部設(shè)備與USB主端口相連,則需進(jìn)行檢查,以確定其是否為集線器。這可以通過(guò)檢查設(shè)備結(jié)構(gòu)中的bClass字段來(lái)完成。如果該字段為一個(gè)“9”(用于HubClass),則檢查其端口的變更狀態(tài)。如果集線器報(bào)告一個(gè)狀態(tài)變化,則執(zhí)行下列操作。
確定端口變更是設(shè)備插入還是移除。如果是插入,則需對(duì)設(shè)備進(jìn)行計(jì)數(shù)。如果端口變更是由設(shè)備移除所致,則需清除相關(guān)聯(lián)的設(shè)備結(jié)構(gòu)。如果被移除的設(shè)備是集線器,則還需將其所有設(shè)備全部予以清除。
當(dāng)發(fā)現(xiàn)一部新設(shè)備時(shí),需對(duì)其進(jìn)行計(jì)數(shù)。計(jì)數(shù)過(guò)程包括詢問(wèn)設(shè)備的描述符并設(shè)定其邏輯地址。以下為對(duì)一部設(shè)備進(jìn)行計(jì)數(shù)所需處置的一系列事項(xiàng)。
1.采用GetDecriptor命令來(lái)從邏輯地址“0”獲取設(shè)備描述符,一個(gè)未初始化設(shè)備將對(duì)地址“0”做出響應(yīng)。
2.采用SetAddress命令來(lái)設(shè)定設(shè)備地址,利用GetNextAddr功能來(lái)獲取下一個(gè)可用地址。GetNextAddr將仔細(xì)查看一系列設(shè)備結(jié)構(gòu),并采用第一個(gè)具有一個(gè)地址“0”的設(shè)備結(jié)構(gòu)。
3.采用GetDescriptor命令和邏輯地址來(lái)獲取設(shè)備描述符。
4.獲取配置描述符的8個(gè)字節(jié)。這里有一個(gè)長(zhǎng)度字段,它將通告設(shè)備所具有的總描述符數(shù)據(jù)量。
5.再次獲取配置描述符,此次采用由第4步得到的新長(zhǎng)度字段。利用這一組完整的描述符數(shù)據(jù),固件便能夠?qū)⑿畔⒋_定為各種不同的描述符結(jié)構(gòu)類型。這一過(guò)程可通過(guò)填充諸如端點(diǎn)的數(shù)量和類型等剩余設(shè)備信息的方法來(lái)完成。
6.如果類代碼表示的是一部HID設(shè)備,則調(diào)用GetHidDesc命令,以獲取一些HID專用描述符。此外,這里需要用于鍵盤(pán)的、有可能采用了特殊字符集的國(guó)家代碼。
7.如果類代碼表示的是一部集線器設(shè)備,則執(zhí)行以下操作。
a.采用GetHubDesc來(lái)獲取集線器專用描述符;
b.采用GetHubStat來(lái)獲取集線器的狀態(tài)信息;
c.采用PortFeature來(lái)清除所有集線器端口上的端口連接;
d.采用PortFeature來(lái)給所有的集線器端口加電;
e.采用PortStatus來(lái)獲取所有集線器端口的狀態(tài)信息;
f.給設(shè)備結(jié)構(gòu)做標(biāo)記,以表示該設(shè)備為集線器。
當(dāng)一部設(shè)備被移除時(shí),固件將執(zhí)行下列任務(wù)。
1.將該設(shè)備結(jié)構(gòu)從設(shè)備陣列中清除,這樣該地址就可以被另一部設(shè)備重新使用。
2.如果被移除的設(shè)備是集線器,則需移除所有與其相連的設(shè)備。查看設(shè)備陣列,并清除每一部具有一個(gè)與集線器設(shè)備的邏輯地址相同的bParentAddr的設(shè)備。
用于對(duì)插入設(shè)備和移除設(shè)備進(jìn)行計(jì)數(shù)的流程如圖2所示。
固件的數(shù)據(jù)收集部分比計(jì)數(shù)部分簡(jiǎn)單得多。對(duì)于數(shù)據(jù)收集,察看設(shè)備結(jié)構(gòu)陣列,并搜尋每一個(gè)具有非零邏輯地址字段的結(jié)構(gòu)和一個(gè)與HID設(shè)備對(duì)應(yīng)的類代碼“3”,調(diào)用InterruptXfer功能并將邏輯地址作為一個(gè)參數(shù)來(lái)傳送。如果該功能返回選中狀態(tài)(TRUE),則緩沖器中存在數(shù)據(jù)。對(duì)于鍵盤(pán),將存在8字節(jié)數(shù)據(jù)(見(jiàn)上面的HID報(bào)表部分)。對(duì)于鼠標(biāo),數(shù)據(jù)字段的長(zhǎng)度將為4字節(jié)。HID報(bào)表被顯示于HyperTerminal之上。其他實(shí)現(xiàn)方案可以將該數(shù)據(jù)傳送至一個(gè)應(yīng)用程序,以便進(jìn)行處理。

結(jié)論
與PC相比,為嵌入式系統(tǒng)添加USB功能需要相應(yīng)的計(jì)算資源和USB主系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn),但目前已有多款現(xiàn)成的USB主IC可被用來(lái)實(shí)現(xiàn)該功能,USB主堆棧和實(shí)時(shí)操作系統(tǒng)既可以采購(gòu),也可以自行開(kāi)發(fā),開(kāi)發(fā)人員能夠非常簡(jiǎn)便地添加USB功能。
本文討論了僅通過(guò)采用一個(gè)附加IC(無(wú)需使用第三方軟件)來(lái)實(shí)現(xiàn)嵌入式USB主機(jī)的方法。賽普拉斯公司的嵌入式USB主機(jī)能夠在不增加編碼處理的情況下對(duì)HID設(shè)備和集線器提供支持。目前,該系統(tǒng)最多能夠支持8部設(shè)備和兩個(gè)集線器層,代碼長(zhǎng)度約為10KB,所需做的全部工作就是增加用于一個(gè)完整系統(tǒng)的專用代碼。

  • 上一篇: 采用PIC16X711實(shí)現(xiàn)基于維根碼的信息鈕序列號(hào)
  • 下一篇: FPGA在軟件無(wú)線電中的應(yīng)用
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1