USB学习——12、usb初始化和插拔驱动软件流程大致框架描述

embedded/2024/9/23 4:37:42/

usb初始化和插拔驱动软件流程大致框架描述:
当设备启动时,usb的主机控制器设备驱动(HCD)和 usb的root hub会先初始化:
1、xhci-plat.c主机控制器驱动那里,__usb_creat_hcd创建usb主机数据结构,main_hcd(primary_hcd)和shared_hcd,前者usb2.0,后者usb3.0,然后通过usb_add_hcd添加一个新的主机设备
2、hcd.c那里会注册一个 root hub ,usb_add_hcd来使用它, register_root_hub,然后会添加一个新设备roothub, 通过usb_new_device和device_add
3、hub.c那里会初始化hub通用驱动(usb_hub_init),并注册usb hub驱动,通过 usb_register_driver 和 driver_register
4、之后hub_probe开始,hub_event 和 hub_configure ,hub的端口上有事件时去处理事件读取配置usb设备接口的描述符等配置,hub控制传输,hub状态变化,hub中断,hub port状态变化,
5、然后有事件产生的话,会产生xhci中断,usb_hcd_irq, xhci_handle_event, handle_port_status
6、判断port状态是否有变化,设置hub轮询标志,轮询hub的状态,usb_hcd_poll_rh_status,port有变化时回调到hub_irq
7、然后hub事件通过hub_event处理,遍历port,port上有设备时,使用hub_port_connect处理
8、port上有设备,就通过usb_new_device添加设备
9、然后读取设备描述符,枚举设备
10、device_add添加新设备,设置配置,遍历usb设备接口,使用对应接口的驱动,
11、然后起接口驱动的probe,之后跑udc驱动绑定设备和驱动,然后枚举具体的设备成功

主机控制器驱动那里创建注册主机设备roothub并添加到usb设备中——》hub驱动那里初始化并注册hub驱动——》读取hub事件和hub接口配置——》主机控制器那里在轮询hub的状态——》port状态有事件变化时,有主机中断产生——》hub驱动那里处理中断,并对port事件做处理,连接设备——》port上有设备时添加它到usb设备中——》读取设备描述符并枚举设备——》添加新设备,设置config,遍历此usb设备接口——》使用对应接口驱动——》UDC驱动那里绑定gadget设备和驱动——》设备枚举成功

传输类型:

  • 控制传输(Control Transaction)
    控制传输用于配置设备、获取设备信息、发送命令到设备、获取设备的状态。每个USB设备都有端点0的控制端点,当USB设备插入到USB主机拓扑网络中时,USB主机就通过端点0与USB设备通信,对USB设备进行配置,便于后续的数据传输。USB协议保证控制传输有足够的带宽。控制传输可靠,时间有保证,但传输的数据量不大。如USB设备的枚举过程就采用的是控制传输。
  • 中断传输(Interrupt Transaction)
    当USB主机请求USB设备传输数据时,中断传输以一个固定的速率传送少量的数据。中断端点的数据传输方式为中断传输,数据传输可靠,实时性高,这里的中断并不是USB设备产生中断,而是USB主机每隔一个固定的时间主动查询USB设备是否有数据要传输,以轮询的方式提高实时性。如USB鼠标采用的是中断传输。
  • 批量传输(Bulk Transaction)
    批量传输用于传输大量数据。USB协议不保证这些数据传输可以在特定的时间内完成,但保证数据的准确性。如果总线上的带宽不足以发送整个批量包,则将数据拆分为多个包传输。批量传输数据可靠,但实时性较低。如USB硬盘、打印机等设备就采用的是批量传输方式。
  • 等时传输(Isochronous Transaction)
    等时传输也可以传输大量数据,但数据的可靠性无法保证。采用等时传输的USB设备更加注重保持一个恒定的数据传输速度,对数据的可靠性要求不高。如USB摄像头就使用的是等时传输方式。

设备驱动大致框架:

dwc3设备节点具体属性信息可参考Documentation/devicetree/bindings/usb/dwc3.txt文档
1、drivers/usb/dwc3/:主要初始化和CPU紧密相关的内容,如时钟、复位、电源、extcon(用于USB模式切换)
2、drivers/usb/dwc3/core.c:这部分和USB3.0控制器密切相关,如USB3.0控制器内部寄存器地址、USB3.0的PHY、中断等
3、struct dwc3是USB3.0 OTG控制器的核心数据结构,所有工作都围绕此数据结构展开
4、USB控制器作为Host时,称为USB主机控制器,使用USB主机控制器驱动。USB控制器作为Device时,称为USB设备控制器,使用UDC(usb device controller)驱动,USB控制器作为Device时,驱动框架可分为5层:
《1》最上层的是Gadget Function驱动:drivers/usb/gadget/function/:代表了具体设备的驱动,如大容量存储设备驱动(U盘、移动硬盘等)、通讯类设备驱动(USB串口、USB虚拟网卡等)、UAC驱动(USB麦克风、USB声卡等USB音频类设备)
《2》接下来是Gadget Funcation API层:drivers/usb/gadget/function.c,该层是一个抽象层,向上和向下提供统一的API,屏蔽了差异,提高了驱动的兼容性
《3》Composite层是一个可选的中间层:drivers/usb/gadget/configfs.c,composite.c,可通过一种配置或多种配置高效的支持多种功能的设备,简化了USB复合设备驱动的开发。目前最流行的是使用基于Composite和configfs实现的USB gadget configfs,可在用户空间灵活的配置USB设备。
《4》UDC驱动:drivers/usb/gadget/udc/core.c,直接访问硬件,控制USB设备与USB主机之间的通信
《5》USB设备控制器:通过USB线缆连接USB主机控制器,负责USB数据的发送和接收

5、usb设备控制器(UDC)框架,三部分:
《1》第一部分是UDC驱动核心层,在drivers/usb/gadget/udc/core.c文件中实现,该层是一个兼容层,将USB Function驱动和具体的USB gadget驱动隔离开,抽象了统一的接口和数据结构,向USB Function驱动提供了统一且稳定的接口,同时完成USB Function驱动和USB gadget驱动的匹配。
《2》第二部分是gadget driver层,负责驱动硬件工作,和具体的USB设备控制器硬件相关,dwc3的gadget driver驱动在drivers/usb/dwc3/gadget.c文件中实现。
《3》第三部分是USB设备控制器硬件


http://www.ppmy.cn/embedded/50932.html

相关文章

SNMP学习

文章目录 前言基本介绍端口和网络层特性工作原理应用场景版本总结 前言 SNMP(Simple Network Management Protocol,简单网络管理协议)是一种应用层协议,用于网络管理,允许网络管理员监控和管理网络设备的状态和配置。…

jeecg快速启动(附带本地运行可用版本下载)

版本整理(windows x64位): redis:3.0.504 MYSQL:5.7 Maven:3.9.4(setting文件可下载) Nodejs:v16.20.2(建议不要安装默认路径下,如已安装在c盘,运行yarn报…

AJAX中get和post的区别

在AJAX(Asynchronous JavaScript and XML)中,GET 和 POST 是两种常用的HTTP请求方法,它们之间存在一些关键的区别。以下是这些区别的主要点: 请求的目的: GET:通常用于从服务器检索(…

涉密文件当废品卖,涉密文件如何安全便捷销毁?

前几天,一位大爷在废品收购站买到四本涉及军事的涉密文件登上热搜,此事源于相关工作人员没有按照涉密文件销毁流程,缺乏保密意识,将200余本涉密资料当做废品出售,导致涉密信息在外部曝光。 无论是在企业内部还是在机关…

Flutter 实现软鼠标

文章目录 前言一、如何实现?1、记录鼠标偏移2、MouseRegion获取偏移3、Transform移动图标 二、完整代码三、使用示例总结 前言 flutter在嵌入式系统中运行时,有可能遇到drm鼠标无法使用的情况,但鼠标事件却可以正常接收,此时如果…

C#.net6.0语言+前端Vue,Ant-Design开发的智慧医院手术室麻醉管理平台源码 什么是手术麻醉临床信息管理系统?

C#.net6.0语言前端Vue,Ant-Design开发的智慧医院手术室麻醉管理平台源码 什么是手术麻醉临床信息管理系统? 手术麻醉临床信息管理系统涵盖了手术进程管理、自动排班、手术记录、术前评估与麻醉记录等功能,强调了系统如何通过技术架构和数据集成提高工作…

HTML5的未来:掌握最新技术,打造炫酷网页体验

引言 随着互联网技术的飞速发展,HTML5已经成为构建现代网页和应用的核心技术之一。HTML5不仅提供了丰富的语义化标签,还引入了多项前沿技术,使得网页体验更加丰富多彩。本文将探讨HTML5的最新技术,并结合行业实践,提供…

Linux系统编程——网络编程

目录 一、对于Socket、TCP/UDP、端口号的认知: 1.1 什么是Socket: 1.2 TCP/UDP对比: 1.3 端口号的作用: 二、字节序 2.1 字节序相关概念: 2.2 为什么会有字节序: 2.3 主机字节序转换成网络字节序函数…