android usb2.0 协议基础(2)

2.4 USB逻辑部件

USB 逻辑部件

设备---》 接口 (一个或多个):用于描述特定功能,包含多个端点----》端点(一个或多个): 传输的最终对象端点号,传输类型传输方向,最大的数据长度....

3-USB 设备

3.1-USB 设备供电方式
USB设备有两种供电方式:

  • 自供电设备:设备从外部电源获取工作电压
  • 总线供电设备: 设备从VBUS(5v)取点

对总线供电设备,区分低功耗和高功耗USB设备。
低功耗设备是最大功耗不超过100mA。
高功耗设备是枚举时最大功耗不超过100mA,枚举完成配置结束后功耗不超过500mA。
设备在枚举工程中,通过配置描述符来向主机报告它的供电方式和功耗要求的。

USB full/high, low

没有设备连上主机时,主机的D+和D-都在低电平(SE0状态),当SE0状态 持续一段时间了,就被主机认为是断开状态。
当设备连上主机时,主机检测到某一数据线电平拉高并持续一段时间,就认为有设备连上来了。主机必须在复位设备前,立即采样总线状态来判断设备的速度。

3.2-USB 设备状态
USB设备有插入、供电、初始化、分配地址、配置和挂起六中状态,其状态转移图如下。

设备状态

3.3-USB 枚举过程


USB 设备连接到主机或从主机上拔出时,主机通过枚举(Enumeration)过程来识别和管理设备。当一个设备连接到一个供电的端口时,将会有下列过程:

1.------ 检测电压变化,报告主机:USB 设备上电后,HUB 检测到有电压变化,将利用自己的中断端点将信息反馈给主控制器有设备连接。

主机了解连接设备:主机在知道有设备接入后会发送一个 Get_Port_Status 请求(request)给 hub 以了解此次状态改变的确切含义。

Hub 检测所插入的设备是高速还是低速:hub 通过检测 USB 总线空闲(Idle)时差分线的高低电压来判断所连接设备的速度类型,当 host 发来 Get_Port_Status 请求时,hub 就可以将此设备的速度类型信息回复给 host。USB 2.0 规范要求速度检测要先于复位(Reset)操作。

2.------hub 复位设备:主机一旦得知新设备已连上以后,它至少等待 100ms 以使得插入操作的完成以及设备电源稳定工作。然后主机控制器就向 hub 发出一个Set_Port_Feature 请求让hub 复位其管理的端口(刚才设备插上的端口)。hub 通过驱动数据线到复位状态(D+和 D-全为低电平),并持续至少 10ms。当然,hub 不会把这样的复位信号发送给其他已有设备连接的端口,所以其他连在该 hub 上的设备自然看不到复位信号,不受影响。

Host 检测所连接的全速设备是否是支持高速模式:根据 USB 2.0 协议,高速(High Speed)设备在初始时是默认全速(Full Speed )状态运行,所以对于一个支持 USB 2.0 的高速 hub,当它发现它的端口连接的是一个全速设备时,会进行高速检测,看看目前这个设备是否还支持高速传输,如果是,那就切到高速信号模式,否则就一直在全速状态下工作。

Hub 建立设备和主机之间的信息通道:主机不停地向 hub 发送 Get_Port_Status 请求,以查询设备是否复位成功。Hub 返回的报告信息中有专门的一位用来标志设备的复位状态。当 hub 撤销了复位信号,设备就处于默认/空闲状态(Default state),准备接收主机发来的请求。设备和主机之间的通信通过址 控制传输,默认地址 0 ,端点号 0 进行。此时,设备能从总线上得到的最大电流是 100mA。

3&4.------ 主机发送 Get_Descriptor 请求 , 获取 设备描述符: :默认管道(Default Pipe)在设备一端来看就是端点 0。主机此时发送的请求是默认地址 0,端点 0。设备描述符的第 8 字节代表设备端点 0 的最大包大小。当完成第一次的控制传输后,系统会要求 hub 对设备进行再一次的复位操作。再次复位的目的是使设备进入一个确定的状态。

**5.------ **主机给设备分配地址:主机控制器通过 Set_Address 请求向设备分配一个唯一的地址。此后,设备进入地址状态(Address state),之后就启用新地址继续与主机通信。
6&7&8. 主机获取 设备的信息:主机再次发送 Get_Descriptor 请求到新地址读取设备描述符。设备描述符内信息包括端点 0 的最大包长度,设备所支持的配置(Configuration)个数,设备类型,VID、PID 等信息。之后主机发送Get_Descriptor 请求,读取配置描述符(Configuration Descriptor),字符串描述符等,逐一了解设备更详细的信息。配置描述符总共为 9 字节。主机在获取到配置描述符后,根据里面的配置集合总长度,再获取配置集合。配置集合包括配置描述符,接口描述符,端点描述符等。如果有字符串描述符,还要获取字符串描述符。另外 HID 设备还有HID 描述符等。

主机给设备挂载驱动(复合设备除外):主机通过解析描述符后对设备有足够的了解,会选择一个最合适的驱动给设备。 然后调用设备模型提供的接口 device_add 将设备添加到usb 总线的设备列表里,然后 usb 总线会遍历驱动列表里的每个驱动,调用自己的match(usb_device_match)函数查询驱动和连入的设备或接口是否匹配,匹配的话调用device_bind_driver 函数,将控制权交到设备驱动。对于复合设备,通常应该是不同的接口(Interface)配置给不同的驱动,因此,需要等到当设备被配置并把接口使能后才可以把驱动挂载上去。

9.------设备驱动选择一个配置:驱动根据前面设备回复的信息,发送 Set_Configuration 请求来正式确定选择设备的哪个配置(Configuration)作为工作配置。至此,设备处于配置状态(Configured),当然,设备也应该使能它的各个接口(Interface)

上面的过程可以理解:(核心功能就是协商)

Device:12 01 0100....Device Descriptor
Host:你有几种功能?
Device:09 02 09....Configuration Descriptor
Host:每个功能有几个接口?
Device:09 04 00....Interface Descriptor
Host:每个接口使用哪几个端点?
Device:06 05 82....Endpoint Descriptor
Host:好了,我知道你是谁了,开始传输设备吧!
Device:OK,Read Go!

3.4-USB 描述符


每种描述符的第一个字节描述该描述符包含的字节数目,第二个节描述该描述的类型。
3.4.1 Device Descriptor

3.4.2 Configuration Descriptor

3.4.3 Interface Descriptor

3.4.4 Endpoint Descriptor

3.4.5 String Descriptor


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设备通过GB28181注册到EasyCVR,平台看不到设备信息的排查方法汇总

智慧安防平台EasyCVR能在复杂的网络环境中(专网、局域网、广域网、VPN、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台支持设备通过4G、5G、WIFI、有线等方式进行视频流的接入与传输,支持的接入协议包括&#xff1…

大数据开发之Spark(RDD弹性分布式数据集)

第 1 章:rdd概述 1.1 什么是rdd rdd(resilient distributed dataset)叫做弹性分布式数据集,是spark中最基本的数据抽象。 代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.1…

Zabbix 微信与钉钉告警配置部署

Zabbix 微信与钉钉告警配置部署 系统环境准备好: Lnmp zabbix-server:172.20.26.167 Mysql主从zabbix-agent:172.20.26.198、172.20.26.24 zabbix的安装部署可以查阅之前的文章:Zabbix 4.0安装部署自动发现及自动注册、自动添…

huggingface学习|云服务器部署Grounded-Segment-Anything:bug总会一个一个一个一个又一个的解决的

文章目录 一、环境部署(一)模型下载(二)环境配置(三)库的安装 二、运行(一) 运行grounding_dino_demo.py文件(二)运行grounded_sam_demo.py文件(三…

2023年第十六届中国系统架构师大会(SACC2023):核心内容与学习收获(附大会核心PPT下载)

大会以“数字转型 架构演进”为主题,聚焦系统架构在数字化转型中的演进和应用。 与往届相比,本届大会最大的变化是从原来的大会演讲模式变革为专题研讨会模式。专题研讨会主题内容紧扣行业落地实践痛点与难点,多角度聚焦行业的架构演进之路。…

Python requests网络库源码分析(第三篇:通过学习异常模块,了解http协议)

前言 作者在requests包下,定义了exceptions模块,该模块中定义执行http请求过程中常见的错误,熟悉这些错误有助于我们写出健壮的业务程序,同时还能温习http的知识点,本文基于的requests版本为2.27.1 exceptions模块&…

关于网络安全 的 ARP欺骗 实验操作

实验设备: Windows server 2008 kali 1. vmware--上面菜单栏--虚拟机--设置--网络--NAT 模式 确定靶机与攻击机的连通性(互相能 ping 通) 靶机查看 arp 表(arp -a) 查看攻击机(kali)物理地址(ip addr&…

SpringBoot整合ElasticSearch实现基础的CRUD操作

本文来说下SpringBoot整合ES实现CRUD操作 文章目录 概述spring-boot-starter-data-elasticsearch项目搭建ES简单的crud操作保存数据修改数据查看数据删除数据 本文小结 概述 SpringBoot支持两种技术和es交互。一种的jest,还有一种就是SpringData-ElasticSearch。根据…

Modern C++ 一个例子学习条件变量

目录 问题程序 施魔法让BUG浮出水面 条件变量注意事项 修改程序 问题程序 今天无意中看到一篇帖子,关于条件变量的,不过仔细看看发现它并达不到原本的目的。 程序如下,读者可以先想想他的本意,以及有没有问题: #…

Zabbix分布式监控系统

实验过程 ps: 阿里云盘Xnode1获取 xnode1 https://www.alipan.com/s/HgLXfoeBWG2 提取码: eb70 1、xnode1克隆两台虚拟机并修改ip zabbix-server192.168.224.3 zabbix-agent192.168.224.4 2、修改主机名 [rootlocalhost ~]# hostnamectl set-hostname zabbix-se…

Vue开始封装全局防抖和节流函数

封装文件 封装文件的实现思路如下: 首先,我们需要定义两个函数:防抖函数和节流函数。这两个函数的目的是为了减少频繁触发某个事件导致的性能问题;防抖函数的实现思路是创建一个计时器变量,用于延迟执行函数。当触发…

Spring Boot 初始(快速搭建 Spring Boot 应用环境)

提示: ① 通过下面的简介可以快速的搭建一个可以运行的 Spring Boot 应用(估计也就2分钟吧),可以简单的了解运行的过程。 ② 建议还是有一点 Spring 和 SpringMVC的基础(其实搭建一个 Spring Boot 环境不需要也没有关系…

uniapp中打包Andiord app,在真机调试时地图以及定位功能可以正常使用,打包成app后失效问题(高德地图)

踩坑uniapp中打包Andiord app,在真机调试时地图以及定位功能可以正常使用,打包成app后失效问题_uniapp真机调试高德地图正常 打包apk高德地图就不加载-CSDN博客 问题: 目前两个项目,一个项目是从另一个项目里面分割出来的一整套…

AI 赋能绿色制冷,香港岭南大学开发 DEMMFL 模型进行建筑冷负荷预测

近年来,城市化进程加速所带来的碳排放量骤增,已经严重威胁到了全球环境。多个国家均已给出了「碳达峰,碳中和」的明确时间点,一场覆盖全球、全行业的「绿色革命」已经拉开序幕。在一众行业中,建筑是当之无愧的能耗大户…

初识node.js(使用)

文章目录 项目目录介绍和运行流程1.index.html&#x1f447;2.整个项目的核心入口文件其实是main.js3.App.vue 组件化开发 和 根组件普通组件的注册1.局部注册2.全局注册 综合案例 项目目录介绍和运行流程 1.index.html&#x1f447; <!DOCTYPE html> <html lang&quo…

宠物互联网医院系统

在数字时代&#xff0c;宠物医疗迎来了一场革新&#xff0c;动物互联网医院系统以其先进的技术和智能的特性成为宠物护理的领军者。本文将介绍宠物互联网医院系统的一些关键技术和代码示例&#xff0c;揭示这一科技奇迹的实现原理。 1. 远程医疗服务的实现 远程医疗服务是宠…

国标GB28181协议EasyCVR启动失败报错“Local Machine Check Error”的解决方法

国标GB28181安防监控系统EasyCVR平台采用了开放式的网络结构&#xff0c;可支持4G、5G、WiFi、有线等方式进行视频的接入与传输、处理和分发。安防视频监控平台EasyCVR还能支持GIS电子地图模式&#xff0c;基于监控摄像头的经纬度地理位置信息&#xff0c;将场景中的整体安防布…

当pytest遇上poium会擦出什么火花

当pytest遇上poium会擦出什么火花 首先&#xff0c;创建一个test_sample/test_demo.py 文件&#xff0c;写入下面三行代码。 def test_bing(page):page.get("https://www.bing.com")assert page.get_title "必应"不要问题 page 从哪里来&#xff0c;打开…

浅谈DNS的工作原理及其作用

DNS&#xff0c;全称为Domain Name System&#xff0c;即域名系统&#xff0c;是一种用于将域名和IP地址相互映射的分布式数据库系统。它将可读的域名转换为对应的IP地址&#xff0c;使得用户可以更方便地通过域名来访问网络上的资源。今天锐成就简单探讨一下DNS的工作原理及其…

数据采集与预处理02 :网络爬虫实战

数据采集与预处理02 &#xff1a;网络爬虫实战 爬虫基本知识 1 HTTP的理解 URL uniform resource locator. 是统一资源定位符&#xff0c;URI identifier是统一资源标识符。几乎所有的URI都是URL。 URL前部一般可以看到是HTTP还是HTTPS&#xff0c; 这是访问资源需要的协议…