usb子系统分析2(usb设备识别过程)

USB DEBUG方法及USB眼图测试 usb识别、usb眼图测试、lsusb工具等 阅读详情

在这里插入图片描述
问题一:USB总线驱动是USB控制器的驱动程序,那控制器是如何识别usb设备?识别后,如何为该设备匹配驱动?匹配驱动后,app是如何访问该usb设备的?

  1. 识别USB设备
    1.1 USB设备插入时,D+ 或者D-会被拉高,从而使USB控制器产生usb_irq中断,中断会唤醒hub_thread线程,线程中调用hub_events
    在这里插入图片描述
    1.2 连接usb设备:hub_events->hub_port_connect_change
    hub_port_connect_change
    -> usb_alloc_dev // 分配usb设备描述符
    -> choose_devnum // 分配usb地址(最大127)
    -> hub_port_init // 初始化端口,与设备建立连接
    ->hub_set_address(udev); //设置地址,告诉USB设备新的地址编号
        ->usb_get_device_descriptor(udev, 8); //获得USB设备描述符前8个字节
    1.3 建立连接后,注册usb设备,匹配usb驱动
    hub_port_connect_change
      ->usb_new_device 
       ->usb_enumerate_device // 读取描述符并解析
        ->usb_get_configuration(udev);
    ->usb_parse_configuration // 解析
    -> device_add // 回到了熟悉的linux设备驱动模型
    1)把device放入usb_bus_type的dev链表,
    2)从usb_bus_type的driver链表里取出usb_driver,
    3)把usb_interface和usb_driver的id_table比较
    3)如果能匹配,调用usb_driver的probe
    1.4 遗留问题
    1)usb设备插入时,中断是如何触发的?中断处理函数又是如何注册的?
    2)usb设备注册时,是如何匹配驱动的?
    细看device_add的实现
    https://blog.youkuaiyun.com/yiyeguzhou100/article/details/72637948
    3)驱动的probe函数都会做些什么?以鼠标为例分析usb驱动?
    4)驱动probe完成后,app如何访问usb设备?
USB枚举过程及Linux下U盘识别流程 USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))。 USB枚举基本的流程为:用户把USB设备插入USB端口或给系统启动时设备上电 USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,连接着的设备处于上电状态。Hub检测它各个端口数据线上(D+/D-)的电压 在hub端,数据线D+和D-都 阅读详情

相关推荐

XHCI注册过程和设备接入识别

XHCI注册过程xhci_pci_initxhci_init_driverpci_register_driverxhci_pci_probe()函数usb_hcd_pci_probe()函数usb_create_hcd`usb_create_hcd`函数`__usb_create_hcd`函数`usb_add_hcd`函数`hcd_buffer_create()``usb_register_bus()``usb_alloc_dev()`usb_enable_endpoint`register_root_hu

多云转晴,适合debug的博客 5757

简述USB识别过程

<br />主机端的USB集线器监视着它的每个端口的信号线的电压,当USB设备插入主机时,信号线的电平会发生变化,此时主机知道有新设备插入了。<br />  当主机检测到设备的插入后会首选重启这个设备,接着主机发出Get_Port_Status请求来验证设备是否已经重启,设备重启后主机通过检测根信号线的电平状态判断设备的速度。<br />  主机发送第一次Get_Descriptor(wValue字段的高字节为0x01,表示设备描述符)请求取得设备描述符,设备描述符提供了设备的多种信息,包括:设备通讯终端0

babyfans的专栏 3442

USB2.0设备从全速模式到高速模式的识别过程及速率协商

低速驱动器形成一个阻抗为45欧姆(Ohm)的终端电阻,2电阻并联后仍是45欧姆左右的阻抗,所以在hub端看到一个约800mV的电压(45欧姆*17.78mA),这就是Chirp K信号。在hub端,虽然下达了复位信号,并一直驱动着SE0,但USB2.0的高速接收器一直在检测Chirp K(D+位0,D-为1)信号,如果没有看到Chirp K信号,就继续复位操作,直到复位结束,之后就在。的hub,不支持高速操作,那么该hub不理会设备发送的Chirp K信号,之后设备也不会切换到高速模式。

audio usb 1160

USB协议总结 [转]

一 枚举过程: ◆ 用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态。 ◆主机检测设备。 ◆集线器使用中断通道将事件报告给主机。 ◆主机发送Get_Port_Status(读端口状态)请求,以获取更多的设备信息。 ◆集线器检测设备是低速运行还是高速运行,并将此信息送给主机,这是对Get_Port_Status请求的响应。 ◆主机发送Set_Port_Featur

Keivin 6198

USB 速度识别

在 USB host 或者 hub 的每个下行端口(downstream facing port)的 D+ 和 D- 上分别接了一个 15KΩ 的下拉电阻到地,这样,当端口空闲时 (没有设备插入),输入端就被两个下拉电阻拉到了低电平。而在 USB 设备端的上行接口 (upstream facing port),D+ 或者 D- 上接了一个 1.5KΩ 的上拉电阻到 3.3V 电源。

tyustli 3373

Windows环境下ABAQUS、Fortran 编译器及Visual Studio的安装和关联

点击Continue,在随后的弹窗中勾选accept,并点击Customize(注意,在接下来的安装图片中,显示的版本号是2024.2,图片来自于一次失败的安装,懒得再截图了,步骤毫无区别,请见谅)。在下一步中,保持默认选项,之后软件会自动关联到刚才安装到visual studio,随后下一步进行安装(如果电脑中已经安装有其他版本的visual studio,则只保留2022)。在随后的弹窗中,根据指示找到。以防万一,尽量暂时退出所有杀毒软件,关闭防火墙,一般不会有影响,为确保万无一失,可以执行此步。

samurai12的博客 9965

全速USB和高速USB的识别过程分析

注:本文是根据网上的一些资料整理而成。1 前言我们知道USB2.0向下兼容USB1.x,即高速2.0的hub能支持所有的速度类型的设备,而USB1.x的hub不能支持高速设备(High Speed Device)。因此,如果高速设备挂到USB1.x的hub上,那该设备只能工作在全速模式下。不管是hub还是设备(device),对于速度的区分是非常重要的,否则,后续的通信根本无法进行。2 全速和低速U

放飞梦想,成就未来 4万+

从叶片之舞到数据之眼:净空雷达如何重塑风电安全与效率的边界

净空雷达通过激光或毫米波技术实现风机叶片与塔筒间距离的毫米级实时监测,极大提升了风电场在极端天气下的安全性与运营效率。这项技术不仅预防扫塔事故,还通过数据可视化与智能分析赋能叶片健康管理和发电优化,成为风电数字化运维的核心基础设施。

xk7n92h3p5m的博客 1162

Linux内核中识别USB设备过程

1.usb全速模式和高速模式的区别,名字上感觉速度应该差不多?? Usb1.1又是usb2.0全速模式,传输速率只有12Mbps Usb2.0高速模式达到了480mbps 擦类这明显不是一个等级。。。。 2.如何查看插入电脑的usb设备是全速模式还是高速模式?? Linux下使用dmesg命令查看 设备中下查看方法: 插入后直接看打印信息 3.怎么测试的说,电脑下设备是高速的,...

lzs940320的博客 1万+

AUTOSAR Dem模块实战配置:从理论到代码生成的完整指南

本文提供了一份AUTOSAR Dem模块从理论到代码生成的完整实战配置指南。文章详细拆解了配置流程,涵盖Dem模块的核心角色、通用骨架搭建、事件与DTC映射、消抖机制配置,以及与BswM、EcuM、DCM等模块的联调方法,旨在帮助汽车电子工程师快速掌握诊断事件管理的关键配置步骤,生成可运行的代码。

3c4x5z6v7b的博客 455

CORS(跨域资源共享)漏洞解决方法

最近,测试环境上的项目被360测试人员检测出来有一个CORS漏洞,以下记录下漏洞问题与解决方法。 一、低危漏洞:CORS漏洞问题 测试人员访问某个url,将请求头中的Origin字段修改为任意值,结果仍然能获得正确的响应报文,就说明有CORS漏洞。 当CORS的设置不正确时,就会带来安全问题;当响应头中的Access-Control-Allow-Origin设置为null或*时,表示信任任何域,这时候就可能引入安全问题。 修复方法是合理配置CORS,判断Origin是否合法;具体说就是不让在nginx或t

BHSZZY的博客 3万+

USB2.0和USB3.0识别方式

当然,对速度的检测是双向的。因为此时高速设备的1.5k上拉电阻还未撤销,在HUB端,全速/低速驱动器形成一个阻抗为45Ω的终端电阻,两电阻并联后仍是45Ω左右的阻抗,所以在HUB端看到一个约45Ω*17.78Ma=800mV的电压,这就是Chirp K信号。如果只是一个全速HUB,不支持高速操作,那么该HUB不理会设备发送的Chirp K信号,之后设备也不会切换到高速模式。当设备插入HUB或上电时,有上拉电阻的那根数据线就会被拉高,HUB根据D+/D-的电平判断所挂载的是全速设备还是低速设备。

学习、实践、总结 1万+

Centos7.6下安装Zabbix6

一、

Overmaster博客 1906

MMC子系统识别SD设备过程简述

一 :引子–WIFI 模块移植 二 : MMC 识别 SD设备过程 第一步: 注册虚拟总线 第二步: 初始化并挂载设备驱动 第三步:初始化注册主控驱动 第四步:Host驱动的prob() 4.1 mmc_alloc_host 4.2 sunxi_mmc_resource_request() 4.3 mmc->ops = &sunxi_mmc_ops; 4.4 ret = mm...

奶牛养殖场小马 5528

Python爬虫实战:利用Scrapy+Playwright高效爬取TED演讲数据

在当今信息爆炸的时代,TED演讲作为全球知名的思想传播平台,汇聚了各领域顶尖人才的精彩分享。对于数据分析师、研究人员或内容创作者来说,获取TED演讲的完整数据集具有重要价值。本文将详细介绍如何使用Python中最先进的爬虫技术组合——Scrapy框架配合Playwright浏览器自动化工具,高效爬取TED演讲的完整数据。传统爬虫技术在处理现代动态网页时面临诸多挑战,而本文将展示如何利用最新工具解决这些问题。

2201_76125261的博客 206

ESP32-IDF开发之旅 基础篇⑪ ESP-IDF 任务看门狗以及多核任务

本文介绍了ESP-IDF中的任务看门狗(TWDT)和多核任务管理。TWDT用于监控任务是否被挂起,可同时监视双核任务,通过定时喂狗机制检测任务阻塞。文中详细讲解了TWDT的配置方法、订阅流程及示例代码,并演示了如何触发和处理看门狗超时。针对ESP32双核特性,重点介绍了xTaskCreatePinnedToCore函数的使用,说明如何将任务绑定到指定核心(CPU0/CPU1)运行,并提供了多核任务创建的代码示例。这些机制对提高系统稳定性和优化多核性能至关重要。

单片机菜鸟哥的博客 268

USB2.0主机设备检测过程以及信号分析

在这里对速度的检测是双向的,比如高速的hub需要检测所挂上来的设备是高速、全速还是低速,高速的设备需要检测所连上的hub是USB2.0的还是1.x的,如果是前者,就进行一系列动作切到高速模式工作,如果是后者,就以全速模式工作。3.1 由于低速设备D-接有1.5K上拉电阻,当设备接入Hub时,Hub的D-会被拉高,此时Hub会检测到有低速设备接入,而全速和高速设备D+接有1.5K上拉电阻,当USB设备接入USB Hub时,Hub的D+会被拉高,此时Hub会检测到有全速或高速设备接入。

jiangchaobing_2017的博客 3860

【CUDA Runtime】第一个“Hello World“程序

CUDA(Compute Unified Device Architecture)是 NVIDIA 提供的一个并行计算平台和编程模型,旨在通过利用 GPU 的强大计算能力来加速计算密集型应用。对于许多开发者而言,开始学习 CUDA 编程的第一步通常是编写一个简单的“Hello World”程序。尽管 CUDA 的实际应用远远超出一个简单的例子,但这个初步的示例能帮助开发者快速入门,理解基本的 CUDA 编程流程。

m0_62599305的博客 1507

USB子系统学习(三)USB描述符和设备枚举过程

USB子系统学习(三)USB描述符和设备枚举过程

CATTLE_L的博客 1081

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

USB2.0设备检测过程信号分析

这里写自定义目录标题1.简介2.硬件2.1.Low-speed2.2.Full-/High-speed3.信号电平3.1.Low-/Full-speed3.2.High-speed4.检测过程参考资料 1.简介 USB设备接入的Hub端口负责检测USB2.0设备是否存在和确定USB2.0设备的速度。检测设备是否存在和确定设备速度涉及一系列的信号交互,下面将分析该过程。 2.硬件 USB低速设备和全速/高速设备的连接器在硬件结构上有所不同,而主机或者Hub接收端连接器的D+、D-接有15K的下拉电阻。 2.1

非专业业余程序员 5203

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

USB子系统学习笔记(一)

​ USB是Universal Serial Bus的缩写,中文译为通用串行总线,USB出现之前,计算机领域中的接口太多太繁杂,USB出现之后减少了接口的种类,总的来说就是设计出了一个万能的接口,各种外设都能用同一种接口,所以才冠以“通用(是Universal)”为名。​ USB设备,从物理上的逻辑结构来说,包含了主机Host端和设备Device端。​ USB子系统采取主从的通信结构,一切的通信都是由Host端主动发起。

jffhgk的博客 2400

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux电脑USB怎么识别到我插入的设备是什么设备?

不知道大家在学习Linux的时候有没有过这样的疑问,为什么我们通过同一个接口接入的不同USB设备,我们的电脑都可以识别到呢?为什么Linux电脑不会把鼠标识别成键盘呢?带着这些疑问我们一起来看一下USB的识别和加载过程。Linux系统识别USB设备的过程可以分为四个步骤:设备连接、驱动匹配、设备注册和设备访问。当用户将USB设备插入计算机时,内核将通过USB总线来检测设备的插入事件,并尝试查找与设备匹配的驱动程序。一旦找到了匹配的驱动程序,驱动程序将被加载并启动,它将尝试对设备进行初始化,并将其注册到内核。

让技术没有门槛 4514

USB协议-设备识别过程

USB协议 一 枚举过程: ◆ 用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态。 ◆主机检测设备。 ◆集线器使用中断通道将事件报告给主机。 ◆主机发送Get_Port_Status(读端口状态)请求,以获取更多的设备信息。 ◆集线器检测设备是低速运行还是高速运行,并将此信息送给主机,这是对Get_Port_Status请求的响应。 ◆主机发送Set_

hs6662668的专栏 8997

USB2.0电气层信号的表示及速率的识别过程

usb2.0电气层信号的表示及速率识别过程

dmf_fff的博客 4920

USB2.0设备接入断开检测及速度识别

本文旨在结合USB协议、物理层实现、相关波形、说明USB设备接入断开检测及速度识别。目录。

audio usb 3096
上一篇: 虚拟机连接外网(桥接)
下一篇: linux内核中并发与竞态问题
程序员毛毛~
博客等级 码龄11年 46粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值