精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

USB通信協議

放人 ? 來源:電氣工程及其自動化學習 ? 作者:電氣工程及其自動 ? 2022-11-25 01:35 ? 次閱讀

USB,是英文Universal Serial Bus(通用串行總線)、支持設備的即插即用和熱插拔功能。在1994年底由英特爾、IBM、Microsoft等公司聯合提出的,在此之前PC的接口雜亂,擴展能力差,熱拔插不支持等。USB正是為了解決速度,擴展能力,易用性等而出現的,本文闡述了usb 協議的特點及其四種傳輸模式。
1. usb的特點

5ed6fb50-6c1e-11ed-b468-dac502259ad0.jpg

USB 接口有4根線,兩根電源及兩根信號,Standard A類型的接口定義 如下
一般的排列方式是:紅白綠黑從左到右
紅色-USB電源:標有-VCC、Power、5V、5VSB字樣
綠色-USB數據線:(正)-DATA+、USBD+、PD+、USBDT+
白色-USB數據線:(負)-DATA-、USBD-、PD-、USBDT+
黑色-地線:GND、Ground
1.1 Usb的四層描述符
USB協議采取主從模式,從設備端沒有主動通知USB主機端的能力,從機插入后,主機控制器根據協議,獲取設備描述符及驅動匹配。 每個usb設備可以有一個或多個配置(config),不同的配置的體現即不同的組合接口。 接口(interface)是一個邏輯概念,接口之間通常是隔離的,互相不干擾。 端點(endpoint)是usb設備的唯一可識別部分,也是host和device之間的通信流的終點。它是一個host或device上的一個數據緩沖區,用來存放和發送usb的各種數據。每個端點都是一個單一連接,支持一個方向的數據流(in: device→host)(out: host→device)。 端點0:所有的usb設備都要擁有端點0,該端點用于對一個邏輯設備進行配置。端點0支持控制傳輸,且總是在設備接入和上電時就進行配置。
一個設備通常有一個或多個配置;
一個配置通常有一個或多個接口;
一個接口通常有一個或多個端點。

5ef3ead0-6c1e-11ed-b468-dac502259ad0.jpg

》設備描述符
/* USB_DT_DEVICE: Device descriptor /
struct usb_device_descriptor {
__u8 bLength; //本結構體大小
__u8 bDescriptorType; //描述符類型
__le16 bcdUSB; //usb版本號 200->USB2.0
__u8 bDeviceClass; //設備類
__u8 bDeviceSubClass; //設備類子類
__u8 bDeviceProtocol; //設備協議,以上三點都是USB官方定義
__u8 bMaxPacketSize0; //端點0最大包大小
__le16 idVendor; //廠家id
__le16 idProduct; //產品id
__le16 bcdDevice; //設備出廠編號
__u8 iManufacturer; //設備廠商字符串索引
__u8 iProduct; //產品描述
__u8 iSerialNumber; //設備序列號字符串索引
__u8 bNumConfigurations; //配置的個數
} attribute ((packed));
》配置描述符
/ USB_DT_CONFIG: Config descriptor /
struct usb_config_descriptor {
__u8 bLength; //自身長度
__u8 bDescriptorType;//描述符類型(0x02)
__le16 wTotalLength; //該配置下,信息的總長度
__u8 bNumInterfaces; //接口的個數
__u8 bConfigurationValue; //Set_Configuration命令所需要的參數
__u8 iConfiguration; //描述該配置的字符串的索引值
__u8 bmAttributes;//供電模式的選擇
__u8 bMaxPower;//設備從總線提取的最大電流
} attribute ((packed));
》接口描述符
/ USB_DT_INTERFACE: Interface descriptor */
struct usb_interface_descriptor {
__u8 bLength;
__u8 bDescriptorType;//接口描述符的類型編號(0x04)
__u8 bInterfaceNumber; //該接口的編號
__u8 bAlternateSetting; //備用的接口描述符編號
__u8 bNumEndpoints; //該接口使用的端點數,不包括端點0
__u8 bInterfaceClass; //接口類
__u8 bInterfaceSubClass; //子類
__u8 bInterfaceProtocol; //協議
__u8 iInterface;//描述該接口的字符串索引值
} attribute ((packed));

》端點描述符
/* USB_DT_ENDPOINT: Endpoint descriptor */
struct usb_endpoint_descriptor {
__u8 bLength;//端點描述符字節數大小(7個字節)
__u8 bDescriptorType;//端點描述符類型編號(0x05)
__u8 bEndpointAddress; //端點地址及輸入輸出屬性
__u8 bmAttributes; //屬性,包含端點的傳輸類型,控制,中斷…
__le16 wMaxPacketSize; //端點收、發的最大包大小
__u8 bInterval; //主機查詢端點的時間間隔
__u8 bRefresh;
__u8 bSynchAddress;
} attribute ((packed));
1.2 USB 結構及通信形式

USB總線是一個單主方式的實現,是一種輪詢方式的總線,為樹形拓撲結構。協議規定所有的數據傳輸都必須由主機發起,host controller初始化所有的數據傳輸,各種設備緊緊圍繞在主機周圍。

5f1175dc-6c1e-11ed-b468-dac502259ad0.jpg

USB通信最基本的形式是通過USB設備里一個叫endpoint的端點(可以理解為硬件寄存器或者buff),而主機和endpoint之間的數據傳輸是通過pipe,pipe通信有兩種,一種是stream,另一種是message,協議中規定:message管道要求從它那兒過的數據必須具有一定的格式,message管道必須對應兩個相同號碼的端點,一個用來in,一個用來out,咱們的缺省管道就是message管道,當然,與缺省管道對應的端點0就必須是兩個具有同樣端點號0的端點。

5f2fffc0-6c1e-11ed-b468-dac502259ad0.jpg

一個USB邏輯設備就是一系列端點(endpoint)的集合,它與主機之間的通信發生在主機上的一個緩沖區和設備上的一個端點之間,通過管道來傳輸數據。管道的一端是主機上的一個緩沖區,另一端是設備上的端點 ,構成一個通信信道。
2. USB 四種通信方式
USB endpoint有四種類型,分別對應了四種不同的數據傳輸方式。它們是控制傳輸(Control Transfers),中斷傳輸(Interrupt Data Transfers),批量傳輸(Bulk Data Transfers),等時傳輸(Isochronous Data Transfers)。其中批量傳輸、等時傳輸和中斷傳輸每傳輸一次數據都是一個事務;控制傳輸包括三個過程,建立過程和狀態過程分別是一個事務,數據過程則可能包含多個事務。從usb設備端來看,也可以把端點分為四種類型為控制端點、中斷端點、批量端點、等時端點。USB傳輸數據先發數據低位(LSB),再發高位數據(MSB)
2.1 控制傳輸
控制傳輸用來控制對USB設備不同部分的訪問,通常用于配置設備,獲取設備信息,發送命令到設備,或者獲取設備的狀態報告。總之就是用來傳送控制信息的,每個USB設備都會有一個endpoint 0的控制端點,內核里的USB core使用它在設備插入時進行設備的配置,它會一種等待著USB core發送控制命令。
控制傳輸分為三個過程:
建立過程使用一個建立事務。建立事務是一個輸出數據包的過程,需要注意的點有:
? 首先是令牌包,建立過程使用SETUP令牌包;
? 其次是數據包類型,SETUP只能使用DATA0包;
? 最后是握手,設備只能采用ACK來應答(錯了的情況不應答),不能使用NAK或者STALL來應答,即設備必須要接受建立事務的數據。

5f5c86da-6c1e-11ed-b468-dac502259ad0.jpg

數據過程是可選的,即一個控制傳輸可能沒有數據過程。如果有,一個數據過程可以包含一個或多個數據事務,需要注意的是:
? 首先所有的數據事務必須是同一個方向的(在控制讀傳輸中,數據過程中的所有數據事務都必須是輸入的;在控制寫傳輸中,數據過程中的所有數據都必須是輸出的);
? 其次,一旦數據傳輸方向改變,就會認為進入到狀態過程,狀態過程的第一個數據包必須是DATA1包;
? 最后,每次爭取傳輸一個數據包后就在DATA0和DATA1之間交換。
在這里插入圖片描述

控制傳輸的Status階段是序列中的最后一個事務,狀態階段由前一階段的數據流方向改變描繪,并始終使用DATA1 PID。

獲取設備描述符為控制傳輸,由5個事務組成,分別是SETUP、IN、IN、IN、OUT,具體過程如下:

5f8ca748-6c1e-11ed-b468-dac502259ad0.jpg

2.2 批量傳輸
批事務量
{In/Out Data Packet
@令牌包(In/Out token)
@數據包 (In/Out data)
@握手包 (Out/In ack)
}

批量傳輸用來傳輸大量的數據,確保沒有數據丟失,并不保證在特定的時間內完成。U盤使用的就是批量傳輸,咱們用它備份數據時需要確保數據不能丟,而且也不能指望它能在一個固定的比較快的時間內拷貝完。
? 批量輸出(批量寫)時, Out Token→Out Data→ACK/NYET/NAK/STALL,其中ACK代表接收正常,且可以接收下次傳輸;NYET代表本次數據成功接收,但沒能力接收下一次傳輸;NAK表示沒有足夠的緩沖區來保存數據;STALL表示數據接收,但是端點處于掛起狀態。
? 批量輸入(批量讀)時,In Token→In Data→ACK /NAK/STALL,與批量寫不同,主機發送In令牌包后,若設備檢測到錯誤,則不做任何響應,主機等待超時。若設備沒有檢測到地址端點等錯誤,但是設備又沒有數據需要返回,那么設備就會返回NAK直接響應主機;若改端點處于掛起狀態,返回STALL給主機;若主機正確接收到數據后,主機返回ACK應答設備,同樣的,主機檢測到錯誤則不做出響應,設備檢測超時。USB協議規定,不允許主機使用NAK拒絕接收數據包。
2.3 中斷傳輸

中斷事務
{In/Out Data Packet
@令牌包(In/Out token)
@數據包(In/Out data)
@握手包(Out/In ack)
}

中斷傳輸是一種保證查詢頻率的傳輸,用來以一個固定的速率傳送少量的數據。中斷端點在端點描述符中要報告它的查詢時間,主機會保證在小于這個事件間隔的范圍內安排一次傳輸,USB鍵盤和USB鼠標使用的就是這種方式,USB的觸摸屏也是,傳輸的數據包含了坐標信息。

中斷傳輸不是由設備主動的發出一個設備請求,而是由主機保證不大于某個時間間隔內安排一次傳輸。中斷傳輸通常用在數據量不大,但是對時間要求較嚴格的設備。中斷傳輸也可以用來不停的檢查某個狀態,當條件滿足后再用批量傳輸,除了對端點查詢的策略上不一樣之外,中斷傳輸和批量傳輸的結構基本上是一樣的。
2.4 等時傳輸

等時事務
{In/Out Data Packet
@令牌包(In/Out token)
@數據包 (In/Out data)
}

等時傳輸使用等時事務(Isochronous Transactions)來傳輸數據。同樣用來傳輸大量的數據,但并不保證數據是否到達,以穩定的速率發送和接收實時的信息,對傳送延遲非常敏感。用在數據量大、對實時性要求高的場合,例如音頻設備、視屏設備等,這些設備對數據延時敏感,期望能夠有個比較穩定的數據流。對音頻或者視屏設備來說,對數據的100%正確要求不高,少量數據的錯誤還是能夠容忍的,主要是要保證不能停頓;所以等時傳輸是不保證數據100%正確的。當數據錯誤時,并不能進行重傳操作。因此等時傳輸也就沒有應答包,并不進行重傳操作。數據是否正確,可以由數據包的CRC校驗來確認。至于出錯的數據如何處理,是由軟件來決定的。
控制傳輸
{Setup Packet(建立階段)
@令牌包(setup token)-(out) @數據包(Setup data) -(out) @握手包(ack) - (in)
}
{In/Out Data Packet(可選數階段據)
@(令牌包(In/Out token) @數據包(In/Out data) @握手包(Out/In ack)
}
{Out/In Stautus Packet(狀態階段)
@(令牌包(Out/In token) @數據包(Out/In data) @握手包( In/Out ack)
}

審核編輯黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信協議
    +關注

    關注

    28

    文章

    858

    瀏覽量

    40269
  • usb
    usb
    +關注

    關注

    60

    文章

    7900

    瀏覽量

    264018
收藏 人收藏

    評論

    相關推薦

    拆解USB通信協議主要內容

    USB應用非常廣泛,電腦手機必備接口,很多嵌入式設備也具有USB通信能力,這里給大家分享一下USB通信協議主要內容。
    發表于 11-11 09:19 ?796次閱讀

    一文詳解USB通信協議技術

    包(Packet)是 USB 系統中信息傳輸的基本單元,所有數據都是經過打包后在總線上傳輸的。數據在 USB總線上的傳輸以包為單位,包只能在幀內傳輸。 高速 USB 總線的幀周期為125us,全速以及低速
    發表于 10-23 10:10 ?5947次閱讀
    一文詳解<b class='flag-5'>USB</b><b class='flag-5'>通信協議</b>技術

    USB通信問題

    請問各位大神,怎樣使用LABVIEW編寫USB通信協議,以能夠實現與下位機的通信。求大神指點
    發表于 10-25 20:47

    嵌入式USB通訊協議資料

    主要內容包括USB概述USB設備USB物理特性USB通信協議JB8的USB模塊的編程方法
    發表于 11-08 16:00

    USB通信協議和接口芯片的控制方法

    的傳輸性能不能得到根本改善。USB總線接口則具有速度快、易于擴展、支持熱插拔、使用靈活方便等優勢,尤其適用于家用設備與計算機的通信連接。本文重點討論USB通信協議及其接口芯片的控制方法
    發表于 05-17 07:00

    基于STM32處理器和PC主機的USB通信協議的實現

    基于STM32處理器和PC主機的USB通信協議的實現。
    發表于 11-09 17:49 ?68次下載

    USB通信協議

    所有命令都是以AT開頭 并以 回車\r換行\n 結束的ASCII字符
    發表于 12-09 23:47 ?4次下載

    USB HID介紹及USB協議的相關內容USB設備描述符資料概述

    HID是一種USB通信協議,無需安裝驅動就能進行交互,在學習HID之前,先來復習一下USB協議的相關內容。
    發表于 11-02 15:15 ?28次下載
    <b class='flag-5'>USB</b> HID介紹及<b class='flag-5'>USB</b><b class='flag-5'>協議</b>的相關內容<b class='flag-5'>USB</b>設備描述符資料概述

    實現USB通信協議和標準串口的設計的注意事項

    轉串口芯片CH340T,就可以成功實現USB通信協議和標準串口,但在硬件設計中要注意一下幾個問題:(電路見下圖)
    發表于 02-03 07:24 ?2451次閱讀
    實現<b class='flag-5'>USB</b><b class='flag-5'>通信協議</b>和標準串口的設計的注意事項

    USB通信協議的基本概念及理解

    注意:雖然高速USB總線和全速/低速USB總線的幀周期不一樣,但是SOF包中幀編號的增加速度是一樣的,因為在高速USB系統中,SOF包中幀編號實際上取得是計數器的高11位,最低三位作為微幀編號沒有使用,因此其幀編號的增加周期也為
    的頭像 發表于 10-31 15:25 ?1217次閱讀

    USB通信協議基本概念及應用

    包(Packet)是USB系統中信息傳輸的基本單元,所有數據都是經過打包后在總線上傳輸的。數據在 USB總線上的傳輸以包為單位,包只能在幀內傳輸。高速USB 總線的幀周期為125us,全速以及低速
    的頭像 發表于 10-31 17:32 ?1068次閱讀

    深入理解USB通信協議

    USB數據在【主機軟件】與【USB設備特定的端點】間被傳輸。【主機軟件】與【USB設備特定的端點】間的關聯叫做【pipes】。一個USB設備可以有多個管道(pipes)。
    的頭像 發表于 11-07 12:15 ?946次閱讀

    簡單了解USB通信協議

    在一個USB通信系統中,只能有一個主機存在,USB通信只存在于主機和設備之間
    發表于 05-25 11:08 ?7956次閱讀
    簡單了解<b class='flag-5'>USB</b><b class='flag-5'>通信協議</b>

    基于STM32處理器和PC主機的USB通信協議的實現

    電子發燒友網站提供《基于STM32處理器和PC主機的USB通信協議的實現.pdf》資料免費下載
    發表于 10-26 10:05 ?2次下載
    基于STM32處理器和PC主機的<b class='flag-5'>USB</b><b class='flag-5'>通信協議</b>的實現

    USB通信協議必備基礎知識

    高速 USB 總線的幀周期為125us,全速以及低速 USB 總線的幀周期為 1ms。幀的起始由一個特定的包(SOF 包)表示,幀尾為 EOF。EOF不是一個包,而是一種電平狀態,EOF期間不允許有數據傳輸。
    的頭像 發表于 11-25 14:39 ?641次閱讀
    <b class='flag-5'>USB</b><b class='flag-5'>通信協議</b>必備基礎知識