USB驅動開發基礎

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,可以加速對文件的訪問。在許多情況下,將文件映射到內存中可以提高讀寫文件的效率,并允許以更直接的方式處理文件數據。

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

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

相關文章

Nginx模塊開發之http過濾器filter

文章目錄 什么是過濾模塊Nginx相關數據結構介紹ngx_module_t的數據結構ngx_http_module_t數據結構ngx_command_s數據結構 相關宏定義filter(過濾器)實現Nginx模塊開發流程Nginx 模塊執行具體實現流程create_loc_confmerge_loc_confpostconfiguration修改…

使用OkHttp庫爬取百度云視頻詳細步驟

目錄 摘要 一、OkHttp庫簡介 二、爬蟲基本概念 三、使用OkHttp庫爬取百度云視頻 1、發送HTTP請求 2、處理響應 3、下載文件 四、可能遇到的問題及解決方案 五、注意事項 總結與建議 摘要 本文將詳細介紹如何使用OkHttp庫爬取百度云視頻。文章首先簡要介紹OkHttp庫和…

【collections】Python中的OrderDict

【collections】Python中的OrderDict 文章目錄 【collections】Python中的OrderDict1. 什么是OrderedDict2. Toy Code 1. 什么是OrderedDict 其實很簡單OrderedDict是Python中一個字典dict的變體,它可以按照元素添加的順序來保持鍵值對(key-value pair&…

GPIO模式詳解:推挽/開漏/浮空/上拉/下拉/施密特(遲滯)輸入

GPIO(General Purpose Input Output)可用于執行數字輸入或輸出功能。典型的應用包括從/向模擬或數字傳感器/設備讀寫數值、驅動LED、為I2C通信驅動時鐘、生成外部組件的觸發、發出中斷等。 文章目錄 1 GPIO簡介2 輸出模式2.1 推挽輸出2.2 開漏輸出 3 輸入模式3.1 高阻態(浮空)、…

推薦一款適合做智慧旅游的前端模板

目錄 前言 一、功能介紹 二、前端技術介紹 三、功能及界面設計介紹 1、數據概覽 2、車輛監控 3、地圖界面 4、其它功能 四、擴展說明 總結 前言 智慧旅游是一種全新的旅游業務模式,它充分利用先進的信息技術,提升旅游體驗,優化旅游管…

【Axure高保真原型】樹形表格

今天和大家分享樹形表格的原型模板,點擊樹的箭頭可以打開或者收起子節點,點擊表格內容,可以選中該行內容實現高亮變色效果,樹形表格是通過中繼器制作的,使用簡單,只需要按要求填寫中繼器表格即可&#xff0…

2023亞太杯數學建模思路 - 案例:粒子群算法

文章目錄 1 什么是粒子群算法?2 舉個例子3 還是一個例子算法流程算法實現建模資料 # 0 賽題思路 (賽題出來以后第一時間在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法? 粒子群算法(Pa…

安防監控視頻融合平臺EasyCVR定制化頁面開發

安防監控EasyCVR視頻匯聚平臺基于云邊端智能協同,支持海量視頻的輕量化接入與匯聚、轉碼與處理、全網智能分發、視頻集中存儲等。安防視頻平臺EasyCVR拓展性強,視頻能力豐富,具體可實現視頻監控直播、視頻輪播、視頻錄像、云存儲、回放與檢索…

ConditionObject介紹(二)

1. Condition的signal方法分析 分為了幾個部分: ● 確保執行signal方法的是持有鎖的線程 ● 脫離Condition的隊列 ● 將Node狀態從-2改為0 ● 將Node添加到AQS隊列 ● 為了避免當前Node無法在AQS隊列正常喚醒做了一些判斷和操作 // 線程掛起后,可以基于…

Centos設置nginx開機自啟動設置

Centos設置nginx開機自啟動設置 要設置CentOS中的Nginx開機自啟動,可以按照以下步驟進行操作: 首先,登錄到CentOS服務器上,并以root用戶或具有sudo權限的用戶身份執行以下命令來安裝Nginx(如果尚未安裝)&a…

字符集合!!!

字符集合!!! 描述 輸入一個字符串,求出該字符串包含的字符集合,按照字母輸入的順序輸出。 數據范圍:輸入的字符串長度滿足 1 \le n \le 100 \1≤n≤100 ,且只包含大小寫字母,區分大小…

中國信息通信研究院產業與規劃研究所校招一面、二面內容

本文介紹2024屆秋招中,中國信息通信研究院的數字孿生智慧城市研究員崗位一面、二面的面試基本情況、提問問題等。 10月投遞了中國信息通信研究院的數字孿生智慧城市研究員崗位,所在部門為數字孿生與城市數字化研究部。目前完成了一面與二面,在…

Django 模型和Admin站點管理(三)

一、定義模型 (1) 創建模型類,必須要繼承自 models.Model from django.db import models# Create your models here. #設計數據庫 #創建模型 class UserModel(models.Model):namemodels.CharField(max_length30) #對應于SQL name varchar(30…

K8s實戰RestartPoliy策略

一、默認策略為Always cmd.yaml apiVersion: v1 kind: Pod metadata:name: myapp-pod labels:app: myapp spec: containers:- name: myapp-container image: busyboxcommand: [sh, -c, echo OK!&& sleep 60]首先我們根據這個yaml創建一個測試的pod 執行命令 kubec…

Vue.observable可以在vue2中給新增的屬性增加響應式

將data中的config數據轉為響應式: data() {return {config: {password1: "YQd^7D1",password2: "YQd^7D2",password3: "YQd^7D3"}}; }, computed: {transformedConfig() {if (this.config) {return Object.keys(this.config).map(k…

C++二維數組中的查找

4. 二維數組中的查找 題目鏈接 牛客網 題目描述 給定一個二維數組,其每一行從左到右遞增排序,從上到下也是遞增排序。給定一個數,判斷這個數是否在該二維數組中。 Consider the following matrix: [[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[1…

深度之眼Paper帶讀筆記GNN.08.GCN(下)

文章目錄 前言細節四:卷積核介紹圖卷積核初代目圖卷積核二代目契比雪夫多項式例子小結 GCN公式推導 實驗設置和結果分析數據集節點分類任務消息傳遞方式比較運行效率 總結關鍵點創新點啟發點 代碼復現train.pyutil.pymodel.pylayer.py 作業 前言 本課程來自深度之眼…

基于單片機直流電機調速(proteus仿真+源程序)

一、系統方案 1、本設計采用這51單片機作為主控器。 2、轉速值送到液晶1602顯示。 3、按鍵設加減速,開始暫停、正反轉。 二、硬件設計 原理圖如下: 三、單片機軟件設計 1、首先是系統初始化 en0; rw0; write_com(0x01); //lcd初始化 write_com(0x38)…

CQ 社區版 V2.6.0 發布 | SQL閃回、權限看板、新增數據源人大金倉等

前言 HELLO,大家好,又到了 CloudQuery 社區版發版時間!本次更新版本為 v2.6.0,亮點多多,我們直入主題一起來看! 一、本期亮點 新增 3 種數據源支持 V2.6.0,新增三種國產數據源支持&#xff…

cocos2dx ??Animate3D (一)

3D相關的動畫都是繼承Grid3DAction 本質上是用GirdBase進行創建動畫的小塊。 Shaky3D 晃動特效 // 持續時間(時間過后不會回到原來的樣子) // 整個屏幕被分成幾行幾列 // 晃動的范圍 // z軸是否晃動 static Shaky3D* create(float initWithDuration, const Size& …