1. 程式人生 > >USB學習系列之二——USB裝置的插入檢測機制

USB學習系列之二——USB裝置的插入檢測機制

1.USB的插入檢測機制:USB埠的D+和D-均用一個15k的電阻接地,當無裝置接入時,均處於低電平;在裝置端在D+(表示高速裝置或者全速裝置)或者D-(表示低速裝置)接了一個1.5k的上拉電阻到+3.3v,一旦將裝置接入,USB埠的D+或者D-其中一個被拉高為3v,系統識別到外部裝置接入。

注意:高速裝置首先會被識別為全速裝置,然後再通過集線器和裝置二者的確認最後切換到高速模式下。

在高速模式下,採用的是電流傳輸模式,這個時候上拉電阻需要從D+上斷開。

2.當裝置沒有列舉成功時(可以通過一個10K的電阻將USB的電源端和D+或者D-連線起來,電腦會發現一個無法識別的裝置,這個裝置的PID和VID都是0,根據每個特性可以簡單的判定裝置的列舉是否成功。

3.一個具體的USB實現什麼功能,USB主機並不知道。USB主機通過讀取USB的裝置描述符來獲取裝置的型別、廠商的ID和產品的ID(通常依靠它們來載入對應的驅動程式)、端點情況、版本號等眾多資訊。

4.USB1.1協議定義的標準描述符有裝置描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、介面描述符(Interface Descriptor)、端點描述符(Endpoint Descriptor)和字串描述符(String Descriptor)。

USB2.0相比於USB1.1新增加的兩個描述符:限定符描述符(Qualifier Descriptor)和其他速度配置描述符(Other Speed Configuration Descriptor)。

5.一個USB裝置只有一個裝置描述符。

裝置描述符裡面決定了該裝置有多少種配置,每種配置都有一個配置描述符;

而在每個配置描述符中又定義了該配置有多少個介面,每個介面都有一個介面描述符;

在介面描述符裡面又定義了該介面有多少個端點,每個端點都有一個端點描述符,端點描述符定了端點的大小、型別等。

如果有類特殊描述符,它跟在相應的介面描述符之後。

注意:USB主機獲取描述符時,從上到下逐層獲取。對於字串描述符,USB主機是單獨獲取的,主機通過傳送獲取字串中描述符的請求以及描述符的索引號、語言ID來獲取對應的字串描述符。

6.裝置描述符:裝置所使用的USB協議版本號、裝置型別、端點0的最大包大小、廠商ID(VID)和產品ID(PID)、裝置版本號、廠商字串索引、產品字串索引、裝置序列號索引、可能的配置數等。

配置描述符:記錄配置所包含的介面數、配置的編號、供電方式、是否支援遠端喚醒、電流需求量等。

介面描述符:記錄介面的編號、介面的端點數、介面所使用的類、子類、協議等。

端點描述符:端點號及方向、端點的傳輸型別、最大包長度、查詢時間間隔等。

字串描述符:提供一些方便人們閱讀的資訊,它不是必需的。

7.與USB裝置進行通訊時需要的地址:裝置的地址和端點的地址。配置和介面是為了更加方便的管理端點抽象出來的概念。一個裝置可以有多個配置,但是一個時刻只能有一個配置有效;每個配置下又可以有多個介面,一個介面下面可以有多個端點。

8.具有多個介面,並由介面來實現功能的裝置叫做USB複合裝置。例如一個USB音訊裝置,它具有一個音訊控制介面,另外還有一個到多個音訊流或者MIDI流介面。在主機端會把USB複合裝置的每個介面當做一個功能裝置來看待,常見的USB滑鼠,U盤等通常是單一的裝置,即一個裝置下只有一個配置描述符、一個介面描述符。

相關推薦

USB學習系列——USB裝置插入檢測機制

1.USB的插入檢測機制:USB埠的D+和D-均用一個15k的電阻接地,當無裝置接入時,均處於低電平;在裝置端在D+(表示高速裝置或者全速裝置)或者D-(表示低速裝置)接了一個1.5k的上拉電阻到+3.3v,一旦將裝置接入,USB埠的D+或者D-其中一個被拉高為3v,系統

USB學習系列四——USB包結構

1.USB的資料傳輸以包為單位,一個包被分成不同的域。USB傳輸時使用的是LSB在前,MSB在後的方式。 2.不同的包所包含的域是不同的,但是都有共同的特點是:以同步域開始,緊跟著一個包識別符號PID,最終以包結束符EOP結束這個包。 3.同步域:高速USB序列介面引擎資料傳輸要開始了,同時也提供同步時鐘。

Python零基礎學習系列--Python介紹及環境搭建

url 軟件包 三方庫 簡單的 lin 文件的 span 高級程序設計 擴展 1-1、Python簡介:  Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年

CAN總線學習系列——CAN總線與RS485的比較

smb 可靠性 bus targe 接口 blog 情況 並不是 control CAN總線學習系列之二——CAN總線與RS485的比較 上 一節介紹了一下CAN總線的基本知識,那麽有人會問,現在的總線格式很多,CAN相對於其他的總線有什麽特點啊?這個問題

資料結構學習系列叉搜尋樹詳解!

寫在前面 近期準備補一下資料結構,尤其是關於Tree系列的,其中,二叉樹(Binary Tree)可以算是最簡單的之一,所以打算從之入手,將各種Tree的結構和操作都進一步瞭解一遍,以來充實自己的閒餘時間! 本文主要圍繞二叉樹中最簡單的實現:二叉搜尋樹。 介紹 二叉搜尋樹(Binary Search

SpringCloud學習系列 ----- 服務消費者(Feign)和負載均衡(Ribbon)

n) 描述 servers request 其中 led rac stp 定期 前言 本篇主要介紹的是SpringCloud中的服務消費者(Feign)和負載均衡(Ribbon)功能的實現以及使用Feign結合Ribbon實現負載均衡。 SpringCloud Feign

Reinforcement Learning強化學習系列:MC prediction

引言 這幾個月一直在忙找工作和畢業論文的事情,部落格擱置了一段時間,現在稍微有點空閒時間,又啃起了強化學習的東西,今天主要介紹的是強化學習的免模型學習free-model learning中的最基礎的部分蒙特卡洛方法(Monte Carlo),並以21點遊戲作

設計模式學習系列——工廠方法模式(Factory Method)

工廠模式是我們最常用的模式了,著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程式系統可以說是隨處可見。     為什麼工廠模式是如此常用?因為工廠模式就相當於建立例項物件的new,我們經常要根據類Class生成例項物件,如:     A a = new A (

12LaTeX學習系列---LaTex的圖片插入

clu 路徑 cte 語法 pdf 有時 The str 可選 目錄 目錄 前言 (一)插圖的基本語法 (二)插入的基本設置 1.說明: 2

ClickHouse學習系列【使用者許可權管理】

背景       最近花了些時間看了下ClickHouse文件,發現它在OLAP方面表現很優異,而且相對也比較輕量和簡單,所以準備入門瞭解下該資料庫系統。在安裝完之後首先做的應該如何設定使用者密碼以及許可權控制。因為和MySQL、MongoDB等資料庫的使用者管理完全不一樣,為方

程序間通訊學習系列)——簡單瞭解Binder機制

Binder機制太複雜了,本文只是簡單的對Binder進行了解。 在Android中Binder是一個類,實現了IBinder介面,在Binder機制中還有兩個重要角色Binder驅動(在核心中)和ServiceManager,這兩部分Android平臺已經實現,我們

CSS3學習系列選擇器(

計算 選擇器 sky :focus ddr gree for 指定元素 學習 first-child選擇器和last-child選擇器 first-child指定第一個元素。last-child指定最後一個子元素。 例如: <!DOCTYPE html>

[閉目洞察算法系列]插入排序三種實現

直接插入排序的思想是:將一個待排序的數字按照指定的排序規則,插入到一個前面已經排好序的的子序列中, 從而形成一個新的子序列,等待下一個數字的插入, 直至所有數字排序結束。 假設有陣列a[0 ... n - 1], 排序流程為: a[0]位第一個有序子序列, a[1 ..

JVM深度學習系列位元組碼檔案學習()

1. 首先javac編譯java檔案  javac aa.java 2. 使用javap 反編譯class檔案得到位元組碼檔案   javap -v aa.class   Javap 相關idea外掛   jclasslib

【Python學習系列】Python庫pandasCSV匯入

Python Data Analysis Library 或 pandas 是基於NumPy 的一種工具,該工具是為了解決資料分析任務而建立的。Pandas 納入了大量庫和一些標準的資料模型,提供了高效地操作大型資料集所需的工具。pandas提供了大量能使我們快速便捷地處理

OPEN(SAP) UI5 學習入門系列: 最佳實踐練習(上)

我們暫時不用Component來做模組化,我們先用最快最簡單的方法讓程式可以跑出個樣子來,然後再慢慢的新增功能。  所以,我們先直接加入MVC。 簡單介紹下,MVC就是模型、檢視和控制器的簡稱,一般的Web開發都會用到這種架構用來把前端的UI和業務邏輯分離。具體先不多介紹,直接做吧。 我們先大致規劃一下,我

USB裝置插入檢測機制

參考:USB入門系列之五 USB主機是如何檢測到裝置的插入的呢?首先,在USB集線器的每個下游埠的D+和D-上, 分別接了一個15K歐姆的下拉電阻到地。這樣,在集線器的埠懸空時,就被這兩個下拉電阻

Hadoop Hive概念學習系列hive裡的JDBC程式設計入門(

Hive與JDBC示例         在使用 JDBC 開發 Hive 程式時, 必須首先開啟 Hive 的遠端服務介面。在hive安裝目錄下的bin,使用下面命令進行開啟:     hive -service hiveserver &  //Hive低版本提供的服務是:Hivese

Intellij IDEA 2016學習系列)mybatis-generator自動生成

1.在maven工程中的resource中建立generatorConfig.xml 配置generatorConfig.xml的 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE

Linux 學習一 搭建環境系列 安裝 python3.6、setuptools、pip

如果本機安裝了python2,儘量不要管他,使用python3執行python指令碼就好,因為可能有程式依賴目前的python2環境,比如yum!!!!!不要動現有的python2環境!一、安裝python3.61. 安裝依賴環境  # yum -y install zlib-devel bzip2-deve