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

          新聞中心

          USB的連接模型

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          USB是一種主從結(jié)構(gòu)。主機叫做Host,從機叫做Device(也叫做設(shè)備),集線器也被當(dāng)作一種特殊的設(shè)備處理。USB的數(shù)據(jù)交換只能發(fā)生在主機和設(shè)備之間,主機和主機,設(shè)備和設(shè)備之間不能互連。為了在物理上區(qū)分主機和設(shè)備,使用了不同的插頭和插座,這個在USB的連接器一節(jié)中會講到。所有的數(shù)據(jù)傳輸都由主機主動發(fā)起,而設(shè)備只是被動的負責(zé)應(yīng)答。例如,在讀數(shù)據(jù)時,USB先發(fā)出讀命令,設(shè)備收到該命令后,才返回數(shù)據(jù)。在USB OTG中,一個設(shè)備可以在從機和主機之間切換,這樣就可以實現(xiàn)設(shè)備與設(shè)備之間的連接,大大增加了USB的使用范圍。但這時依然沒有脫離這種主從關(guān)系,兩個設(shè)備之間必然有一個作為主機,另一個作為從機。USB OTG增加了一種MINI USB接頭,比普通的4線USB多了一個ID表識線,用來表明它是主機還是設(shè)備,這個以后會講到。


          USB的拓撲結(jié)構(gòu)為金字塔型。由一個USB主控制器出發(fā),下面接USB集線器,USB集線器將一個USB口擴展為多個USB口,多個USB口又可以通過集線器為更多個接口。但USB協(xié)議中對集線器的層數(shù)是有限制的,USB1.1規(guī)定最多為4層,USB2.0規(guī)定最多為6層。理論上,一個USB主控制器最多可接127個設(shè)備,這是由數(shù)據(jù)包中的7位地址位決定的,但是實際上不會接這么多的設(shè)備。我們所說的一個USB主控制器可以連接多個USB設(shè)備,并不是直接簡單的將多個設(shè)備并聯(lián)或者串聯(lián),而是要由集線器負責(zé)端口擴展,才能連接更多的設(shè)備。在我們的電腦上,也有一個(或者多個,視USB主控制器的個數(shù)而定)集線器,它叫做根集線器,直接連在USB主控制器上。在設(shè)備管理器中,我們可以看到USB主控制器和根集線器。如下圖所示。USB數(shù)據(jù)傳輸路徑如下:USB主控制器發(fā)出數(shù)據(jù)包,通過根集線器,再通過下面的集線器(如果有的話),再發(fā)給USB設(shè)備;設(shè)備返回數(shù)據(jù),交給它上層的集線器,上層的集線器再交給更上層的集線器,直到USB主控制器為止。而USB主控制器就可以跟CPU打交道了。在標準的PC機上,USB主控制器是掛在PCI總線上的。在Windows中,USB由各種驅(qū)動程序負責(zé)管理,最后由驅(qū)動程序產(chǎn)生功能設(shè)備(FDO),這就是我們所看到的實際設(shè)備了。我們的應(yīng)用程序就可以通過Windows提供的各種API進行訪問USB設(shè)備了,例如CreateFile,ReadFile,DeviceIOControl等等。

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



          關(guān)鍵詞: USB連接模

          評論


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