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

相关推荐
gopher95111 天前
linux驱动开发-中断子系统
linux·运维·驱动开发
gopher95112 天前
linux驱动开发-设备树
linux·驱动开发
三菱-Liu3 天前
三菱变频器以模拟量电流进行频率设定(电流输入)
驱动开发·单片机·嵌入式硬件·硬件工程·制造
三菱-Liu3 天前
三菱FX5U CPU 内置以太网功能
网络·驱动开发·硬件工程·制造·mr
让开,我要吃人了3 天前
OpenHarmony鸿蒙( Beta5.0)摄像头实践开发详解
驱动开发·华为·移动开发·harmonyos·鸿蒙·鸿蒙系统·openharmony
OH五星上将4 天前
如何更换OpenHarmony SDK API 10
驱动开发·嵌入式硬件·sdk·harmonyos·openharmony·鸿蒙开发
OH五星上将6 天前
OpenHarmony(鸿蒙南向开发)——标准系统移植指南(二)Linux内核
linux·驱动开发·嵌入式硬件·移动开发·harmonyos·鸿蒙开发·鸿蒙内核
芊言芊语6 天前
蓝牙驱动开发详解
驱动开发
让开,我要吃人了6 天前
OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解
驱动开发·嵌入式硬件·华为·移动开发·harmonyos·鸿蒙·openharmony
OH五星上将6 天前
OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(二)
驱动开发·移动开发·harmonyos·内存管理·openharmony·鸿蒙内核·鸿蒙移植