当前位置: 首页 > news >正文

《USB技术应用与开发》第二讲:连接和枚举

一、主设备与从设备

1.1主设备

1.1.1主设备结构

 USB通讯的两端分别称为:HOST(主设备/USB主机)和Device(从设备/USB设备),常见的主设备就是计算机。 下图是一个标准的USB主机结构:

(1)功能层:客户软件,负责和USB设备的功能单元进行通讯,用于实现其特殊功能,如传输文件、播放声音等等。一般都是专用的,根据设备的不同而不同,需要开发人员自行编写。它分为USB设备驱动程序界面应用程序两个部分。

①驱动程序:对接USB系统软件,告知USB收发的数据内容,启动一次USB数据传输。
②界面应用程序:是最上层的软件,和驱动程序直接对接,提供可视化操作,可以看到向USB设备发送的原始数据以及从USB设备接收的最终数据。

(2)USB设备层:直接和客户软件对接的USB系统软件,负责和USB逻辑设备进行配置通讯,配置主机资源,设置USB参数,根据带宽安排传输单位队列等工作,这一部分工作主要由操作系统执行,开发人员不必关心。

(3)USB总线接口层:一般包括USB主机控制器和根集线器两个部分。

①主机控制器:用于负责完成主机和USB设备之间数据的实际传输。
②根集线器:实现了主机控制和其他USB设备的连接。    

1.1.2主设备功能

USB主机一般具有以下功能:

  1. 检测USB设备的插拔动作
  2. 管理主从通讯之间的控制流
  3. 管理主从通讯之间的数据流
  4. 记录主机状态和设备动作信息
  5. 控制主控制器和USB设备间的电气接口

以上的结构特征是按照计算机的USB分成结构来描述的,但是在一些单线程运行的嵌入式平台,如单片机,一般不会用到这么复杂的分层交互方式,而且这些平台所连接的USB设备类别往往比较固定,功能单一,完全可以将它的通讯流程进行简单化。

后面的实例中以单线程运行的主机功能进行讲解。

1.2USB设备

1.2.1USB设备分类

集线器的第四个特诊扩展:当不同的速度标准的USB设备同时连接到集线器上,上行端口固定已支持最高速度的标准通讯;而下行端口会和连接的USB设备所支持的速度相匹配。

功能设备补充第三个特征:USB主机只要为该功能设备分配一个USB地址。

1.2.2USB设备内部架构

其中,配置和接口是抽象概念,用来描述USB功能,而端点是实际的物理单元,可以用于进行实际的数据传输。

在使用USB设备之前必须由主机指明采用哪个配置、哪个接口。

USB设备会通过各种的描述符来说明其设备架构中的各种概念属性,有设别描述符、配置描述符、接口描述符、端点描述符、字符串描述符等。

(1)设备

一个设备只会有一个设备描述符,如果是高速设备,它既支持高速传输,又有全速传输,那必须还要支持限定描述符,用于指出另一传输速率下的设备总体信息。

(2)配置

使用USB之前必须选择一个合适的配置,虽然只有一个配置,但是当前只会有一个配置生效,比如高速设备,即支持高速传输又支持全速传输,则必须还要支持其他的速率配置描述符,用于指出另一传输速率下的设备配置信息。

(3)接口

接口属性是用来说明功能特性的,比如一个USB声卡设备,他可以有两个接口,一个是麦克风接口,一个是耳机输入接口,而且多个接口是可以共存的,有几个接口就会有几个接口描述符。

(4)端点

端点是实际的物理单元,USB设备传输就是在USB主机和USB设备的各个端点之间进行的,有多少个端点,就会有多少个端点描述符。

1.3USB主机与设备连接通讯构成的系统

1.3.1星型总线拓扑结构

在USB系统中,一般USB主机通过集线器(HUB)进行 USB设备扩展,以层次性的星型拓扑结构进行物理连接,如下图所示。

主机(Host)是控制器的中心起点,通过集线器(Hub)进行拓展,最多可以支持七层,包括跟层,这种拓扑结构可以支持最多127个USB设备,分配127个地址。每一个USB集线器都是一个USB设备,可以得到一个地址。

在七层设备中除了根集线器以外最多可以支持5层集线器相连,即一个USB功能设备最多可以通过这五个集线器连接到USB主机上。

第六层的设备Hub中既含有集线器又包含设备,这种设备被称为复合设备。

1.3.2通讯软件协议特征

其中第2条中的“帧”用于低速和全速,“微帧”用于高速。

二、连接与检测

在USB接口优势中有一个很明显的特征:支持热插拔。当USB主机连接到USB设备后,他不但能自动检测到设备的连接和拔出动作,而且还会知道所连接设备当前的通讯速度。

2.1连接

2.1.1低速设备

下图中一个低速设备和USB主机连接的一个示意图,已经写的非常详细了,不在赘述。

没有连接就是上节所讲的SE0状态,此时USB主机检测到SE0状态至少维持2.5个毫秒,就认为没有设备连接。

有连接设备时,设备上D-上拉电阻与主机上D-下拉电阻构成分压,所以在D-上会出现3V左右的电压,D+上仍然是 0V,就是上节所讲的差分零。该状态至少维持2.5个毫秒,就认为有设备连接,并且当前设备是一个低速设备。

2.1.2全速设备

 连接后的状态就是差分1,其他不再赘述。

2.1.3高速设备

高速连接比较特别,因为分为高速主机和高速设备,他们之间时一个双向检测,
 

USB高速设备与主机的连接及速度检测过程​
本章节介绍高速设备与主机的连接。高速设备和主机需双向检测速度。高速设备先以全速设备身份与主机相连,主机输出复位信号,设备发切普 k 信号表明高速身份,主机回 k 阶序列表明高速身份,之后设备切换电阻进入高速模式,二者据此决定通讯速度,过程由控制器主动完成 。​
 

USB 主机与设备插拔识别、速度检测及总线状态总结​
本章节总结USB主机和UFC设备插拔识别及速度检测结果,介绍设备断开、连接及不同速度设备检测的电频信号判断。还插入总线状态知识点,包括正常工作(有周期性soft包)、总线复位(用于驱动低震低负到0伏,连接或出错时出现)、总线挂起(总线上空闲超3毫秒,主机停止传输,设备可选择进入挂起) 。

介绍总线上的动作变化,包括从无连接到总线连接(主机检测设备过程略)、从总线正常活动到总线挂起(无传输包且维持 3 毫秒以上)、从总线挂起到正常活动(即唤醒,分主机唤醒设备和设备唤醒主机,以 k 状态信号开始并持续一段时间),之后主设备正常工作,主机控制器下游端口发 soft 包 。

USB通讯之枚举传输阶段介绍​
本章节介绍 USB 通讯环节,分为枚举传输和用户数据通讯两阶段。重点讲述枚举过程,这是设备连接主机后必经历的,主机会借此了解设备信息并启用配置功能。还提到主机检测到设备连接后,会预留 10100 毫秒到 200 毫秒让设备稳定,以防供电后内部未完成上定过程致传输失败 。

USB设备主机枚举流程及相关描述符介绍​
本章节介绍主机对USB设备的枚举步骤,从第四步主机控制器输出复位信号,到第十步主机分析设备信息、加载驱动并设置设备配置。还阐述了枚举中重要的描述符,如设备描述符、配置描述符等,指出它们的作用、长度及获取方式,枚举结束主机识别设备功能结构以进行后续操作 。

USB控制传输的结构、数据包规律及实际通讯讲解
本章节介绍控制传输。控制传输是 USB 设备都需支持的传输,在主机枚举设备中常用。它有控制写、控制读、无数据控制三种结构,各有建立、数据、状态阶段(无数据控制无数据阶段)。还讲解了各阶段的事务构成、数据包类型及交替规律,最后以控制写为例展示实际物理通讯过程

控制传输的阶段结构及特征
本章节介绍控制读控制度,其获取设备描述符分三个阶段,建立阶段 set up 事务发控制请求,数据阶段设备上传数据有三个in 事务,状态阶段 out 事务结束且数据包长为 0。还提到无数据的控制传输仅建立、状态两阶段。总结指出控制传输有三种结构,必有的是建立和状态阶段,数据阶段部分结构才有。
收起
各阶段特征总结,重点讲建立转阶段及数据阶段特点本章节说话人1总结各阶段特征。建立转阶段有固定8字节结构,数据包 PRD 为data 0,应答包为 ACK。数据阶段在控制读和写中,由 in 或 out 事物组成,数据包从 data 1 开始 E0 交替翻转,应答包有三种状态。状态阶段数据包长度为 0,PID 为 data,无数据阶段则启动固定 8 字节 setup 事务。
收起
控制传输setup建立阶段8字节命令请求结构解析本章节详细介绍控制传输 setup 建立阶段的固定 8字节命令请求结构。第一个字节表明请求特性,含传输方向、请求类型、请求对象;第二个字节是主机请求码;第三个字节作请求码参数;第四个字节指明接口号和端点号;最后一个字节表明数据阶段最大字节大小,无数据传输阶段写0,设备应用时需解析此 8字节。
收起

回顾知识点,包括认识 USB 主机和设备的内部分层结构,以及主机连接设备用到的 USB Hub;讲解了主机和设备的连接检测过程;介绍了枚举过程及主机枚举设备的步骤;还学习了控制传输的结构和请求包定义。最后表示如有疑问可留言到指定邮箱。

明天11号写好

二、连接与检测

三、枚举过程

四、控制传输


本文参考:《USB技术应用与开发》第二讲:连接和枚举_哔哩哔哩_bilibili

USB协议分析 - __小火车 - 博客园(其实还没有参考到,但是写的非常好,插一个眼)

相关文章:

  • Python实例题:Python3实现命令行动态进度条
  • WebGPU:前端图形技术的革命性进化与WebGL的未来
  • [ctfshow web入门] web39
  • 深入理解 RxSwift 中的 Driver:用法与实践
  • NI labview数据采集程序
  • wait 和notify ,notifyAll,sleep
  • ecovadis认证有什么好处?ecovadis认证有什么要求 有哪些勋章
  • C++函数签名
  • 工作的意义,在工作以外的地方
  • 从0到1打造一套适合自己接单的脚手架03用户登录注册
  • 触摸屏触摸坐标与画面对齐
  • 前端性能优化核弹级方案:CSS分层渲染+Wasm,首屏提速300%!
  • MySQL:事务的理解
  • Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析
  • 纳米软件矿用电源模块自动化测试方案分享
  • C++中std::allocator基本使用和注意事项
  • powerDesign 逆向 mysql 生成 物理模型,并用VBS脚本整理comment
  • 公司内部建立pypi源
  • 《Vue.js组件化开发实战:从安全纵深到性能跃迁》
  • leetcode刷题日记——三数之和