官术网_书友最值得收藏!

第1章 USB基礎知識

通用串行總線(Universal Serial Bus, USB)是由英特爾(Intel)、康柏(Compaq)、國際商業機器(International Business Machines, IBM)、微軟(Microsoft)、北方電訊(Northern Telecom)等計算機與通信公司于1995年聯合制定,并逐漸形成行業標準的數據通信方式,現如今已經廣泛替代了笨重的串口(RS232、RS485)與并口,成為21世紀大量計算機和智能設備的標準擴展與必備接口之一。可以這么說,現在幾乎每一臺個人計算機(Personal Computer, PC)與安卓(Android)智能手機都配備了USB接口,相應的圖標如圖1.1所示。

圖1.1 USB接口圖標

為方便后續行文,我們先了解一下USB系統的基本架構,它由主機(Host)、設備(Device)與互連電纜(Interconnect)三部分組成,如圖1.2所示。

圖1.2 USB系統的基本架構

最常見的USB主機就是PC,它主導著整個USB系統的數據傳輸。USB設備實在太多了,日常生活中使用頻繁的包括智能手機、U盤、移動硬盤、數碼相機、打印機、游戲手柄、攝像頭、網卡等。當然,作為工程師的你還可能會購買邏輯分析儀、示波器、噪聲計等其他一些使用USB接口的儀器儀表。對于現階段的我們,僅需要特別注意主機與設備之間的主要區別:主機可以向設備發送數據,設備也可以向主機發送數據,但USB系統的數據傳輸只能由主機啟動,設備只是根據主機的需要被動響應。在任何時候,USB系統僅允許存在一個主機。通俗來講,USB設備就是“傀儡”,它什么時候做什么完全取決于USB主機,不能擅自做主。我們進一步將從主機往設備方向的數據傳輸稱為下行(Downstream)通信,反之則稱為上行(Upstream)通信。也就是說,上行與下行的定義是以主機為參考的

由于USB系統的數據傳輸存在于主機與設備之間,也就意味著:設備與設備、主機與主機之間無法直接進行數據傳輸,這可能會帶來一些應用上的不便。例如,我想將數碼相機中的照片保存到移動硬盤,通常需要將它們都與PC連接后,再將照片復制到移動硬盤中。但如果在野外進行拍攝作業,也就意味著還需要另外攜帶一臺主機(或存儲空間足夠大的存儲卡)。為解決此問題,后來增加的USB OTG(On The Go)標準則允許設備切換成為主機,這樣就能夠實現數碼相機與移動硬盤之間數據的直接傳輸,現在很多智能手機也支持USB OTG功能。

USB互連線纜通常包含4條線(USB OTG標準增加了一條區分主機與設備身份的信號線,本書不涉及),即用于電源供電的VBUS與GND,以及用于數據傳輸的雙向差分信號線D+與D-(有時也稱D+與D-,即Plus與Minus),如圖1.3所示。

圖1.3 USB連接電纜

那么USB為何能夠風靡全球呢?當然是由于它易于使用,這主要體現在USB安裝配置便捷、兼容性好、傳輸速度快、端口擴展簡易供電簡單接口體積小等方面。

安裝配置便捷主要體現在USB支持熱插拔(Hot Swap)與即插即用(Plug and Play, PnP),這兩點對于提升用戶體驗非常重要。USB接口支持熱插拔,意味著在PC處于上電狀態下可以隨時斷開或連接USB設備,而不會對PC或外部設備造成損傷,但以前的老式接口一般不允許這么做。使用過PS/2(Personal System 2)接口鼠標(或鍵盤)的讀者應該知道,如果在PC開機后再插入PS/2接口鼠標,操作系統很有可能無法識別(需要重啟)。有些主板還需要按指定顏色將鼠標插入指定的接口,插錯了也是識別不了的,其他串口或并口也是如此。但使用USB鼠標(或鍵盤等其他USB設備)卻不一樣,PC開機后,隨時插入,隨時可以使用,而且PC所有的USB接口都可以任意插入(只要硬件接口類型對應即可,并不限定必須插入到哪一個USB接口),如圖1.4所示。

圖1.4 USB接口代替老式接口

USB接口的一些設計細節就是為了實現支持熱插拔的,其內部共有4根金屬導體(可以稱為“金手指”),外側兩根較長的分別是供電電源線VBUS與GND,內側兩根較短的分別是數據線D+與D-,如圖1.4(b)所示。當我們將USB設備插入主機時,外側電源線首先連接并對設備進行供電,而中間的數據線能夠在通電狀態下進行數據交換。相反,當從主機拔出設備時,則先斷開數據傳輸,確保數據不會因斷電而丟失,然后再將設備電源切斷,這樣也就能夠保證在插拔過程中對主機系統及USB設備不產生影響。而USB設備在與主機連接后能夠馬上使用,是因為支持PnP的Windows操作系統(本書如無特別說明,均針對Windows操作系統)會為插入的USB設備選擇與加載合適的驅動程序(后續還會進一步詳細討論)。

兼容性好也是注重用戶體驗的重要表現。USB的最初版本為1.0,之后依次經歷了1.1、2.0、3.0、3.1、3.2、4.0等版本,兼容性好就意味著新版本兼容舊版本(通俗地說,如果舊版本能用,那么新版本也能用),即向后兼容(Backward Compatibility)。例如,你有一個舊的USB鼠標,其USB總線版本為1.0,那么即便與USB 2.0主機連接,同樣可以正常使用,是不是非常方便!實際上,USB 2.0的低速與全速分別對應USB 1.0與USB 1.1版本,只不過更換了一個名稱而已。各種USB總線版本及其特點如表1.1所示,其中,“bps”表示比特率(bit per second),即單位時間內傳輸的比特數。

表1.1 各種USB總線版本及其特點

從嚴格意義上來講,USB 2.0就代表著“支持高速模式”,至少當提到“USB 2.0主機”時通常是如此。但是由于USB向后兼容的特性,很多廠商給不支持高速模式的USB芯片或設備也冠名了“USB 2.0”,只是會換成類似“與USB 2.0規范全速兼容”的宣傳方式(本質是USB 1.1),本書使用的STM32F103x系列單片機就是這樣。換句話說,在實際應用中,我們無法僅從“USB 2.0”字樣獲得芯片或設備真正支持的速率。本書如無特別說明,所述內容均針對USB 2.0

USB 3.0及以上版本的命名比較多,普通用戶不容易分辨清楚,因為官方在發布USB 3.1時進行了一次版本重命名,也就是將原來的USB 3.0更改為USB 3.1 Gen 1,表示第一代(Generation)USB 3.1;原來的USB 3.1則更改為USB 3.1 Gen 2,表示第二代USB 3.1。如果這還不足以讓你感到混亂,官方在發布USB 3.2時又開始了新一輪如表1.1所示版本的重命名。簡單地說,USB 3.0、USB 3.1 Gen 1、USB 3.2 Gen 1是一個“東西”,USB 3.1、USB 3.1 Gen 2、USB 3.2 Gen 2也是一個“東西”。也就是說,以后沒有USB 3.0、USB 3.1的官方說法了,USB 2.0后面直接就是USB 3.2,本書描述過程中也同樣遵循最新官方命名規則。如果某個商家使用類似“我這個USB 3.1接口鐵定比別家USB 3.0接口的數據傳輸速率要快呀”之類的說法對你進行連番營銷轟炸,請務必打起十二分精神,可不要被“忽悠”了。

剛剛提到的“官方”指的是USB開發者論壇(USB Implementers Forum, USB-IF),它是由USB規范制定公司建立的非營利性組織,致力于推廣并發展USB技術,其官方網站為www.usb.org,本書涉及的所有USB相關規范均可從該網站免費下載。

值得一提的是,現如今USB 1.1與USB 1.0設備已經越來越少了,支持更高傳輸速率的USB4(不是USB 4.0,之間也沒有空格)也將不再兼容。

傳輸速度快也是USB應用廣泛的主要因素之一,它的數據傳輸速率也許不是所有總線中最快的,但對于大多數應用已經足夠。USB 2.0版本支持低速、全速與高速三種速率規格,相應的理論最大數據傳輸速率分別為1.5Mbps、12Mbps與480Mbps,更加令人興奮的是,最新的USB4規范支持的傳輸速率可達到40Gbps。雖然USB實際有效數據傳輸量小于理論最大傳輸速率(因為總線狀態、控制與錯誤監測等功能也需要一定的數據開銷),但USB 2.0最大傳輸速率仍然可超過50Mbps(總線空閑時最快傳輸類型的理論值),遠高于一般的串口。

供電簡單能夠簡化USB設備的硬件設計。以往我們使用的串口或并口只是單純地作為通信之用,這意味著產品需要單獨的電源輸入,增加了系統的復雜度(你至少得增加電源電路)。而從表1.1可以看到,USB接口都可以向外提供一定功率的電源。例如,USB 2.0的輸出電壓為5V,輸出電流的最大值為500mA,如果USB設備消耗的功率不超2.5W,則可以使用USB接口直接供電,USB鼠標與鍵盤就是典型應用。從USB 3.2 Gen 1開始,USB接口的供電功率進一步提升到了4.5W,USB 3.2 Gen 2則將電力傳輸協議進行了重新設計,支持USB功率傳輸(Power Delivery, PD)的設備可以提供最大100W的輸出功率,可以實現快速充電的功能。

端口擴展能力對于很多用戶也很重要。以前的PC通常最多會各配置一個并口與RS232串口,假設使用并口連接打印機,那如何連接其他也使用并行接口的產品呢?如果不嫌麻煩,就拔下來重新插入。即便具備高技術水平的你有能力設計一個并口擴展模塊,但對于大多數普通人而言卻并不太現實。更何況,最新的PC已經不再提供串口與并口了。

再如,以往進行單片機開發時會使用串口,但是通常PC只會攜帶一個,很有可能出現不夠用的情況。現在應用非常廣泛的USB轉串口設備卻可以將串口取而代之,能夠接入的USB轉串口設備的數量僅取決于USB可用接口,而USB可用接口則可以通過USB集線器(Hub)輕松進一步擴展,它與網絡集線器的功能相似。例如,學校每個寢室都有很多人,每個人都有一臺PC,但網絡電纜只有一根,怎么辦?用網絡集線器就可以解決這個問題!USB集線器存在的意義也是相似的,相應的擴展連接如圖1.5所示。

USB設備按功能可分為兩大類:一類為USB集線器(Hub),另一類為USB功能(Function)設備。前面提到USB設備(除USB集線器外)都屬于功能設備,它們都各自提供了一些特定的功能。例如,U盤能夠存儲數據,示波器能夠采集數據。大多數情況下,我們所做的開發工作都是針對USB功能設備的。本書如無特別說明,涉及的“設備”就是指功能設備。

理論上,USB主機可以通過USB集線器擴展最多127個下行接口,但USB集線器的級聯層數也是有限制的,USB 1.1與USB 2.0分別最多可支持4層與6層(不含最后一級功能設備),主機的根集線器(Root Hub)也視為一層,USB 2.0的擴展拓撲結構如圖1.6所示。

圖1.5 USB集線器擴展連接

圖1.6 USB 2.0的擴展拓撲結構

這是一種階梯式星形(Tiered Star)拓撲的USB擴展結構,每一個星形中心就是一個USB集線器(控制芯片),而每個USB集線器都只有一個上行口,進行擴展時只需要將其與上一級USB集線器的下行口連接即可。組合(Compound)設備則是將一個或多個功能設備與集線器組合在一起,其本質也是將功能設備與集線器下行口連接,我們可以將其理解為不可拆卸的功能(Non-removable Function)設備。例如,現在推出一個自帶U盤的集線器,它將U盤功能設備與集線器的某一個下行口連接(在產品外面看不到),其他下行口則開放給用戶作為集線器使用,這就是一個組合設備。

一般廠家在設計USB 2.0集線器產品時會使用同一款芯片,但是比較常用的USB集線器控制芯片只有4個或7個下行口(也就是我們所說的“1拖4”與“1拖7”),為了擴展更多的下行口,只能采用多個USB集線器控制芯片級聯的方式,但是在擴展時要注意:下行接口的總數量不能超過127個,并且集線器級聯的層數不能大于5(對于USB 2.0主機,因為根集線器也占用了一層)。圖1.7(a)為正確的“1拖32”集線器級聯方案,圖1.7(b)擴展的下行接口數量雖然沒有超過127個,但USB集線器的級聯層數已經超過5,屬于錯誤的級聯方式。

圖1.7 正確與錯誤的USB集線器級聯方式

盡管USB的優點很多,但也不是完美的,它的傳輸距離有限,一般不大于5m,但是對于一般的應用已經足夠了,而且可以通過級聯集線器的方式進一步擴展傳輸距離。另外,USB的易用性是以更復雜的協議為代價的,開發過程相較于以往的串并行接口更復雜一些,而本書的目的就是為了輕松解決該問題,你不必有任何學習上的負擔。

USB物理接口的具體類型有很多種,它們都有自己適用的不同場合。USB 2.0常用的母口(Female)連接器也稱為插座(Receptacle),如圖1.8所示。絕大多數PC配備的都是呈矩形的A型(Type A)母口,而呈方形的B型(Type B)母口則多用于設備(如打印機、投影儀、掃描儀等)。迷你(Mini)母口的使用已經越來越少了,微(Micro)B型母口的應用則越來越多(A型母口已經淘汰),因為其體積更小,在本書尚未出版前,它也是絕大多數安卓智能手機的標配接口。另外,公頭與母口是配對使用的,也稱為插頭(Plug),不匹配的公頭是無法與母口連接的,具體規格可以參考USB 2.0規范,此處不再贅述。

圖1.8 USB 2.0常用的母口連接器

USB 3.2又增加了幾種連接器,如圖1.9所示。其中,A型與B型接口與USB 2.0是兼容的,只不過增加了USB 3.2獨有的兩對差分線(分別輸入與輸出)引腳。微B(A)型接口看似有些“奇葩”,其實它由兩部分組成,主要是為了兼容USB 2.0的微B(A)型接口,因為較長的那部分與USB 2.0標準的微B(A)型接口定義是一致的,但是由于其體積比較大,這種接口的應用非常少。C型接口應該是大勢所趨,其體積與USB 2.0微B型接口相似,但支持更多可用于USB 3.2的數據線,而且接口沒有正反方向區分(Reversible)。在本書尚未出版前,已經有不少廠家開始將這種接口應用于智能手機,但是這并不意味著一定支持USB 3.2規范,它只不過使用了物理接口中用于USB 2.0的數據線而已。

圖1.9 USB 3.2對應的母口連接器

主站蜘蛛池模板: 澄迈县| 天等县| 西宁市| 广南县| 大关县| 江北区| 乐都县| 额敏县| 清流县| 余庆县| 娱乐| 衡阳县| 天津市| 游戏| 龙州县| 呼和浩特市| 长乐市| 新宁县| 论坛| 荣昌县| 海淀区| 麻城市| 若尔盖县| 贞丰县| 乌拉特后旗| 岳普湖县| 吉安市| 获嘉县| 屏东市| 古丈县| 宁河县| 万山特区| 合肥市| 简阳市| 东乌| 广州市| 斗六市| 宁城县| 沾化县| 略阳县| 洛南县|