USB協議分析

来源:http://www.cnblogs.com/chd-zhangbo/archive/2016/03/07/5249955.html
-Advertisement-
Play Games

一、USB設備描述結構 1.邏輯組織結構 在USB設備的邏輯組織中,包含設備、配置、介面和端點4個層次。設備通常有一個或多個配置,配置通常有一個或多個介面,介面有零或多個端點。 每個USB設備都可以包含一個或多個配置,不同的配置使設備表現出不同的功能組合,配置由多個介面組成。在USB協議中,介面代表


一、USB設備描述結構

1.邏輯組織結構

  在USB設備的邏輯組織中,包含設備、配置、介面和端點4個層次。設備通常有一個或多個配置,配置通常有一個或多個介面,介面有零或多個端點。

每個USB設備都可以包含一個或多個配置,不同的配置使設備表現出不同的功能組合,配置由多個介面組成。在USB協議中,介面代表一個基本的功能,一個功能複雜的USB設備可以具有多個介面,而介面是端點的彙集。

一個USB播放器帶有音頻,視頻功能,還有旋鈕和按鈕。
配置1: 音頻(介面)+旋鈕(介面)
配置2: 視頻(介面)+旋鈕(介面)
配置3: 音頻(介面)+視頻(介面)+按鈕(介面)
音頻介面,視頻介面,按鈕介面,旋鈕介面均需要一個驅動程式。

USB設備中的唯一可定址的部分是設備端點,端點的作用類似於寄存器。每個端點在設備內部有唯一的端點號,這個端點號是在設備設計時給定的。主機和設備的通信最終都作用於設備上的各個端點。每個端點所支持的操作都是單向的,要麼只讀,要麽只寫。

2.描述符

在每一個USB設備內部,包含了固定格式的數據,通過這些數據,USB主機就可以獲取USB設備的類型、生產廠商等信息。這些固定格式的數據,我們就稱之為USB描述符。標準的USB設備有5種USB描述符:設備描述符,配置描述符,介面描述符,端點描述符,字元串描述符。

2.1 設備描述符

 bLength : 描述符長度,固定為0x12。
 bDescriptorType : 設備描述符類型,固定為0x01。
 bcdUSB : USB 規範發佈號。表示了本設備能適用於那種協議,如2.0=0200
 bDeviceClass : 類型代碼。
 bDeviceSubClass : 子類型代碼。
 bDeviceProtocol : 協議代碼。
 bMaxPacketSize0 : 端點0最大分組大小。
 idVendor : 供應商ID。
 idProduct : 產品ID(由廠商分配)。
 bcdDevice : 設備出產編碼,由廠家自行設置。
 iManufacturer : 廠商描述符字元串索引.索引到對應的字元串描述符。
 iProduct : :產品描述符字元串索引。
 iSerialNumber : 設備序列號字元串索引。
 bNumConfigurations : 可能的配置數。

2.2 配置描述符

 bLength : 描述符長度,固定為0x09。
 bDescriptorType : 配置描述符類型,固定為0x02。
 wTotalLength : 返回整個數據的長度,指此配置返回的配置描述符,介面描述符以及端點描述符的全部大小。
 bNumInterfaces : 配置所支持的介面數,指該配置配備的介面數量,也表示該配置下介面描述符數量。
 bConfigurationValue : 作為Set Configuration的一個參數選擇配置值。
 iConfiguration : 用於描述該配置字元串描述符的索引。
 bmAttributes : 供電模式選擇。Bit4-0保留,D7:匯流排供電,D6:自供電,D5:遠程喚醒.
 MaxPower : 匯流排供電的USB設備的最大消耗電流,以2mA為單位。

2.3 介面描述符

 bLength : 描述符長度,固定為0x09。
 bDescriptorType : 介面描述符類型,固定為0x04。
 bInterfaceNumber: 該介面的編號。
 bAlternateSetting : 用於為上一個欄位選擇可供替換的設置。
 bNumEndpoint : 使用的端點數目,端點0除外。
 bInterfaceClass : 類型代碼(由USB組織分配)。
 bInterfaceSunClass : 子類型代碼(由USB組織分配)。
 bInterfaceProtocol : 協議代碼(由USB組織分配)。
 iInterface : 字元串描述符的索引。

2.4 端點描述符

 bLength : 描述符大小,固定為0x07。
 bDescriptorType : 介面描述符類型,固定為0x05。
 bEndpointType : USB設備的端點地址。Bit7,方向,對於控制端點可以忽略,1/0:IN/OUT。Bit6-4,保留。BIt3-0:端點號.
 bmAttributes : 端點屬性,Bit7-2,保留。BIt1-0:00控制,01同步,02批量,03中斷。
 wMaxPacketSize : 本端點接收或發送的最大信息包大小。
 bInterval : 輪訓數據傳送端點的時間間隔.對於批量傳送和控制傳送的端點忽略.對於同步傳送的端點,必須為1,對於中斷傳送的端點,範圍為1-255。

 

二、USB數據通訊

1. 通訊模型

2. 傳輸

 

USB的數據通訊首先是基於傳輸(Transfer)的,傳輸的類型有:中斷傳輸(比如USB,鍵盤)、批量傳輸(大容量傳輸:比如U盤)、同步傳輸、控制傳輸.

 

3. 事物

 

一次傳輸由一個或多個事務(transaction)構成,事務可分為:In事務,Out事務,Setup事務

 

4. 包

 

一個事務由一個或多個包(packet)構成,包可分為:令牌包(setup)、數據包(data)、握手包(ACK)和特殊包

 

5. 域

 

一個包由多個域構成,域可分為:同步域(SYNC),標識域(PID),地址域(ADDR),端點域(ENDP),幀號域(FRAM),數據域(DATA),校驗域(CRC)

 

三、USB數據枚舉

 

USB設備在正常工作以前, 第一件要做的事就是枚舉。枚舉是讓主機認得這個USB設備, 並且為該設備準備資源,建立好主機和設備之間的數據傳遞通道。

 

1. 獲取設備描述符
2. 複位
3. 設置地址
4.再次獲取設備描述符
5. 獲取配置描述符
6. 獲取介面、端點描述符
7. 獲取字元串描述符
8. 選擇設備配置

 


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

-Advertisement-
Play Games
更多相關文章
  • ubuntu 15.10 如何設置靜態ip 分配固定ip 設置dns 設置網關 命令行配置ip 固定ip不生效怎麼辦
  • 系統來自系統媽:http://www.xitongma.com 系統概述 深度技術ghost win8 X86(32位)旗艦穩定版系統集成了SATA/RAID/SCSI驅動,支持P45、 MCP78、780G、690G開啟SATA AHCI/RAID。支持DOS、Windows下一鍵全自動快速備份/
  • 使用Arduino讀取LM35溫度感測器的值並算出當前溫度顯示到LCD上
  • ubuntu 修改網卡名稱 更改設備網卡名稱 修改eno16777736為eth0 ubuntu 15.10網卡名稱為eno16777736 linux 網卡名字為eno16777736怎麼辦
  • 博客園(FOREVER_ENJOY):http://www.cnblogs.com/zyx1314/ 本文版權歸作者所有;歡迎轉載!請註明文章作者和原文連接 Linux各個目錄的結構介紹 Linux系統以目錄的方式來組織和管理系統中的所有文件。Linux系統通過目錄將系統中的所有的文件分級、分層組織...
  • ARM的指令系統中關於棧指令的內容比較容易引起迷惑,這是因為準確描述一個棧的特點需要兩個參數: 棧地址的增長方向 :ARM將向高地址增長的棧稱為 遞增棧 (Descendent Stack),將向低地址增長的棧稱為 遞減棧 (Acendant Stack) 棧指針的指向位置 :ARM將棧指針指向棧頂
  • Arduino控制LCD屏幕顯示出helloworld字元串基本知識及其軟硬體設計
  • pstack命令用來顯示進程的棧跟蹤。 pstack 命令必須由相應進程的屬主或root賬號運行。可以使用pstack來確定進程掛起的位置。此命令只有一個參數,那就是pid,具體關於pstack的介紹可以查看man手冊,如下所示: [root@DB-Server ~]# man pstackPSTA...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...