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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > USB學(xué)習(xí)系列之三——USB設(shè)備的枚舉

          USB學(xué)習(xí)系列之三——USB設(shè)備的枚舉

          作者: 時間:2016-12-14 來源:網(wǎng)絡(luò) 收藏
          1.枚舉就是從設(shè)備讀取各種描述符信息,主機(jī)根據(jù)讀取的描述符信息來決定加載什么驅(qū)動,確定是什么樣的設(shè)備以及如何通信等。

          2.在USB設(shè)備的枚舉過程中使用了控制傳輸,這種傳輸保證數(shù)據(jù)傳輸?shù)恼_性。控制傳輸分為:建立過程(主機(jī)發(fā)起)、可選的數(shù)據(jù)過程和狀態(tài)過程。

          本文引用地址:http://www.ex-cimer.com/article/201612/330045.htm

          3.控制傳輸解析:

          (1)主機(jī)發(fā)起建立過程,建立過程開始于一個SETUP令牌包,后面緊跟一個DATA0數(shù)據(jù)包,接著就是數(shù)據(jù)過程。

          (2)如果是控制讀傳輸,那么數(shù)據(jù)過程就是輸入數(shù)據(jù)(相對于USB主機(jī)來說的);如果是控制寫傳輸,那么數(shù)據(jù)過程就是輸出數(shù)據(jù)。如果在建立過程中指定了數(shù)據(jù)長度為0,那么就沒有數(shù)據(jù)過程。數(shù)據(jù)過程之后是狀態(tài)過程。

          (3)狀態(tài)過程剛好與數(shù)據(jù)過程的數(shù)據(jù)傳輸方向相反:如果是控制讀傳輸,則狀態(tài)過程是一個輸出數(shù)據(jù)包(相對于USB主機(jī)來說的);如果是控制寫傳輸,則狀態(tài)過程是一個輸入數(shù)據(jù)包。狀態(tài)過程是用來確認(rèn)所有的數(shù)據(jù)是否都已經(jīng)正確傳輸完成。

          4.枚舉過程的解析:

          (1)復(fù)位并讀取端點(diǎn)0最大包長度:

          主機(jī)監(jiān)測到設(shè)備插入后,首先對設(shè)備進(jìn)行復(fù)位(也就是將差分?jǐn)?shù)據(jù)線同時拉低一段時間,因?yàn)椴罘謹(jǐn)?shù)據(jù)線正常狀態(tài)是一高一低)。USB設(shè)備復(fù)位之后地址為0,USB主機(jī)往地址為0的設(shè)備的端點(diǎn)0發(fā)送獲取設(shè)備描述符的標(biāo)準(zhǔn)請求(這是一個控制傳輸?shù)慕⑦^程)。設(shè)備收到請求后,在數(shù)據(jù)過程將設(shè)備描述符返回給主機(jī)。主機(jī)在成功獲取到一個數(shù)據(jù)包的設(shè)備描述符并且確認(rèn)沒有錯誤后,就會返回一個0長度的確認(rèn)數(shù)據(jù)包(狀態(tài)過程)。然后就會進(jìn)入到設(shè)置地址的階段。

          注意:標(biāo)準(zhǔn)的設(shè)備描述符有18個字節(jié),但是有些USB設(shè)備端點(diǎn)0大小不足18字節(jié),理論上說USB主機(jī)只有通過多次讀取才能讀取到18字節(jié)的數(shù)據(jù),但是在此階段USB主機(jī)仍然只讀取一次,這一次讀取的數(shù)據(jù)大小最小為8字節(jié)(USB協(xié)議規(guī)定端點(diǎn)0至少為8字節(jié)),在這8字節(jié)的數(shù)據(jù)中已經(jīng)包含了USB主機(jī)在這個階段需要知道的信息,也就是端點(diǎn)0的最大包長度。端點(diǎn)0的最大包長度存放于設(shè)備描述符的第8字節(jié)處。

          (2)地址設(shè)置

          USB主機(jī)往地址為0的設(shè)備的端點(diǎn)0發(fā)送一個設(shè)置地址的請求(建立過程),新的設(shè)備地址包含在建立過程的數(shù)據(jù)包中。具體的地址由USB主機(jī)負(fù)責(zé)管理,主機(jī)會分配一個唯一的地址給剛接入的設(shè)備。USB設(shè)備在收到這個建立過程之后就直接進(jìn)入到狀態(tài)過程,因?yàn)檫@里數(shù)據(jù)過程是不需要的。設(shè)備等待主機(jī)請求狀態(tài)返回(一個輸入令牌包),收到輸入令牌包后,設(shè)備就返回0長度的狀態(tài)數(shù)據(jù)包。如果主機(jī)成功接收到該狀態(tài)包,就會發(fā)送應(yīng)答包ACK(確認(rèn)字符)給設(shè)備,設(shè)備收到ACK之后,就要啟用新的地址,以后主機(jī)就通過這個地址來訪問該設(shè)備。

          注意:D12USB接口芯片會自動等待ACK之后才啟用新的地址,所以要在返回0長度的狀態(tài)包之前,將地址寫到D12芯片的地址寄存器中。

          (3)獲取設(shè)備描述符

          使用新的地址,獲取完整的18字節(jié)的設(shè)備描述符。如果端點(diǎn)0的最大包長小于18字節(jié),那么就會有多多次請求數(shù)據(jù)輸入。

          (4)主機(jī)獲取配置描述符和配置集合

          配置描述符總共為9字節(jié)。主機(jī)在獲取到配置描述符之后就獲取配置集合。

          (5)獲取字符串描述符等其他的描述符。

          注意:設(shè)備返回的數(shù)據(jù)長度可以小于主機(jī)請求的長度。



          評論


          技術(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); })();