USB设备的插入检测

2023-05-16

 

1.USB的插入检测机制:USB端口的D+和D-均用一个15k的电阻接地,当无设备接入时,均处于低电平;在设备端在D+(表示高速设备或者全速设备)或者D-(表示低速设备)接了一个1.5k的上拉电阻到+3.3v,一旦将设备接入,USB端口的D+或者D-其中一个被拉高为3v,系统识别到外部设备接入。

注意:高速设备首先会被识别为全速设备,然后再通过集线器和设备二者的确认最后切换到高速模式下。

在高速模式下,采用的是电流传输模式,这个时候上拉电阻需要从D+上断开。

2.当设备没有枚举成功时(可以通过一个10K的电阻将USB的电源端和D+或者D-连接起来,电脑会发现一个无法识别的设备,这个设备的PID和VID都是0,根据每个特性可以简单的判定设备的枚举是否成功。

3.一个具体的USB实现什么功能,USB主机并不知道。USB主机通过读取USB的设备描述符来获取设备的类型、厂商的ID和产品的ID(通常依靠它们来加载对应的驱动程序)、端点情况、版本号等众多信息。

4.USB1.1协议定义的标准描述符有设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)和字符串描述符(String Descriptor)。

USB2.0相比于USB1.1新增加的两个描述符:限定符描述符(Qualifier Descriptor)和其他速度配置描述符(Other Speed Configuration Descriptor)。

5.一个USB设备只有一个设备描述符。

设备描述符里面决定了该设备有多少种配置,每种配置都有一个配置描述符;

而在每个配置描述符中又定义了该配置有多少个接口,每个接口都有一个接口描述符;

在接口描述符里面又定义了该接口有多少个端点,每个端点都有一个端点描述符,端点描述符定了端点的大小、类型等。

如果有类特殊描述符,它跟在相应的接口描述符之后。

注意:USB主机获取描述符时,从上到下逐层获取。对于字符串描述符,USB主机是单独获取的,主机通过发送获取字符串中描述符的请求以及描述符的索引号、语言ID来获取对应的字符串描述符。

6.设备描述符:设备所使用的USB协议版本号、设备类型、端点0的最大包大小、厂商ID(VID)和产品ID(PID)、设备版本号、厂商字符串索引、产品字符串索引、设备序列号索引、可能的配置数等。

配置描述符:记录配置所包含的接口数、配置的编号、供电方式、是否支持远程唤醒、电流需求量等。

接口描述符:记录接口的编号、接口的端点数、接口所使用的类、子类、协议等。

端点描述符:端点号及方向、端点的传输类型、最大包长度、查询时间间隔等。

字符串描述符:提供一些方便人们阅读的信息,它不是必需的。

7.与USB设备进行通信时需要的地址:设备的地址和端点的地址。配置和接口是为了更加方便的管理端点抽象出来的概念。一个设备可以有多个配置,但是一个时刻只能有一个配置有效;每个配置下又可以有多个接口,一个接口下面可以有多个端点。

8.具有多个接口,并由接口来实现功能的设备叫做USB复合设备。例如一个USB音频设备,它具有一个音频控制接口,另外还有一个到多个音频流或者MIDI流接口。在主机端会把USB复合设备的每个接口当做一个功能设备来看待,常见的USB鼠标,U盘等通常是单一的设备,即一个设备下只有一个配置描述符、一个接口描述符。

 

转自:https://blog.csdn.net/laoniu_c/article/details/17801027

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

USB设备的插入检测 的相关文章

  • Java USB 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有好的 Java USB API 我可以使用 我尝试过JUSB 但似乎不起作用 它也很旧 自 20
  • 对 USB 传输电缆进行编程/与 USB 设备驱动程序通信

    如何以编程方式访问 USB 传输电缆 例如 Belkin 的易传输电缆 http www belkin com easytransfercable 从Windows 我熟悉libusb win32 http libusb win32 sou
  • macOS下如何查找串口的父USB设备?

    以下是我尝试枚举 Mac 上找到的所有串行端口 并遍历设备节点树以查找 USB 串行适配器的父 USB 设备的方法 import
  • 在 Mac OSX 下检测连接的 USB 设备

    首先声明 对于 Mac 编程 我是一个新手 然而 我有一项任务需要与设备进行 USB 通信 所以我想我将从基本的东西开始 我从here https developer apple com library mac samplecode USB
  • 使用 DeviceWatcher 监视 USB 驱动器并检索设备信息?

    I m a WinForms开发人员和我已经知道如何使用 WMI 监视连接或断开连接的 USB 但不久前我发现了设备观察者 http msdn microsoft com en us library windows devices enum
  • 软件和与外部设备串行通信的波特率限制

    我使用 USB 端口作为虚拟 COM 端口运行 以使用 MATLAB 或 Visual Basic 6 实现与外部设备的串行通信 我面临波特率限制 具体取决于我用于与设备通信的软件 MATLAB 2018a 没有问题 因为它可以设置高波特率
  • 使用 C# 向 USB 连接的 GPRS 调制解调器发送 AT 命令

    任何人都可以给我一个关于如何访问连接到 USB 端口的 GPRS 调制解调器的良好指示或指南 我应该为我的程序制作一个 USB 驱动程序以将 AT 命令发送到调制解调器吗 或者就像一个路由器 我可以使用IP地址访问它 谢谢 如果 Windo
  • 使用 python 检测 Windows 10 上的 USB 设备插入

    我无法获取以下代码检测USB设备插入 http timgolden me uk python win32 how do i detect device insertion html在我的 Windows 10 64 位 计算机上使用 Pyt
  • 如何在没有窗口句柄的情况下使用 RegisterDeviceNotification?

    我正在编写一个 DLL 库 该库使用 VB NET 中的 winusb 连接到 USB 设备 由于它是一个 DLL 所以我没有窗口 而且我的库的用户也可能没有窗口 例如命令行应用程序 我见过的检测设备连接和分离的示例都使用RegisterD
  • 通过Android USB主机与智能卡读卡器通信

    我正在尝试向智能卡发送命令 我用一个金雅拓 IDBridge CT30 PC TWIN 读卡器 http www smartcardfocus com images content GEMTR jpg and a ID桥K30 http c
  • 如何对 USB/HID/蓝牙适配器进行逆向工程。使用什么工具?

    需要对蓝牙USB鼠标适配器进行逆向工程 并使用鼠标板测量距离 并用绘图库 http matplotlib org 我发现这些工具可以帮助完成此任务 Linux lsusb usbmon usbhid转储 rfcomm hidrd 转换 xx
  • 使用自定义 INF 的微控制器的 USB 驱动程序安装问题

    我正在使用 NXP LPC1788 微控制器 并尝试在主机上创建一个驱动程序以通过 USB 与其进行通信 我相信我已经设法让设备正确处理标准 USB 请求 PC 能够正确读取字符串描述符 不过 我在编写示例 USB 驱动程序并为设备安装它时
  • Windows 8.1 上的 Pyusb - 没有可用的后端 - 如何安装 libusb?

    使用 pyinstaller 3 1 python 2 7 9 和 tkinter 尝试使用 pyusb 而不是 pyserial 但没有可用的后端 调查Windows 上的 Pyusb 没有可用的后端 https stackoverflo
  • 我无法找到 libftdi 的 mpsse (SPI) 模式的示例代码

    这不是一个家庭作业问题 尽管这是一个工作问题 几个月前 我刚写完一份规范 老板就会把它外包出去 因为资金紧张 所以我正在尝试自己做这件事 我是一个很弱的 C 编码员 如果 gcc 能输出一些运行时不会出现段错误的东西 或者有时根本没有任何东
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 适用于 Android 的 USB 主机

    I am trying to communicate with my freeduino board which is similar to arduino uno via usb through android device nexus
  • 我可以从哪里开始使用可编程硬件?

    一段时间以来 我一直渴望至少学习一点有关硬件编程的知识 并想在这里提出要求以获得一些起点 我是一位相当有成就的程序员 具有 Delphi 和 Objective c 经验 但从未听过设备端口 中断 我什至不知道术语 更不用说对硬件进行编程了
  • 在 Linux (libusb-1.0) 上访问 USB 设备?

    我正在编写一个小程序 使用 Linux 上的 libusb 1 0 与特定 USB HID 产品 由供应商和产品 ID 标识 进行通信 现在 我必须以 root 身份运行该程序 因为 libusb 需要对 USB 设备节点的写访问权限 有没
  • libusb 和轮询/选择

    我正在使用 Linux 操作系统 想知道是否有任何文件描述符可以轮询 选择 当数据等待从 USB 设备读取时会触发这些文件描述符 我也在使用 libusb 库 但尚未找到可以使用的文件描述符 Use libusb 的轮询函数 http li
  • Python:获取USB闪存驱动器设备的名称[windows]

    我正在尝试编写一个小程序 它将能够读取有关 REMOVEABLE DEVICE USB 的一些信息 我试过了pyusb https github com walac pyusb但我无法提取我需要的数据 我想从系统中读取 USB 设备的名称

随机推荐

  • [Linux] CentOS7安装Chrome后yum不可以使用的解决方法

    症状 xff1a http dl google com linux chrome rpm stable x86 64 repodata repomd xml Errno 14 curl 52 Empty reply from server
  • [Java] 报错 java.lang.IllegalArgumentException: host parameter is null

    因为URL中存在中文字符 xff0c 需要编码 如 http baidu com 文件1 String encodeUrl 61 java span class hljs preprocessor net span span class h
  • Ubuntu 录屏

    GNOME录屏软件 Ubuntu 附带的屏幕录像机 xff0c 当您点击 Ctrl 43 Shift 43 Alt 43 R 时触发 它会自动开始录制整个屏幕 当您再次点击同一热键时 xff0c 截屏将结束并保存 点击录制热键时 xff0c
  • 【Odroid-XU4开发板】【安装Ubuntu18.04】【安装ROS】并读取串口数据的踩坑日记

    Odroid XU4开发板安装Ubuntu18 04安装ROS并读取串口数据的踩坑日记 文章目录 Odroid XU4开发板安装Ubuntu18 04安装ROS并读取串口数据的踩坑日记前言一 系统镜像准备二 烧录软件准备3 装机4 安装ro
  • 消除VS中C6054:可能没有为字符串"XXX"添加字符串零终止符的警告

    常见的是用 strlen 函数统计字符串的长度的时候 下面经常出现波浪线 xff08 即报警告C6054 xff09 xff0c 如下图所示 xff1a 怎么解决去掉这个警告呢 xff1f 64 wowpH 在这之前需要了解一下 strle
  • docker pull下载的image存在什么地方去了

    结论 xff1a 所有放入镜像文件都放在虚拟硬盘文件里面 windows上安装的docker其实本质上还是借助与windows平台的hyper v技术来创建一个linux虚拟机 xff0c 你执行的所有命令其实都是在这个虚拟机里执行的 xf
  • Eclipse CDT初步使用教程

    我用过Source insight和VS xff0c 感觉不顺手就没用了 xff0c 所以也没有深入研究过 xff0c 其他的如Code Blocks xff0c vim xff0c Clion Emacs我也没用过 xff0c 不好做评价
  • eclispe设置断点无效(No source file named)

    最近不知道做了什么操作导致eclipse的断点无效 xff0c 表现为gdb只认相对路径的断点 xff0c 不认绝对路径 xff0c 而eclipse打断点使用的是绝对路径 xff0c 导致无效 xff0c 输出信息是 xff1a No s
  • lemon源码基本概念整理

    1 数据结构 1 1 字符串存储 定义一个x1a的全局变量 xff0c 存放 y文件经过词法分析器分割出来的字符串 span class token keyword struct span s x1 span class token pun
  • lemon源码分析

    基本概念见上篇 lemon源码基本概念整理 1 follow集 对于如下4条产生式 program 61 expr TK SEM expr 61 expr TK IMPL expr expr 61 TK LPAREN expr TK RPA
  • Tcl脚本初步学习

    1 命令 Tcl 是一门基于命令的脚本语言 xff0c 每个命令通过换行符或分好隔开 每条命令都包含一个或多个单词 xff0c 第一个单词是命令名 xff0c 其他单词是命令的参数 xff0c 如 xff1a 命令 命令名 参数 set a
  • SQLite3源码学习(31) WAL日志的锁机制

    1 锁的原理 先来回顾一下回滚日志的文件锁 xff0c 之前的锁是针对数据库文件加锁的 xff0c 有4种类型 xff0c 分别是shared reserverd pending和exclusive 在WAL日志模式下不再使用原来的锁 xf
  • QGC调试px4固件飞控

    文章目录 前言一 开源软件地址二 硬件接线三 无人机调试1 刷固件2 选机架3 校准传感器4 校准遥控器5 飞行模式设置6 电源设置7 查看电机8 试飞 总结 前言 开源无人机调试 xff1a 硬件 xff1a pixhawk 2 4 8
  • CMake 基本使用方法

    1 学习背景 C语言工程使用make来构建工程 xff0c 但是对于大型工程来说文件的依赖关系很复杂 xff0c 手写makefile非常麻烦 xff0c 一般开源代码的构建方式都是使用autotool来配置编译环境和自动生成makefil
  • 嵌入式操作系统学习(3)FreeRTOS的任务调度机制

    1 任务状态 FreeRTOS可以创建多个任务 xff0c 但是对于单核cpu来说 xff0c 在任意给定时间 xff0c 实际上只有一个任务被执行 xff0c 这样就可以把任务分成2个状态 xff0c 即运行状态和非运行状态 当任务处于运
  • GTK+开发环境搭建

    一般讲到GUI程序开发 xff0c 大家都会想到C 43 43 等面向对象的高级语言 xff0c 而认为C语言不能做界面 C语言也可以用来写界面 xff0c GTK 43 就是一个用来写界面的库 xff0c 它本身就是用C语言写的 xff0
  • ▲什么是迭代器?迭代器有什么作用?

    什么是迭代器 xff1f 先说说它是干嘛的吧 xff01 迭代器的作用是用来访问容器 xff08 用来保存元素的数据结构 xff09 中的元素 xff0c 所以使用迭代器 xff0c 我们就可以访问容器中里面的元素 没错 xff01 这和访
  • 【C/C++】面试题:函数指针

    问题1 xff1a 如何把一个类的成员函数赋值给空指针 xff1f 他的回答是 xff1a 函数指针应该加类域 正确 接下来再问 xff0c 如果要赋值给一个没有类域的指针 xff0c 应该怎么办 xff1f 他说 xff1a 不能那样赋值
  • 机器学习环境搭建:GTX970+Ubutnu1404_64bit+TensorFlow(GPU)

    xfeff xfeff TF的GPU版本需要安装CUDA和cuDNN xff0c 而在Ubuntu中安装显卡驱动稍微麻烦一点 下面的安装比较简单 xff1a 1 检查显卡支持情况 https developer nvidia com cud
  • USB设备的插入检测

    1 USB的插入检测机制 xff1a USB端口的D 43 和D 均用一个15k的电阻接地 xff0c 当无设备接入时 xff0c 均处于低电平 xff1b 在设备端在D 43 xff08 表示高速设备或者全速设备 xff09 或者D xf