USB原理(1)
USB作為目前計算機的最廣泛使用的外設介面,讓我們變得越來越便利。
USB的設計理念與傳統的外設介面設計有很大區別,一般的外設介面設計僅僅規定通訊過程的實現,很少涉及到通訊內容本身。而USB協議則對通訊內容的解析有很多規定,因此其協議內容比一般的協議都複雜,即使你理解TCP/IP協議,但是當面對USB協議時,也會感覺一頭霧水。
正因為USB實現目標是多種不同型別和速度裝置的連線,因此其靈活性也導致了其複雜性,當我剛開始接觸USB的時候,也感覺很多技術文件不知所云。根本就不知道USB是個什麼概念。經過大量的資料閱讀和測試,才大概瞭解了其基本原理,走了很多彎路,有過很多錯誤觀念。
1) 一般計算機的外設介面可以描述如下
主機系統<---->主機控制晶片 <------------------電纜--------------> 裝置通訊晶片 <------>裝置處理器
程式負責寫入資料到晶片緩衝區,然後傳送控制命令給晶片,由晶片負責傳送一個數據,當晶片接收到一個數據會產生中斷訊號通知程式處理收到的資料。
在主機端,實現與晶片互動的程式就是裝置驅動或匯流排驅動程式,在裝置端,一般用微控制器程式控制通訊晶片實現資料通訊。
2)在USB的外設通訊原理中,依然沒有什麼新的技術,一樣採用上述的硬體結構。
3)但是,USB實現的是外設通用介面,無論外設的型別和速度怎樣(當然速度是有限制的),都可以通過這個介面接入系統。在以前的介面中,如鍵盤、滑鼠、硬碟均有特定的介面,也有特定的驅動程式來實現資料的互動。一個驅動對應一個介面(外設)。而USB則是一個介面對應的裝置個數是不確定的,型別也是不確定的,因此其對應的驅動程式個數不定,驅動程式也不定,這就要求作業系統能動態的檢測裝置的型別,動態地載入驅動程式。
主機系統
|
主機USB通訊控制器
USB 根集線器HUB
/ | \
裝置1 裝置2 集線器HUB1
很多裝置可以連線到同一個集線器上,這就類似乙太網的集線器。我們在電腦上看到很多USB介面,它們可能連線到同一個USB主控制晶片。
因為多個裝置連線到同一個介面, 裝置通訊就可能發生衝突,因此必須有一套機制保證資料傳輸的協調。
4)與乙太網的對等通訊機制不同,USB是用來連線計算機的外部裝置的,因此其通訊過程存在主從關係。
裝置永遠只能是準備資料,不能主動傳送資料到主機。
主機驅動程式會輪流讀取各個裝置的狀態,從狀態中判斷各個裝置是否有資料要傳給主機。
5)一個外部裝置在主機系統中均有一個對應的驅動程式。而裝置驅動程式是呼叫更加底層的USB匯流排驅動程式與外設通訊的。
使用者程式向裝置寫入一個數據的過程(如一個1024位元組的資料包):
<1> 資料首先被轉發給裝置驅動程式,其實就是通過很多次的呼叫,最終會呼叫到裝置驅動程式中的傳送資料的函式。
<2> 裝置驅動程式是負責與一個具體的裝置(如滑鼠、U盤)通訊的業務邏輯處理的。
裝置驅動程式要傳送一個數據給裝置,首先把一個大的資料按照USB容許的最大資料包長度進行分解,然後每次傳送一個數據包給裝置。
例如裝置的端點一次最大容許接收512位元組,那麼就被分解成兩個資料包。
裝置驅動程式每次呼叫USB主控制器驅動程式傳送一個數據包。
<3> USB主控制器驅動是負責管理連線到本控制器的所有裝置,並協調其通訊過程的。USB主控驅動程式把資料包傳送給實際的裝置,資料包中包含了裝置編號。
主控制器驅動程式傳送一個數據包給裝置的時候,是佔用一個事務週期的,就是傳送資料的過程中是不能去做其他事情的。
傳送一個數據包占用一個匯流排時間片,在這個時間片裡,匯流排全力處理這個事務(傳送資料包)。
<4> 主控制器驅動程式傳送一個512位元組資料包給裝置的過程,又被分解成三個階段:
首先是主機發送一個命令(令牌包)給裝置,告訴裝置主機準備傳送資料了。
緊接著主機發送512位元組資料包給裝置。
裝置如果正常接收到,就返回一個訊號(握手包)告訴主機。主機收到這個訊號後就可以做其他事情了。
上面的三個階段是連續的,中間不能穿插其他的匯流排通訊操作。
驅動程式從裝置讀一個數據的過程:
<1> 首先向裝置傳送一個命令包,命令包格式必須遵從USB協議規定。
<2> 裝置收到命令資料包後,從中解析出主機的命令意圖,發現是要求本裝置上傳資料。裝置向晶片寫入資料,並寫入傳送命令,資料從裝置傳輸到主機。
<3> 主機收到資料後,向裝置輸出一個應答包,告訴裝置資料是否成功接收。
主機要從裝置獲得某些特定的資料,獲得U盤的一個扇區資料:
<1>主機首先要告訴裝置準備好哪個扇區的資料到裝置的USB晶片中,USB裝置從U盤的儲存區找到扇區並把資料拷貝到USB晶片中是需要時間的。
第一個事務過程,向裝置輸出讀扇區資料的命令。
a. 向裝置輸出一個令牌包,告訴裝置準備接收資料。
b. 向裝置輸出一個數據包,資料內容為扇區號和讀扇區命令。
c. 裝置收到資料後,回答一個握手包(ACK)給主機。
<2>主機在完成第一個事務後,就可以做其他事情了。在做其他事情時,偶爾檢查下裝置是否準備好資料(向裝置發一個IN包,裝置如果回答NAK表示沒準備好)。
<3> 裝置準備好資料後,就可以進入第二個事務。
a. 向裝置輸出一個IN令牌包,告訴裝置準備傳輸資料。
b. 裝置輸一個數據包,資料內容為扇區資料。
c. 主機收到資料後,回答一個握手包(ACK)給裝置。
相關推薦
USB原理(1)
USB作為目前計算機的最廣泛使用的外設介面,讓我們變得越來越便利。 USB的設計理念與傳統的外設介面設計有很大區別,一般的外設介面設計僅僅規定通訊過程的實現,很少涉及到通訊內容本身。而USB協議則對通訊內容的解析有很多規定,因此其協議內容比一般的協議都複
大數據生態圈中相關原理(1)
兩種 大數據 進行 排序 表示 數據塊 溢出 任務 傳輸數據 MapReduce 原理 客戶端任務到jobTracker, jobTracker分發任務到map和reduce。 map從datasplit 中獲取數據區,根據客戶端的相關業務邏輯生成(K,V)對,數據先緩存到
熟練使用Lua(三)模組支援:require的載入module的基本原理(1)
Lua標準庫- 模組(Modules) 轉: https://www.cnblogs.com/jadeboy/p/4150048.html Lua包庫為lua提供簡易的載入及建立模組的方法,由require、module方法及package表組成 1、module (nam
dubbo非同步呼叫原理 (1)
此文已由作者趙計剛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 一、使用方式 服務提供方不變,呼叫方程式碼如下: 1 <dubbo:reference id="demoService" che
瀏覽器解析JavaScript原理(1)
object 包括 就是 int 賦值 相同 得到 執行 例如 特點: 1、跨平臺 2、弱類型:JavaScript 定義的時候不需要定義數據類型,數據類型是根據變量值來確定的 強類型:定義變量的時候需要定義變量的類型:例如java,C
MySQL 系列連載之 XtraBackup 備份原理(1)
導讀 在日常的linux運維工作中,大資料量備份與還原,始終是個難點。關於mysql的備份和恢復,比較傳統的是用mysqldump工具,今天本文推薦另一個備份工具innobackupex。 如果您在本文遇到任何問題或疑問請到QQ群中與我們交流。也可在下方進行評論。我將在第一時間和您進行交流,共同學習
微控制器入門——微控制器的基本構成及工作原理(1)
有了電子電路和數位電路的基礎知識,就可以開始學習嵌入式系統的核心元件-微控制器。從本期開始我們將為大家介紹微控制器的基礎知識。在微控制器入門系列講座中,首先學習微控制器的基本構成和工作原理、以及外圍功能電路,然後,挑戰一個實際微控制器的執行。微控制器是控制電子產品的大腦現
垃圾郵件分類器的原理(1)
學習完了斯坦福大學《機器學習》第7周課程,做完程式設計作業垃圾郵件分類器,準備分享下實現原理和實現方法,對自己也是起到總結作用,對博友是個參考,估計得寫好幾篇才能講完,這是第一篇。 先看執行結果: 訓練樣本有4000個,測試樣本有1000個,結果顯示判斷準確率都在98%以上
ConcurrentHashMap 原理(1)之內部類HashEntry 、Segment
ConcurrentHashMap 的結構分析 ConcurrentHashMap 類中包含兩個靜態內部類 HashEntry 和 Segment。HashEntry 用來封裝對映表的鍵 / 值對;Segment 用來充當鎖的角色,每個 Segment 物件守護整個雜湊對映
計算機組成原理(1)-計算機系統概述
馮·諾依曼設計思想 馮·諾依曼設計思想可以簡要地概括為以下三點: (1) 計算機應包括運算器、儲存器、控制器、輸入和輸出裝置五大基本部件。 (2) 計算機內部應採用二進位制來表示指令和資料。每條指令一般具有一個操作碼和一個地址碼。其中,操作碼錶示運算性質,地址碼指出運算元在
SOFABoot原始碼解析之啟動原理(1)-註解分析
一 、概述 SOFABoot是螞蟻金服開源的基於 Spring Boot 的研發框架,它在Spring Boot 的基礎上,提供了諸如 Readiness Check,類隔離,日誌空間隔離等等能力。在增強了 Spring Boot 的同時,SOFABoot 提供
ASP.NET Core 中文文件 第三章 原理(1)應用程式啟動
ASP.NET Core 為你的應用程式提供了處理每個請求的完整控制。Startup 類是應用程式的入口(entry point),這個類可以設定配置(configuration)並且將應用程式將要使用的服務連線起來。開發人員可以在 Startup 類中配置請求管道,該管道將用於處理應用程式的所有請求。 章
編譯原理(1)
引論 程式設計語言及編譯 程式設計語言 機器語言 組合語言 高階語言 編譯程式 編譯程式是現代計算機系統的基本組成部分. 從功能上看,一個編譯程式就是一個語言翻譯程式,它把一種語言(稱作源語言)書寫的程式翻譯成另一種語言(稱作目標語言)的
計算機組成原理(1)實驗3
一. 運算器實驗 1.實驗內容及要求 1) 讀出系統已有的微指令,並理解其含義。 2) 設計並實現微指令系統。 3) 瞭解譯碼器、微指令結構的基本工作原理。 4) 學習設計微指令的方法。 2.實驗環境 DICE-CP266計算機組成原理與系統
SpringMVC工作原理(1)
大家好,今天和大家分享SpringMVC的相關知識,主要是對SpringMVC的工作原理做一些分析。 SpringMVC的工作流程如下: 接下來我們先來對其中的元件以及相應的功能來做簡單介紹: 元件:1.DispatcherServletDispat
計算機原理(1)
轉載自:http://blog.csdn.net/cc_net/article/details/10419645 1. 計算機的發展 計算機的發展包括了硬體和軟體的發展,硬體的發展為計算機提供了更快的處理速度,而軟體的發展為使用者提供了更好的體驗。兩者相輔相成,密
InstantRun原理(1)——初始化邏輯
Android Studio 2.0開始支援 Instant Run 特性, 使得在開發過程中能快速將程式碼變化更新到裝置上。之前,更新程式碼之後需要先編譯一個完整的新Apk,解除安裝裝置上已安裝的這個 Apk (若有),再 push 到裝置安裝,再啟動。有了
JVM原理(1)
概述 基本概念 JVM:全稱是Java Virtual Machine,是一種能夠執行java bytecode(位元組碼)的虛擬機器。 JIT:全稱為Just-in-time compiler,即時編譯編譯器,用於將java位元組碼轉換成可以直接傳送
通過OpenGL理解前端渲染原理(1)
通過OpenGL理解前端渲染原理,本文著重介紹渲染管線工作流程。 一、OpenGL OpenGL,是一套繪製3D圖形的API,當然
redis 原理系列之--字串儲存的實現原理(1)
背景 redis功能強大,幾乎已經成了現代大中型服務必備的快取技術了。 除了十分給力的快取功能,redis當做訊息佇列,資料庫也有著不錯的表現。 我們都知道,redis 有五種資料型別,string,list, hash, set 和zset。 其中 最基本的,同時也是最常用的 就是string了。 本