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

相关推荐
TangDuoduo00055 天前
【Linux SPI驱动开发】
驱动开发
The️5 天前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
FserSuN6 天前
AI编程 - 规范驱动开发(SDD)学习
驱动开发·学习·ai编程
TangDuoduo00056 天前
【Linux I2C设备驱动】
linux·驱动开发
The️6 天前
Linux驱动开发之Open_Close函数
linux·运维·驱动开发·mcu·ubuntu
LCG元6 天前
嵌入式GUI设计:STM32F429+LVGL,智能仪表盘界面开发指南
驱动开发·stm32·嵌入式硬件
小龙报7 天前
【51单片机】 给单片机加 “安全锁”!看门狗 WDT:原理 + 配置 + 复位验证全拆解,让程序稳定不跑飞
驱动开发·stm32·单片机·嵌入式硬件·物联网·51单片机·硬件工程
码农编程录7 天前
【notes12】kbuild,内核模块化,字符设备驱动,设备树,platform总线,设备驱动模型
驱动开发
乔碧萝成都分萝7 天前
二十六、IIO子系统 + SPI子系统 + ICM20608
linux·驱动开发·嵌入式
A星空1237 天前
二、交叉编译工具链(arm-linux-gnueabihf-gcc)安装与验证,搭建 TFTP+NFS 服务,调试开发板网络连通性;
linux·c++·驱动开发·单片机·嵌入式硬件