天天看點

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

​​​​

第4章   ThreadX USBX協定棧基礎知識

本章節為大家講解USB基礎知識點,學習USB前,非常有必要有個系統的認識。

  4.1初學者重要提示

  4.2 USB曆史

  4.3 USB架構

  4.4 USB硬體

  4.5 USB電流

  4.6 USB傳輸速度

  4.7 USB通信(重要)

  4.8 USB描述符

  4.9 USB類

  4.10 總結

4.1   初學者重要提示

1、  USB1.1和USB2.0規格書以及Cypress做的中文版USB文檔,非常推薦大家學習:

​​http://www.armbbs.cn/forum.php?mod=viewthread&tid=100698​​

2、  USB初學 -- 入門篇 (USB基礎知識速覽)

​​http://www.armbbs.cn/forum.php?mod=viewthread&tid=100687​​ 。

3、  文獻參考:

​​https://en.wikipedia.org/wiki/USB​​

​​https://zh.wikipedia.org/wiki/USB​​

​​https://en.wikipedia.org/wiki/USB_hardware​​

4.2   USB曆史

1994年,由七個公司組成的小組開始開發USB:Compaq,DEC,IBM,Intel,Microsoft,NEC和Nortel。目标是通過替換PC背面的衆多連接配接器,解決現有接口的可用性問題以及簡化所有連接配接到USB裝置的軟體配置,從根本上簡化外部裝置連接配接至PC,并且可以為外部裝置提供更高的資料速率。 阿傑·巴特(Ajay Bhatt)和他的團隊在英特爾制定該标準。第一批內建電路支援USB的産品由英特爾于1995年生産。

最初的USB 1.0規範于1996年1月推出,它定義了1.5 Mbit / s 低速和12 Mbit / s全速的資料傳輸速率 。12 Mbit / s适用于列印機和軟碟驅動器等高速裝置,1.5 Mbit / s适用于鍵盤,滑鼠和操縱杆等低資料速率裝置。Microsoft Windows 95,OSR 2.1在1997年8月為裝置提供了OEM支援。USB的第一個廣泛使用的版本是1998年9月釋出的1.1。蘋果的iMac是第一個帶有USB的主流産品,而iMac的成功推廣了USB本身。在蘋果公司決定從iMac上删除所有相容端口之後,許多PC制造商開始建構相容版PC,這導緻使用USB成為PC市場标準。

USB 2.0規範于2000年4月釋出,并在2001年底被USB-IF準許。惠普,英特爾,朗訊科技(現為諾基亞),NEC和飛利浦共同上司了該計劃。開發更高的資料傳輸速率,進而使規範達到480 Mbit / s,是原始USB 1.1規範的40倍。

USB 3.0規範釋出于2008年11月12日,其主要目标是提高資料傳輸速率(高達5 Gbit / s),減少電力消耗,提高輸出功率,并且向後相容USB 2.0。USB 3.0包括與USB 2.0總線類似的新型高速總線SuperSpeed。是以,新版本也稱為SuperSpeed。首批配備USB 3.0的裝置于2010年1月推出。截止到2008年,全球市場上大約有60億個USB端口和接口,每年大約銷售20億個。

USB 3.1規範于2013年7月釋出。2014年12月,USB-IF向IEC(TC100–音頻,視訊和多媒體系統和裝置)送出了USB 3.1,USB Power Delivery 2.0和USB-C規範,以納入國際标準IEC 62680(通用串行總線接口,用于資料和電源),目前基于USB 2.0。

USB 3.2規範于2017年9月釋出。

USB4規範于2019年8月29日由USB-IF釋出。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.3   USB架構

系統中隻能有一個主機,并且與裝置進行的通信是從主機的角度進行的。主機是“上行” 元件,裝置則是“下行” 元件,資料從主機轉移到外設的操作是 OUT 傳輸。資料從外設轉移到主機的操作是 IN 傳輸。主機(尤其是主要制器)控制着所有通信并向裝置發出指令。共有三種常見的 USB 主要制器:

  • 通用主要制器接口(UHCI): 由 Intel 生産,适用于 USB 1.0 和 USB 1.1。使用 UHCI 時需要得到 Intel 的許可。該控制器支援低速模式和全速模式。
  • 開放主要制器接口(OHCI): 由 Compaq、 Microsoft 和 National Semiconductor 生産, 适用于 USB 1.0 和 1.1。該控制器支援低速模式和全速模式, 并且它的效率比 UHCI 更高, 因為可以執行更多硬體功能。
  • 擴充型主要制器接口(EHCI): 在 USB-IF 要求釋出單一主要制器規範後,已經生産了該控制器,它适用于 USB2.0。 EHCI 僅支援高速傳輸,并且将低速和全速傳輸委托給 OHCI 或 UHCI 控制器執行。

可以将一個或多個裝置連接配接至一個主機。每個裝置均有一個位址,并且會對尋址它的主機指令做出響應。裝置預計具有某種形式的功能,并不簡單作為一個被動元件。裝置具有一個上行端口。端口是裝置上的 USB 實體連接配接點。集線器是一個專用裝置,允許主機同總線上的多個外設進行通信。與 USB 外設(例如滑鼠)具有實際功能不同,集線器裝置是透明的,并且作為直通連接配接使用。集線器也作為主機和裝置間的通道。集線器具有多個連接配接點,進而可以将多個裝置連接配接到一個主機上。一個集線器可以将與下行裝置進行的通信,重複使用到一個上行端口和最多七個下行端口。但集線器并沒有主機功能。

通過使用集線器最多能夠将 127 個裝置連接配接至主要制器上。連接配接裝置的數目限制由 USB 協定決定,它限制裝置位址為 7 位。另外,由于集線器的時間限制和電纜傳播的延遲,是以最多隻能将五個集線器連結在一起。下圖顯示的是 USB 層次系統的框圖,它表示集線器和裝置的連結限制。大家可以看到,随着集線器的連結限制,層次系統也限制為七層。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

USB裝置分為以下幾個類别:

  • Hubs

Hubs集線器(USB擴充裝置)提供了附加的連接配接點,并從使用者角度簡化了USB連接配接。每個集線器将單個連接配接點轉換為多個連接配接點,稱為端口。

  • Functions

Functions為系統提供了發送或接收資料和控制資訊的功能。每個功能都包含描述裝置功能和資源要求的配置資訊。

  • Composite Devices

複合裝置是實作多種功能并包括嵌入式集線器的實體程式包。複合裝置在主機上看起來像是帶有一個或多個不可移動USB裝置的集線器。複合裝置支援不止一種類别,是以為主機提供了不止一種功能。

對于以主機為中心的開發,USB連接配接看起來像是星形網絡。集線器不會引起任何程式設計複雜性,并且對程式員而言是透明的。無論是直接連接配接到根集線器還是通過中間集線器連接配接,USB裝置的工作方式都相同。在該主/從網絡中,所有USB裝置都可用作可尋址節點。隻有主機可以在網絡中啟動資料傳輸。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

注意:

  • 任何USB系統中僅存在一個主機。
  • 在第7層中,隻能啟用功能。
  • 符合裝置占據兩層。

4.4   USB硬體

市場是上USB連機器種類非常多,常用的如下:

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

Type A,Type B是四個引腳,對于的引腳定義如下:

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

Mini 和 Micro 連接配接器具有五個(而不是 4 個)引腳。額外引腳是 ID 引腳,用于識别 OTG 應用中的主機和裝置,此引腳接地表示主機,未連接配接表示裝置。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

更多的USB接口如下:

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.5   USB電流

USB2.0和USB3.0支援的電壓範圍和最大電流如下:

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

注:BC1.2是Battery Charging (BC) 1.2,PD是Power Delivery。

4.6   USB傳輸速度

不同USB版本的速度如下:

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.7   USB通信(重要)

USB是輪詢總線,USB主機發起所有資料交換。資料往返于USB裝置中的端點。USB主機中的用戶端将資料存儲在緩沖區中,但沒有端點。USB主機和外圍USB裝置具有不同的層,如下圖所示。層之間的連接配接是每個層之間的裝置接口。在連接配接之間,使用Pipes傳輸資料。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

USB資料是由二進制數字串構成的,首先數字串構成域,域再構成包Packet(令牌包、資料包、握手包),包再構成事務Transaction(IN、OUT、SETUP),事務再構成傳輸Transfer(中斷傳輸、同步傳輸、批量傳輸和控制傳輸),傳輸最後再構成管道Pipe。下圖可以形象的展示它們之間的關系:

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.7.1      管道(Pipes)

管道是主機與裝置端點資料傳輸的連接配接通道,代表了主機的資料緩沖區與裝置端點之間交換資料的能力。管道包括資料流管道和消息管道。

  • Message Pipes:消息管道具有定義的USB格式,并且受主機控制。消息管道允許資料雙向流動,并且僅支援控制傳輸。
  • Stream Pipes:流管道沒有定義的USB格式,可以由主機或裝置控制。資料流具有預定義的方向,即IN或OUT。流管道支援中斷傳輸,同步傳輸和批量傳輸。

将USB裝置連接配接到USB總線并由USB主機配置後,大多數管道就存在了。管道源自主機用戶端中的資料緩沖區,并在USB裝置端點的内部終止。

4.7.2      傳輸(Transfers)

傳輸(資料流類型管道)可以包含一個或多個事務,管道支援以下傳輸類型之一:

  • 控制傳輸通常用于設定USB裝置。它們始終使用IN / OUT端點0。
  • 中斷傳輸可用于定期發送資料的地方,例如用于狀态更新。
  • 同步傳輸傳輸實時資料,例如音頻和視訊。它們具有固定帶寬,但沒有錯誤檢測。
  • 批量傳輸可用于時間不重要的資料發送,例如列印機。

4.7.3      控制傳輸(Control Transfers)

控制傳輸是雙向傳輸,供主機使用,以便主機使用IN和OUT端點0向裝置發送和從裝置請求配置資訊。每個控制轉移包括兩個及其事務。控制端點資料的最大資料包大小:

  • 低速USB是8個位元組。
  • 全速USB是8,16,32或者64位元組。
  • 高速USB是64位元組。

通常,應用程式軟體不使用這種類型的傳輸。控制傳輸的三個階段:

1、SETUP階段攜帶8個位元組被稱為設定包,定義請求,以及指定多少資料應在資料階段被轉移。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

2、該資料階段是可選的。如果存在,它将始終從包含DATA1資料包的事務開始。然後,事務類型在DATA0和DATA1之間交替,直到所有必需的資料都已傳輸。

3、STATUS階段是含有零長度分組DATA1事務。如果DATA階段為IN,則STATUS階段為OUT,反之亦然。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.7.4      中斷傳輸(Interrrupt Transfers)

中斷傳輸與裝置之間的延遲有限。在USB中,中斷傳輸或中斷管道具有以下定義的輪詢速率:

  • 全速和低速分别為1ms和255ms。
  • 高速端點為125μs至4096ms。

中斷端點資料的最大包大小為:

  • 全速USB最大64位元組。
  • 高速USB最大1024位元組。

開發人員可以定義主機多久請求裝置進行資料傳輸。例如,對于滑鼠,可以保證每10 ms的資料傳輸速率。但是,定義輪詢速率并不能保證每10毫秒傳輸一次資料,而是保證交易将發生在第十幀内的某個位置。是以,USB事務有一定的抖動。

通常,中斷傳輸資料由事件通知,字元和來自裝置的坐标組成。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.7.5      同步傳輸(Isochronous Transfers)

同步傳輸用于傳輸實時資訊,例如音頻和視訊資料,并且必須以恒定的速率發送。為USB等時資料流配置設定了USB帶寬的專用部分,確定按所需的速率傳送資料。同步管道在每個幀中發送一個新的資料包,而不管最後一個包的成功或失敗。

等時端點資料的最大資料包大小為:

  • 全速最大1023位元組。
  • 高速最大1024位元組。

同步傳輸沒有錯誤檢測。電氣傳輸中的任何錯誤均無法糾正。同步傳輸也受定時抖動的影響。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.7.6      批量傳輸(Bulk Transfers)

批量傳輸用于控制,中斷和同步傳輸以外的資料。使用錯誤檢測可以在硬體級别上確定可靠的資料交換。

資料的傳輸方式與中斷傳輸的方式相同,但是沒有定義輪詢速率。批量傳輸占用了其他傳輸完成後的所有可用帶寬。如果總線非常繁忙,則批量傳輸可能會延遲。

批量端點資料的最大資料包大小為:

  • 全速USB支援8、16、32或64位元組。
  • 高速USB支援512位元組。

對于低速和全速端點,以下内容有效:如果總線空閑,則可以在單個1ms幀中進行多個批量傳輸(中斷和同步傳輸限制為每幀最多一個資料包)。

例如,批量傳輸将資料發送到列印機。隻要在合理的時間範圍内列印資料,确切的傳輸速率就不重要。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.7.7      事務(Transaction)

事務:分别有IN事務、OUT事務和SETUP事務三大事務,每一種事務都由令牌包、資料包、握手包三個階段構成:

  • 令牌包(Token Packet)是定義事務類型,方向,裝置位址和端點。
  • 資料在資料包(Data Packet)中傳輸。
  • 事務的最終狀态在握手資料包(Handshake Packet)中确認。
【STM32F407】第4章 ThreadX USBX協定棧基礎知識

在事務中,資料從USB主機傳輸到USB裝置,反之亦然。傳輸方向在USB主機發送的令牌包中指定。然後,發送端發送一個資料包或訓示它沒有要傳輸的資料。通常,目的地以握手包作為響應,訓示傳輸是否成功。

4.7.8      包(Packets)

每個資料包以目前傳輸速率傳輸整數個位元組。資料包以同步模式開始,然後是資料包的資料位元組,最後以資料包結束(EOP)信号結束。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

所有USB資料包模式都首先發送最低有效位。在資料包之前和之後,總線處于空閑狀态。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

特殊的資料包是幀開始資料包(SOF),它将USB總線分為多個時間段。每個管道在每個幀中配置設定一個插槽。幀開始資料包在全速鍊路上每1ms發送一次。高速時,将1ms幀分為8個每幀125μs的微幀。在每個微幀的開頭使用相同的幀号發送幀開始資料包。幀号每1ms增加一次。

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.7.9  域(field)

域是USB資料最小的機關,由若幹位組成,域可分為七種類型:

  • 同步域(SYNC),8位,值固定為0000 0001,用于本地時鐘與輸入同步,标志一個包的起始。
  • 辨別域(PID),由四位辨別符+四位辨別符反碼構成,表明包的類型和格式,可以計算出USB的辨別碼有16種。
  • 位址域(ADDR):七位位址,代表了裝置在主機上的位址,位址000 0000被命名為零位址,是任何一個裝置第一次連接配接到主機時,在被主機配置、枚舉前的預設位址,是以一個USB主機隻能接127個裝置。
  • 端點域(ENDP),4位,由此可知一個USB裝置有的端點數量最大為16個。
  • 幀号域(FRAM),11位,每一個幀都有一個特定的幀号,幀号域最大容量0x800,幀号連續增加,到0x7ff後從自動0開始,對于同步傳輸有重要意義。
  • 資料域(DATA):長度為0~1023位元組,在不同的傳輸類型中,資料域的長度各不相同,但必須為整數個位元組的長度。
  • 校驗域(CRC):對令牌包(CRC5)和資料包(CRC16)中非PID域進行校驗的一種方法,CRC校驗在通訊中應用很泛,是一種很好的校驗方法,至于具體的校驗方法請查閱相關資料,隻須注意CRC碼的除法是模2運算,不同于10進制中的除法。
【STM32F407】第4章 ThreadX USBX協定棧基礎知識

4.7.10 端點(Endpoints)

端點,實際上是裝置硬體上具有一定大小的資料緩沖區。USB系統中,每一個端點都有唯一的位址,是有裝置位址和端點号給出的。預設設定端點0用作控制傳輸端點,其他端點必須在裝置被主機配置後才能使用。

端點可以描述為資料源或接收器,并且僅存在于USB裝置中。可以從USB主機接收或等待将其存儲在端點上的資料。可以将端點配置為USB規範中定義的四種傳輸類型(控制傳輸,中斷傳輸,同步傳輸和批量傳輸)。在硬體限制内,可以使用USB協定棧配置端點(例如,将端點限制為某種傳輸類型)。

端點充當一種緩沖區。例如,USB主機的用戶端可以将資料發送到端點1。來自USB主機的資料将發送到OUT端點1。準備就緒後,微控制器上的程式将立即讀取資料。由于程式無法自由通路USB總線(USB總線由USB主機控制),是以必須将傳回資料寫入IN端點1。IN端點1中的資料将保留在那裡,直到主機向端點1發送一個IN資料包以請求資料為止。

這些規則适用于所有微控制器裝置:

  • 一個裝置最多可以有16個OUT和16個IN端點。
  • 每個端點隻能有一個傳輸方向。
  • 端點 0僅用于控制傳輸,不能配置設定任何其他功能。
  • OUT始終是指從主機指向裝置的方向。
  • IN始終指指向主機的方向。

注意:

  • 端點的總數和每個端點支援的功能由硬體定義。

4.8   USB描述符

USB裝置使用描述符報告其屬性,描述符是具有定義格式的資料結構。每個描述符開頭位元組是此描述符的位元組數,之後是描述符類型字段。

将USB裝置連接配接到USB總線時,主機通過枚舉來識别和配置裝置。裝置插入USB主機後,USB主機立即發送設定請求。系統将訓示該裝置選擇配置和接口,以比對USB主機上運作的應用程式。選擇配置和接口後,裝置必須為活動的端點提供服務,以此與USB主機交換資料。

常用的描述符如下:

  • 裝置描述符。
  • 配置描述符。
  • 接口描述符。
  • 一個或多個端點描述符。
【STM32F407】第4章 ThreadX USBX協定棧基礎知識

具體各種描述符的定義,在後面章節為大家說明。

4.9   USB類

常用的USB類如下:

【STM32F407】第4章 ThreadX USBX協定棧基礎知識

其中HID,CDC,Audio,MSC等類,将在後續章節詳細說明。

4.10 總結

本章就為大家介紹這麼多,涉及到的知識點比較多,需要大家看本章開頭提供的參考文檔位址來進一步的熟悉。