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,可以加速对文件的访问。在许多情况下,将文件映射到内存中可以提高读写文件的效率,并允许以更直接的方式处理文件数据。

相关推荐
程序员JerrySUN2 天前
Linux UART 驱动开发全解析:从原理到实战
linux·运维·驱动开发
林政硕(Cohen0415)2 天前
Linux驱动开发进阶(三)- 热插拔机制
linux·驱动开发·热插拔
sukalot2 天前
Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十一)
windows·驱动开发
小麦嵌入式2 天前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
触角010100012 天前
STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
sukalot2 天前
Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(三)
windows·驱动开发
星星点灯5083 天前
盛铂科技FlexDDS-NG:12通道相位连续DDS信号发生器,400MHz高频输出赋能量子光学与超冷原子研究
驱动开发·科技·测试工具·量子计算·模块测试·射频工程
小麦嵌入式4 天前
Linux驱动开发实战(九):Linux内核pinctrl_map详解与优势分析
linux·c语言·汇编·驱动开发·stm32·嵌入式硬件·硬件工程
触角010100015 天前
MPU6050模块详解:从原理到STM32驱动指南(上) | 零基础入门STM32第八十九步
驱动开发·stm32·单片机·嵌入式硬件·物联网
VermouthSp5 天前
Linux驱动开发 块设备
linux·驱动开发