USB技術淺析

来源:https://www.cnblogs.com/linhaostudy/archive/2020/07/18/13336393.html
-Advertisement-
Play Games

《帶你遨游USB世界》中,我們已經初步介紹了USB的整體架構,本文將從以下幾個方面繼續介紹USB的內容。 USB3.0有什麼新特性? TYPEC介紹 otg識別流程 一、USB3.0 USB是史上定義出的最成功的PC外圍互連技術,並且已經迅猛地被引入到CE和Mobile領域。僅僅在2006年,就有超 ...


《帶你遨游USB世界》中,我們已經初步介紹了USB的整體架構,本文將從以下幾個方面繼續介紹USB的內容。

  • USB3.0有什麼新特性?

  • TYPEC介紹

  • otg識別流程

一、USB3.0

USB是史上定義出的最成功的PC外圍互連技術,並且已經迅猛地被引入到CE和Mobile領域。僅僅在2006年,就有超過20億USB設備出產,而現在已經有超過60億的USB產品被安裝。

而隨著技術創新的不斷前進,新式設備,媒體格式,以及便宜的大容量存儲在不斷涌現。他們都要求更高的帶寬來維護用戶期望的用戶體驗。高清攝像機將會具有上百GB的存儲內容需要遷移到PC端供用戶編輯,查看以及打包存儲。現有的設備,如數位相機繼續創新並增加其容量來容納更多的非壓縮圖像。從數位相機里下載上百甚至上千個10MB或者更大的原始圖片將會是一個十分耗時的過程,除非傳輸速率得到提高。此外,用戶應用要求在PC和這些不斷複雜化的外設之間更高的連接帶寬。USB 3.0通過增加更高的傳輸速率來匹配這些新式應用和設備,從而解決這些需求。

目前市場上有大量在使用的個人電腦只支持USB 2.0。還有USB 2.0外圍設備使用數量較多。USB3.0需要保持向後相容性。從硬體上來看,實際usb3.0和usb2.0已經是兩種設備,在A型座的usb口上,我們能明顯看到,usb2.0仍舊使用的是GND,D+,D-,VBUS。在3.0中則使用的是一對USB3_TX差分線,USB3_RX差分線,GND,BUS。所以在物理上我們要明確,實際上USB2.0和USB3.0已經不是一個設備。雖然USB3.0仍然延續了大部分2.0的概念。

1.Usb3.0的通訊流程

Usb3.0在框架層級是向後相容USB 2.0的。在傳輸的類型上,仍舊是控制傳輸,中斷傳輸,批量傳輸,同步傳輸四種。然而,USB 2.0和超高速協議還是有一些根本性的差異:

1)USB 2.0使用三部分事務交易(令牌,數據和握手),而超高速對這相同的三部分的使用是不相同的。對於輸出(OUTs),令牌被列入數據包;而對於輸入(INs),令牌則被握手所取代。

2)USB 2.0不支持突發(bursting)而超高速支持連續突發(continuous bursting)。

3)USB 2.0是一個半雙工廣播(broadcast)匯流排,而超高速是雙重單工(dual-simplex)單播(unicast)匯流排,這就允許同時進行IN和OUT事務交易。

4)USB 2.0使用輪詢模型,而超高速使用非同步通知。

5)USB 2.0沒有流(Streaming)的能力,而超高速支持對批量端點的流(Streaming)。

我們來看一次IN傳輸:

主機和設備應遵守傳輸類型和端點特性的限制。主機通過發送一個確認包(IN)到設備發起一次傳輸。這個確認包包含了將包路由到預想的端點的定址信息。主機告訴設備它可以發送的數據包的數量,以及預計從設備接收到的第一個數據包的序列號。作為回應,端點會以適當的序列號發送數據包回主機。確認包還暗含地確認,以前的數據包被成功收到。

請註意,即使主機需要為每個接收到的數據包發送確認包,設備仍然可以發送被請求數量的數據包,而不必等待任何確認包。

超高速輸入(IN)事務交易協議中如下圖所示。一個超高速匯流排上的輸入(IN)傳輸由一個或多個IN事務交易組成,併在出現下列任何情況之一時完成:

1)所有的傳輸數據成功被接收。

2)端點用比端點的最大數據包大小要小的數據包響應。

3)端點回應一個錯誤。

image

Out 傳輸也類似:

image

從上面的模型我們可以看出,相比於usb2.0的輪詢式的發包,一方面usb3.0的非同步發包模式明顯效率提高很多,可以不必等待設備回應,連續發包。另一方面由於usb3.0是點對點的發送數據,所以處在空閑的其他usb設備可以一直保持低功耗狀態,直到有數據到來。而在usb2.0的輪詢模式上,由於每一個設備都需要對匯流排上的地址做判斷,所以空閑設備無法進入低功耗模式。

2.突發事務

超高速USB協議允許主機連續發送數據到設備,或者從設備連續接收數據,只要設備可以接收或者發送數據。設備在無需中間確認包(intermediate acknowledgement packet)的情況下可以發送或者接收的包的個數,在該端點的端點伴侶描述符(endpoint companion descriptor)中報告。報告端點的maximum burst size多於一個包的端點被認為是支持"突發"事務。

在進行突發傳送時,適用於下麵的規則:

1)在接收一個確認包之前,一個突發中可以發送的包個數的最大值,被限製為:端點的最大突發的大小【maximum burst size】(和上一個被端點或主機接收到的ACK TP或ERDY的NumP欄位值的最小值,減去端點或主機在被上一個ACK TP確認過的包之後已經發送的包的個數。註意,每當端點被初始化時,主機可以重新將能夠發送/接收的最大DPs的個數初始化為端點最大突發的大小【maximum burst size】。

2)突發傳送中,每一個獨立的包應該有數據包負載長度為maximum packet size。只有突發的最後一個包可以小於報告的maximum packet size。如果最後一個小一些,那麼對於短包的規則適用於在突發末尾的短包。

3)突發事務只要ACK TP的NumP欄位沒被設為0並且每個包都有最大包大小的數據負載,就可以繼續。

3. 流傳輸

流傳輸是bulk中的一種特殊模式,當設備的配置描述符在配置了 MaxStreams後,就代表設備可支持流傳輸。

image

上圖代表一個輸入批量管道,這裡建立起了大量的流(Streams)。在主機記憶體中與每個流(Stream)相關的是一個或者多個端點緩衝區(Endpoint Buffers)來接收流數據(Stream data)。在設備端,也有一個相應的特定於命令或者功能的數據,會被傳輸到主機。

當設備有對特定的流可用的數據時(如圖中的G),它就用發送ERDY加上CStream ID作為標簽,並且主機會開始發送加有CStream ID標簽的IN ACK TP到設備。設備會通過返回與CStream ID相關的功能數據,並且也是加上CStream ID為標簽。當主機接收到數據,就用CStream ID來選擇一組端點緩衝區(Endpoint Buffers)用來接收數據。

當數據被耗盡,設備終結該流。主機也被允許終結流,如果它用完了端點緩衝區的話。流可以被用來,例如,支持大容量設備(mass storage device)所需要的亂序(out-of-order)數據傳輸。

一個標準的批量端點有單組端點緩衝區(Endpoint Buffers)與之相關聯。流擴展了一個端點可以訪問的主機緩衝區個數,從1直到65533。在主機緩衝區和Stream ID之間有一個1:1的映射。

由於流是基於一個標準的批量管道運行,一個錯誤就會讓管道暫停(halt),停止所有的活動。

4. 伴侶描述符

USB3.0描述符與USB2.0基本相同,最主要的區別是每個EP描述符後新增了一個伴侶描述符,用以表明上面所說的設備的“突發事務”和“流傳輸”的能力:

image

5.總結

總結來說USB3.0的最主要的新特性有這幾種:

  • 匯流排速度提高到5Gbps(gen2中提高到10Gbps)

  • 非同步的傳輸模式

  • 突發事務,依賴於非同步傳輸的模式,無需等待設備回應

  • 流傳輸,依賴於突然事務傳輸,可以多對一的大量傳輸

這幾種新特性使得USB3.0的傳輸速率遠遠高於USB2.0

二、TYPEC

Typec是在usb3.0推出後,為了相容正反插,高功率充電,以及更強的相容性而推出的新的硬體介面,最主要的特性為

  • USB Power Delivery技術,最高可支持到20V5A的充電

  • 可集成DisplayPort,可外接屏幕與喇叭(例如可以接入hdmi設備)

  • 抗干擾性,可靠性更強

母頭如下圖所示:

image

公頭如下圖所示:

image

可以看到相比於普通的usb3.0 A座,typec多出了一組tx,rx,以及vconn和cc。其中具體使用情況:

1)多出的tx,rx可以在gen1或gen2中做usb多路輸出,可實現數據吞吐量翻倍,同時也可以復用為DisplayPort介面,使得typec可以做視頻輸出

2)vconn為typec有源線纜的e-mark供電,進一步可以識別線材的供電能力

3)cc pin為typec的核心功能,usb的主機和設備端可以通過cc pin通訊,以實現pd,dp以及主從模式的切換等各種功能

目前市面上有多種typec的實現方案,如高通是通過自帶的typec phy實現,也有獨立的typec晶元方案,如fusb302等,但是流程基本類似。

編碼格式:

pd3.0開始使用Biphase Mark Coding (BMC)編碼格式,這種編碼的特點就是,每一個bit周期開始時電平會切換一次,在這個周期內電平如果不切換則表示bit0,如果電平切換了一次,則代表bit1

image

1.Power Delivery

目前市場上pd主要分為兩種,一種是pd2.0,這種只提供幾個固定的電壓電流檔位,如常見的5V3A,9V3A,12V3A,15V3A,20V3A。另一種是pd3.0,也就是pps,這種除了提供pd2.0的幾個電壓檔位之外,還會提供一個或多個電壓電流可調的檔位,如:可調電壓範圍3V~21V,可調電流0A~6.3A

其流程大概如下:

image

以下作為一個例子:

image

2. DisplayPort

如前文中所述,typec擁有4對差分信號,上/下行各2對。USB-IF推出了一個Alternate Mode交替模式,支持將USB Type-C線纜轉化為其他用途,而DP交替模式就是第一個應用,它可以將其中一些或者全部差分信號通道轉化為DisplayPort信號通道,如果還有剩餘的差分信號,則可以繼續用於USB 3.1高速數據傳輸。

有了DP交替模式,USB Type-C的實力將會大增,因為它讓平板電腦、筆記本產品通過一個迷你介面實現高速數據傳輸、視頻輸出、電力供應等功能,帶來類似手機那樣的“單介面、多功能”的可能性,這比之前通過USB介面輸出視頻信號的方案更加強大。

以下作為一個例子:

image

三、USB3.0 OTG

在usb2.0時代,為了滿足移動設備單usb口既可以為主也可以為從的需求,出現了otg功能。Usb2.0的otg是通過micro或miniusb座子上的第5個id pin上的電平來完成識別,當id pin的電平為高,則為從機,當該電平為低時,則為主機。

我們市面上買的otg線,內部電路就是把id pin與GND線相接,以實現otg線插入後,手機可以作為host端

在usb3.0中,id pin的功能同樣被強大的typec所取代,主從的識別將通過cc來識別。同時主從雙方也可以通過cc的通訊來切換角色。

在usb2.0中,供電方與受電方和設備的主從關係是綁定的,只有host可以給devices供電。usb3.0中則完全不同,兩者完全獨立,在做host的同時,依舊可以接受供電。解決了“手機沒電時,就無法插usb設備”的問題

同時在硬體上,我們需要明確usb 3.0 otg的組成部分

  • usb控制器

控制器負責將處理通訊中,數據的校驗,分發,異常處理等主要工作。在usb2.0中我們有諸如“ehci,uhci,ohci,dwc2”等多個不同的控制器ip。其中ehci是同時相容usb1.0,usb1.1,usb2.0等功能,而uhci,ohci則只能支持到1.1 。dwc2則是擁有otg功能的控制器

在usb3.0中,控制器則只剩了xhci,與dwc3,同樣的dwc3也是擁有otg功能。

  • usb phy

Usb phy主要負責實際的物理信號。將串列的usb數據轉換成控制器所需要的數據格式。同時,我們usb信號質量也與phy有關,在一定程度上phy可以改善usb眼圖,但主要還是靠usb走線

  • typec phy

與usb phy功能類似,只不過處理的是cc pin上的信號。cc信號也可以用獨立的晶元,如fusb302等晶元來處理。

1.EXTCON

External Connectors是usb用於狀態通知的驅動,當phy收到中斷,處理完usb狀態後,通過extcon驅動,廣播到已監聽該extcon的所有驅動

使用devm_extcon_register_notifier來註冊監聽usb狀態變化

使用devm_extcon_dev_register來註冊管理usb的狀態變化

以下host的識別作為一個例子:

image

2.USB3.0 HOST

Usb3.0相比於usb2.0,在usb core層,驅動並沒有太大變化,仍舊與原來的流程相同,usb代碼的核心數據結構仍然是URB,URB的使用方法也與原來相同:

image

區別在於usb hcd之後的代碼,xhci中,核心的數據結構為TRB,每一筆數據以一個trb來做交換,在xhci.c中xhci_urb_enqueue進一步判斷數據類型,並對stream id以及burst做判斷,並提交到控制器中

3. USB3.0 OTG

(1) ConfigFS

在《帶你遨游USB世界》中,我們介紹了android.c的gadget配置方式,在早期時,linux的gadget驅動都是固定功能,即開機後usb功能就已固定,無法改變。而這樣的功能,明顯無法滿足移動設備對於otg功能的需求,因此android推出了android.c和composite.c的複合功能的gadget驅動。

再此之後,android.c的方式沿用了很久,直到linux更新了新的gadget驅動----configfs子系統,滿足了移動端的所有需求。相比於android.c,configfs更加靈活,因此替代了android.c。

在新的linux代碼中,configfs基本替代了android.c,因此我們對configfs做一定的介紹

啟動流程:

image

啟動後,上層UsbDeviceManager.java通過setprop sys.usb.config的屬性來控制gadget功能,例如:

image

這其中每個綁定的功能都應gadget中的一個驅動,如mtp對應drivers/usb/gadget/function/f_mtp.c

(2) OTG枚舉流程

流程圖如下

image

Configfs子系統與控制器之間的數據交換是通過struct usb_request *request結構體,一次完整的流程如下:

image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 《ASP.NET Core 開發實戰》 [作者] (意) Dino Esposito[譯者] (中) 趙利通[出版] 清華大學出版社[版次] 2019年07月 第1版[印次] 2019年12月 第2次 印刷[定價] 79.80元 【前言】 (PVI) ASP.NET Core 是 ASP.NET 開 ...
  • [WebMethod] public string index(string Action,string Message) { try { // 1. 使用 WebClient 下載 WSDL 信息。 WebClient web = new WebClient(); Stream stream = ...
  • https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-5.0&tabs=visual-studio 上邊為微軟的操作文檔,按操作我遇到了下麵這個問題 歐克,面 ...
  • 引用對象的實例代表了一個記憶體指針。當修改引用對象的屬性時,記憶體里的信息會發生相應變化。如果引用對象被new,則代表了一個新的指針,此時產生的更改不會影響之前指針指向的對象了。 同理,下麵new之後,list里保存的仍是之前的指針,所以不會被影響 List<WalletBalanceDayRecord ...
  • 在這個微服務火熱的時代,如果不懂一點微服務相關的技術,想吹下牛都沒有法子。於是有必要瞭解學習一下。所以我最近看了下微服務相關的知識。微服務所涉及的知識是很廣的,我這裡只是講一下事件匯流排,當然,有現成很棒的框架如CAP,但是我這裡只是為了去體驗去更深入的瞭解事件匯流排,去瞭解它的工作流程,所以我自己寫了 ...
  • 設計思想 接上篇設計一個授權服務 來聊聊 他是怎麼被設計出來的 https://www.cnblogs.com/alangur/p/13187053.html#4628838 設計說明 許可權服務作為微服務中其實也可以認為只一個授權中心。在這個授權中心下,他主要提供其他服務的需要的用戶的業務邏輯的驗證 ...
  • 1、管理員登錄 頁面效果 實現步驟: public ActionResult AdminLogin(AdminLoginModel model) { if (FormsAuthentication.Authenticate(model.UserName, model.Password)) { For ...
  • --切換資料庫use mastergo --判斷資料庫是否存在,如果存在則刪除if exists(select * from sys.databases where name='OnlineExamDB')drop database OnlineExamDBgo --創建OnlineExamDB數據 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...