USB標準
- USB1.0, 1996,低速1.5Mbps和高速12Mbps,USB1.1 iMac G3,Type A和Type B接口
- USB 2.0 2000, 480Mpbs,Type A/B/C接口、Micro A/B
- USB 3.0 5Gbps, 隨著USB 3.2命名規定,現在也叫USB 3.2 Gen1
- USB 3.1 10Gpbs,現在稱為USB 3.2 Gen2
- USB 3.2 USB 3.2 Gen2*2 10Gpbs
- USB 4,基于雷電3協定,功率提升到240W, 40Gbps
USB接口類型TypeA/B/C
https://zhuanlan.zhihu.com/p/447595295
USB端點
端點可以看作是一個單向的管道,USB通訊的基本方式是通過端點完成的,端點有四種類型:
- CONTROL控制:允許對USB設備的不同部分存取,常用來配置設備、獲取關于設備的信息、發送命令到設備、獲取設備的狀態報告
- INTERRUPT中斷:創送少量的數據,固定傳輸速率,比如USB鍵盤和鼠標
- BULK塊:傳送大量的數據,不能有數據丟失,比如打印機、存儲器和網絡設備上
- ISOCHRONOUS同步:傳送大量數據、但是數據不保證完成,比如實時數據采集設備,如音頻或者視頻
USB接口
USB端點被綁在接口中,USB接口只處理一類USB邏輯連接,每個USB驅動控制一個接口
USB配置
USB接口被捆綁到配置上,一個USB設備可能有多個配置并在它們之間轉換
USB設備、端點、接口、配置關系
- 設備通常有一個或者多個配置
- 配置常常有一個或者多個接口
- 接口常常有一個活動多個設置
- 接口有零或者多個端點
URB
USB Request Block,一個URB用來發送或者接受數據
URB聲明周期
- 被一個USB設備驅動創建
- 安排一個特定的USB設備的特定端點
- 被USB設備驅動提交給USB核心
- 提交給被USB核心指定的USB主機控制器驅動
- 被USB主機控制器處理,進行一次USB設備的傳送
- URB完成時,USB主機控制器驅動通知USB設備驅動
USB驅動總統框架
從主機側看:
USB主機控制器:負責協調主機和設備的通信
USB主機控制器驅動:控制插入的USB設備
USB核心:USB驅動管理和協議處理的主要工作,定義一些數據結構、宏和功能函數,向上為設備驅動提供編程接口、向下為USB主機控制器驅動提供編程接口,維護整個系統USB設備信息,完成設備熱插拔控制,總線數據傳輸
USB設備驅動:控制USB設備如何與主機通信
從設備側看:
- UDC驅動程序直接訪問硬件、控制USB設備和主機間的底層通信,向上提供與硬件相關操作的回調函數
- Gadget Function API是UDC驅動程序回調函數的簡單包裝
- Gadget Function驅動程序具體控制USB設備功能的實現,使設備表現出網絡連接、打印機或者USB Mass Storage等特性
USB主機控制器驅動
OHCI:非PC系統上以及帶有SiS和ALi芯片組的PC主板
UHCI:大多數其他主板上的USB芯片
EHCI:兼容OHCI和UHCI
xHCI:面向USB 3.0
USB的探測和斷開函數
探測函數:設備插入時初始化硬件資源
斷開函數:設備拔出時釋放硬件資源
Gadget Function驅動
- Ethernet over USB:驅動模擬以太網網口,例如CDC Ethernet、CDC Subset以及RNDIS
- File-Backed Storage Gadget: 最常見的U盤功能實現
- Serial Gadget: 串口,例如Generic Serial和CDC ACM規范實現
- Gadget MIDI:暴露ALSA MIDI接口
- USB Video Class Gadget驅動:讓Linux系統成為另外一個系統的USB視頻采集源
- GadgetFS:Gadget文件系統
DMA
工作原理: DMA是一種數據傳輸方式,允許外部設備(如硬盤控制器、網絡接口等)直接訪問系統內存,而不需要CPU的直接干預。DMA控制器獲得系統總線的控制權,通過將數據直接從外部設備傳輸到內存或從內存傳輸到外部設備,從而避免了CPU的中斷和參與,提高了數據傳輸效率。
應用場景: 適用于需要大量數據傳輸或實時數據傳輸的場景,比如高速網絡數據包處理、高性能存儲設備等。DMA通常用于設備之間的數據傳輸,而不涉及CPU直接處理數據。
mmap
工作原理: mmap是一種內存映射技術,允許將文件或其他對象映射到進程的地址空間中。這樣,進程可以直接通過訪問內存來讀寫文件內容,而不需要通過傳統的文件I/O調用。mmap允許文件數據在內存中進行緩存和訪問,提高了文件訪問速度。
應用場景: 主要用于文件I/O,可以加速對文件的訪問。在許多情況下,將文件映射到內存中可以提高讀寫文件的效率,并允許以更直接的方式處理文件數據。