windows USB 設備驅動開發-控制傳輸的數據包

每次在主機控制器和 USB 設備之間移動數據時,都會發生傳輸。 通常,USB 傳輸可大致分為控制傳輸和數據傳輸。 所有 USB 設備都必須支持控制傳輸,并且可以支持用于數據傳輸的端點。 每種類型的傳輸都與設備緩沖區USB 端點 的類型相關聯。 控制傳輸與默認端點相關聯,數據傳輸使用單向端點。 數據傳輸類型使用中斷、批量和常時等量端點。 USB 驅動程序堆棧為設備支持的每個端點創建名為 管道 的信道。 管道的一端是設備的端點。 管道的另一端始終是主控制器。

在向設備發送 I/O 請求之前,客戶端驅動程序必須從 USB 設備檢索有關配置、接口、端點、供應商和類特定描述符的信息。 此外,驅動程序還必須配置設備。 設備配置涉及諸如在每個接口中選擇配置和備用設置等任務。 每個備用設置都可以指定一個或多個可用于數據傳輸的 USB 端點。

客戶端驅動程序配置設備后,驅動程序可以訪問 USB 驅動程序堆棧為當前所選備用設置中的每個端點創建的管道句柄。 若要將數據傳輸到端點,客戶端驅動程序通過設置特定于請求類型的 URB 的格式來創建請求。

關于默認端點

所有 USB 設備必須支持至少一個名為“默認端點”的端點。 任何以默認端點為目標的傳輸都稱為“控制傳輸”。 控制傳輸的目的是使主機能夠獲取設備信息、配置設備或執行特定于設備的控制操作。

默認端點有以下特征:

  • 默認端點的地址為 0;
  • 默認端點是雙向的,也就是說,在一次傳輸過程中,主機可以向端點發送數據并從其接收數據;
  • 默認端點在設備級別可用,不在設備的任何接口中定義;
  • 一旦在主機和設備之間建立連接,默認端點就處于活動狀態。 甚至在選擇配置之前,它就已經處于活動狀態;
  • 默認端點的數據包最大大小取決于設備的總線速度。 低速,8 字節;全速和高速,64 字節;超高速,512 字節;
控制傳輸

由于控制傳輸是高優先級傳輸,因此會由主機在總線上保留一定量的帶寬。 將為低速和全速設備保留 10% 的帶寬;為高速和超高速傳輸設備保留 20% 的帶寬。 現在,讓我們看看控制傳輸的布局。

控制傳輸分為三個事務:設置事務 、數據事務 、狀態事務 。 每個事務包含三類數據包:令牌數據包、數據數據包、握手數據包。

某些字段通用于所有數據包。 這些字段是:

  • “同步”字段,指示數據包的開始;
  • 數據包標識符 (PID),指示數據包的類型、事務的方向、事務是成功還是失敗(如果是握手數據包);
  • EOP 字段,指示數據包的結束;

其他字段取決于數據包的類型。

令牌數據包

每個設置事務都以令牌數據包開頭。 下面是該數據包的結構。 主機始終發送令牌數據包。

PID 值指示令牌數據包的類型。 下面是可能的值:

  • SETUP:指示控制傳輸中設置事務的開始;
  • IN:指示主機在從設備請求數據;
  • OUT:指示主機在將數據發送到設備;
  • SOF:指示幀的開始。 此類型的令牌數據包包含一個 11 位的幀號。 主機發送 SOF 數據包。 發送此數據包的頻率取決于總線速度。 對于全速總線,主機每隔 1 毫秒發送一次數據包;對于高速總線,則每隔 125 微秒發送一次;
數據數據包

緊跟著令牌數據包的是包含有效負載的數據數據包。 每個數據數據包能夠包含的字節數取決于默認終結點的數據包最大大小。 數據數據包可以由主機或設備發送,具體取決于傳輸的方向。

握手數據包

緊跟著數據數據包的是握手數據包。 此數據包的 PID 指示是主機還是設備接收了數據包。 握手數據包可以由主機或設備發送,具體取決于傳輸的方向。

可以使用任何 USB 分析器(例如 Beagle、Ellisys、LeCroy USB 協議分析器)來查看事務和數據包的結構。 分析器設備顯示如何通過線路將數據發送到 USB 設備或從其接收數據。 在此示例中,讓我們檢查由 LeCroy USB 分析器捕獲的某些跟蹤。 此示例僅供參考, 不表示 Microsoft 的認可。

設置事務

始終由主機啟動控制傳輸。 為此,主機會發送設置事務。 此事務包含名為“設置令牌”的令牌數據包,后跟一個 8 字節的數據數據包。 以下屏幕截圖顯示了一個示例性的設置事務。

在前面的跟蹤中,主機通過發送設置令牌數據包 #434 來啟動 由H 指示控制傳輸。 請注意,PID 指定的 SETUP 表示一個設置令牌。 PID 后跟設備地址和終結點地址。 對于控制傳輸,該終結點地址始終為 0。

接下來,主機發送數據包#435。 PID 為 DATA0,該值用于數據包排序(在后面討論)。 PID 后跟 8 個字節,其中包含有關此請求的主要信息。 這 8 個字節指示請求的類型和緩沖區(設備將在其中寫入響應)的大小。

所有字節以相反順序接收。我們會看到以下字段和值:

因此,我們可以得出結論:在此控制(讀取)傳輸中,主機發送請求來檢索設備描述符,并指定 18 個字節作為保存該描述符所需的傳輸長度。 設備發送這 18 個字節的方式取決于默認終結點可以在一個事務中發送多少數據。 該信息包含在設備描述符中,由設備在數據事務中返回。

作為響應,設備發送握手數據包#436。 請注意,PID 值為 ACK(ACK 數據包)。 這表示設備確認了此事務。

數據事務

現在,讓我們看看設備在響應請求時返回的內容。 實際數據在數據事務中傳輸。

下面是數據事務的跟蹤。

在接收到 ACK 數據包后,主機會啟動數據事務。 為了啟動事務,它會發送一個令牌數據包 #450?,其方向為 IN ,稱為 IN token。

作為響應,設備發送 IN 令牌后面的數據包#451。 此數據數據包包含實際的設備描述符。 第一個字節指示設備描述符的長度,即 18 個字節 (0x12)。 此數據數據包中的最后一個字節指示默認終結點支持的數據包最大大小。 在此示例中,我們看到設備可以通過其默認終結點一次發送 8 個字節。

默認終結點的數據包最大大小取決于設備的速度。 高速設備的默認終結點為 64 個字節;低速設備為 8 個字節。

主機通過向設備發送 ACK 數據包 #452來確認數據事務。

讓我們計算返回的數據量。 在設置事務中數據包 #435的 wLength 字段中,主機請求了 18 個字節。 在數據事務中,我們看到從設備收到的只有設備描述符的前 8 個字節。 那么,主機如何接收存儲在剩余的 10 個字節中的信息? 設備分兩個事務這樣做:先是 8 個字節,然后是最后的 2 個字節。

主機知道了默認終結點的數據包最大大小以后,就會啟動新的數據事務,根據數據包大小請求下一部分。

下面是下一數據事務:

主機通過發送 IN 令牌 #463 并從設備請求接下來的 8 個字節來啟動上述數據事務。 設備使用數據包 #464 進行響應,其中包含設備描述符接下來的 8 個字節。

收到 8 個字節后,主機會向設備發送 ACK 數據包 #465。

接下來,主機在另一數據事務中請求最后的 2 個字節,如下所示:

因此,我們看到,為了將 18 個字節從設備傳輸到主機,主機會跟蹤傳輸的字節數并啟動三個數據事務 (8+8+2)。

請注意數據事務 19、23、26 中數據包的 PID。 PID 在 DATA0 和 DATA1 之間交替變換。 該順序稱為數據切換。 在有多個數據事務的情況下,數據切換用于驗證數據包順序。 此方法可確保數據數據包不重復或丟失。

將合并的數據數據包映射到設備描述符的結構,我們看到以下字段和值:

檢查這些值即可獲得設備的一些初步信息。 設備是低速 USB 麥克風。 默認終結點的數據包最大大小為 8 個字節。 設備支持一種配置。

狀態事務

最后,主機會啟動最后一個事務:狀態事務,從而完成控制傳輸。

主機使用 OUT 令牌數據包 (#481) 啟動事務。 此數據包的目的是驗證設備是否已發送所有請求的數據。 在此狀態事務中,不發送數據數據包。 設備使用 ACK 數據包進行響應。 如果發生錯誤,PID 可能為 NAK 或 STALL。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41591.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41591.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

泛微開發修煉之旅--32ecology對接海康威視綜合安防管理系統,人臉識別機器數據同步代碼方案及源碼

文章鏈接:32ecology對接海康威視綜合安防管理系統,人臉識別機器數據同步代碼方案及源碼

解鎖深度學習黑箱:注意力機制的神秘力量

標題:解鎖深度學習黑箱:注意力機制的神秘力量 在深度學習領域,注意力機制(Attention Mechanism)是一種資源分配策略,它使得模型能夠集中于數據中最重要的部分。注意力機制在自然語言處理(NLP&a…

Open3D 在點云中構建八叉樹

目錄 一、概述 二、代碼實現 2.1關鍵函數 2.2完整代碼 三、實現效果 3.1原始點云 3.2構建后點云 一、概述 八叉樹(Octree)是一種樹狀數據結構,用于遞歸地將3D空間分割成較小的立方體。八叉樹特別適用于3D計算機圖形學、點云處理和空間…

[圖解]企業應用架構模式2024新譯本講解22-標識映射

1 00:00:01,080 --> 00:00:04,710 我們來看一下標識映射這個模式 2 00:00:08,030 --> 00:00:10,110 它是屬于對象-關系 3 00:00:10,120 --> 00:00:11,150 行為模式 4 00:00:11,160 --> 00:00:13,890 就是說,在動態的時候 5 00:00:15,770 --> 00:…

華為OD機考題(HJ65 查找兩個字符串a,b中的最長公共子串)

前言 經過前期的數據結構和算法學習,開始以OD機考題作為練習題,繼續加強下熟練程度。 描述 查找兩個字符串a,b中的最長公共子串。若有多個,輸出在較短串中最先出現的那個。 注:子串的定義:將一個字符串刪去前綴和后…

【Git 】規范 Git 提交信息的工具 Commitizen

Commitizen是一個用于規范Git提交信息的工具,它旨在幫助開發者生成符合一定規范和風格的提交信息,從而提高代碼維護的效率,便于追蹤和定位問題。以下是對Commitizen的詳細介紹。 1、Commitizen的作用與優勢 規范提交信息:通過提供…

C# Application.DoEvents()的作用

文章目錄 1、詳解 Application.DoEvents()2、示例處理用戶事件響應系統事件控制臺輸出游戲和多媒體應用與操作系統的交互 3、注意事項總結 Application.DoEvents() 是 .NET 框架中的一個方法,它主要用于處理消息隊列中的事件。在 Windows 應用程序中,當一…

Oracle PL / SQL INTERVAL數據類型

INTERVAL YEAR TO MONTH數據類型 INTERVAL YEAR TO MONTH存儲和操作年和月的間隔。 語法是: INTERVAL YEAR[(precision)] TO MONTH precision指定“years”字段中的數字位數。 我們必須在0..4的范圍內使用整數字面值。默認值為2。 以下代碼顯示如何將字面值分配…

基于16通道AD采集(CL1616和AD7616)的FPGA設計簡介

Cl1616是一款 16 位 DAS,支持對 16 個通道進行雙路同步采樣。CL1616 采用 5 V 單電源供電,可以 處理10 V、5 V 和2.5 V 真雙極性輸入信號,同時每對通道均能以高達 1 MSPS 的吞吐速率和 90 dB SNR 采樣。利用片內過采樣模式可實現更高的 SNR 性能。 AD7616與CL1616軟硬件兼容…

實驗四 圖像增強—灰度變換之直方圖變換

一.實驗目的 1.掌握灰度直方圖的概念及其計算方法; 2.熟練掌握直方圖均衡化計算過程;了解直方圖規定化的計算過程; 3.了解色彩直方圖的概念和計算方法 二.實驗內容: …

ArcGIS Pro SDK (八)地理數據庫 1 地理數據庫和數據存儲

ArcGIS Pro SDK (八)地理數據庫 1 地理數據庫和數據存儲 文章目錄 ArcGIS Pro SDK (八)地理數據庫 1 地理數據庫和數據存儲1 打開給定路徑的文件地理數據庫2 使用連接屬性打開企業級地理數據庫3 使用 sde 文件路徑打開企業級地理數…

Bootstrap 提示工具

Bootstrap 提示工具 Bootstrap 是一個流行的前端框架,它提供了一套豐富的工具和組件,用于快速開發響應式和移動設備優先的網頁。其中,提示工具(Tooltip)是 Bootstrap 提供的一個非常有用的組件,它可以在用戶將鼠標懸停在某個元素上時顯示額外的信息。本文將詳細介紹 Boo…

課設:選課管理系統(Java+MySQL)

在本博客中,我將介紹用Java、MySQL、JDBC和Swing GUI開發一個簡單的選課管理系統。 技術棧 Java:用于編寫應用程序邏輯MySQL:用于存儲和管理數據JDBC:用于連接Java應用程序和MySQL數據庫Swing GUI:用于構建桌面應用程…

555 定時器芯片工作原理

在本教程中,您將學習如何使用 555 定時器做一些有趣的事情。許多人用它做的第一件事就是制造閃爍的燈光。但這只是用該芯片可以做很多事情的簡單示例之一。您還可以控制電機、創建鬧鐘、創建樂器等等。 讓我們先來概覽一下這些引腳。 555 定時器引腳排列 引腳 1 接地…

【SpringCloud】概述 -- 微服務入門

在Java的整個學習過程中,大家勢必會聽見一些什么分布式-微服務、高并發、高可用這些專業術語,給人的感覺很高級,有一種高深莫測的感覺。可以看一下這篇博客對這些技術架構的演變有一個初步的認識: 服務端?并發分布式結構演進之路-CSDN博客文…

image媒體組件屬性配合swiper輪播

圖片組件&#xff08;image&#xff09; 先插入個圖片試試&#xff0c;插入圖片用src屬性&#xff0c;這是圖片&#xff1a; 代碼如下&#xff1a; <template><view><swiper indicator-dots indicator-color "#126bae" indicator-active-color &…

Jectpack Navigation組件設置統一跳轉動畫

Activity的跳轉一般通過Theme設置即可&#xff0c;但是Framment的跳轉除了NavigationUI類提供的方法會有動畫以外&#xff0c;直接調用navigate方法是沒有動畫的。 網上的實現個人認為比較麻煩&#xff0c;幫自己寫了一套&#xff0c;主要就是自定義NavHostFragement和Fragmen…

CobaltStrike的內網安全

1.上線機器的Beacon的常用命令 2.信息收集和網站克隆 3.釣魚郵件 4.CS傳遞會話到MSF 5.MSF會話傳遞到CS 1上線機器的Beacon的常用命令 介紹&#xff1a;CobaltStrike分為服務端和客戶端&#xff0c;一般我們將服務端放在kali&#xff0c;客戶端可以在物理機上面&#xff0…

tongweb 部署軟航流版簽一體化應用示例 提示跨域錯誤CORS ERROR

目錄 問題現象與描述 解決辦法 原理解析 什么是CORS 瀏覽器跨域請求限制 跨域問題解決方法 跨域請求流程 瀏覽器請求分類解析 http請求方法簡介 問題現象與描述 重慶軟航科技有限公司提供了一套針對針對word、excel等流式文件轉換成PDF版式文件并進行版式文件在線簽章…

ai積累-具體應用的大概設想

這些場景展示了以 ChatGPT 為代表的生成式 AI 可能的具體應用&#xff1a; 教育輔助&#xff1a; AI 可以充當學生的個性化輔導老師&#xff0c;提供定制化的學習材料和練習。例如&#xff0c;它可以生成針對學生能力水平和興趣的數學問題或歷史教學文章。 客戶支持&#xff1…