文章目录
一、主设备与从设备
USB通讯的两端分别成为:HOST(主设备/USB主机)和 Device(从设备/USB设备)
客户软件:负责和usb设备的功能单元进行通信,用于实现特殊功能(分为:界面应用程序和驱动程序)
USB系统软件:负责和usb逻辑设备进行配置通讯,配置主机资源,设置usb参数。根据带宽安排传输,主要由操作系统扶着
USB总线接口:(分为:usb主机控制器和根集线器),主机控制器用于usb和主机之前实际数据的传输,根集线器实现主机和其他usb设备的连接
1. usb主设备功能
- 检测usb设备的插拔动作
- 管理主从通讯之间的控制流
- 管理主从通讯之间的数据流
- 记录主机状态和设备动作信息
- 控制主控制器和USB设备间的电气接口
1. usb设备
1.按功能划分:集线器和功能和功能设备
集线器:
用于扩展USB主机的USB端口
结构上有一个上行端口,多个下行端口
支持级联,系统中最多有5个集线器(不包括主机的根集线器)
支持速度转换
功能设备(U盘,打印机等):
一个独立的外围设备,可以是单一功能也可以是多功能的合成设备
内部包含有猫叔自身功能和资源需求的配置信息
2. USB功能设备
tips:一个设备只有一个设备描述符,配置和接口是抽象概念,端点是实际的物理单元,在使用usb设备前,必须指明使用哪个配置,哪个接口。
2. 主机和usb设备构成的连接通讯系统
在usb系统中,一般usb主机通过集线器(HUB)进行设备扩展,以层次性的星型拓扑结构和物理连接,最多支持7层,最多可以支持127个设备,分配127个地址,除了根集线器之外,最多支持5个集线器相连,usb设备内部有一个集线器(设备=集线器+设备),这种设备被称为复合设备。
主机和usb设备之间通讯物理通道:主设备分配的地址/默认地址0+从设备固有端点号。
主机和usb设备之间时间长度单位:帧 / 微帧。
主机和usb设备之间协议处理基本单位:事务处理
主机和usb设备之间通讯:在基本单元“事务”中,主机总是发起者,并且和设备交互应答方式进行通讯
3. 连接与检测
在usb主机连接usb设备后,不但能自动检测到设备的连接和拔出动作,还会知道联机设备当前的通讯速度。
- usb主机端口在 D+ 和 D- 上都有 1.5 千欧电阻接地
- 低速usb从设备在 D- 上连有 1.5 千欧的电阻到 3.0v-3.6v电压
- 没有连接:主机端口检测到 D+ 和 D- 电压都接地 0v,低速设备连接:主机端口检测到 D- 电压约 3v,D+ 电压接地 0v。
4. 主机连接
- 高速设备先以全速设备结构与主机连接,他们之间左双向检测
- 主机输出总线复位信号期间,usb设备以是否可以产生Chip K信号来表明高速或者全速的身份
- 在 Chip k 信号后,主机是否发生 KJ 序列来表明高速主机身份或者是全速主机身份
- 匹配到高速主机和高速设备后,usb设备断开D+上的1.5千欧的上拉电阻,连接D+/D-上的高速中断电阻,进去默认的高速状态,否则以全速状态通讯。
5. 连接与检测总结
- 设备断开:主机检测到 D+ 和 D- 上近地状态(0v),并持续 2.5 微妙以上。
- 设备连接:主机检测到 D+ 和 D- 上近地状态(3v),并持续 2 微妙以上。
- 低速设备:主机检测到 D-上高电平
- 全速设备:主机检测到 D+ 上高电平(有可能是高速设备)
- 高速设备:主机检测到 D+ 上高电平,然后通过一系列协商握手信号确认双方身份(双向检查)
tips:总线的几种状态
常见的几种状态 | 描述 |
---|---|
正常工作 | 总线上存在周期性SOF包 |
总线复位 | 总线维持SEO状态 > 10 ms |
正常工作 | 总线无活动 > 3ms |
常见的几种变化 | 描述 |
---|---|
无连接 -> 连接 | D+ / D- 上出现高电平 > 2ms |
正常 -> 挂起 | J 状态保持 > 3ms |
挂起 -> 正常(主机主动唤起usb设备/usb设备远程唤起主机) | 出现 K 状态信号并持续一段时间 |
二、枚举过程
1.枚举概念
- 枚举:usb主设备想usb从设备通过获取各种描述符,从而了解设备属性,知道是什么样的设备,并加载对应的 usb 类,功能驱动程序,然后进行后续一系列的数据通信。
特点 - 主设备连接识别从设备必须的过程
- 由多个控制传输构成
- 经过地址 0 (缺省地址)到其他地址(主设备分配地址)的通讯
- 对于挂载多个usb从设备的系统,主设备是注意进行枚举操作
2.枚举过程
- usb设备上电(一般从usb口取电)并连接到usb总线
- 主机检测到总线上有设备连接
- 主机会等待至少100ms用于连接的机械,电器特性稳定
- 主机执行总线复位至少10ms,并得到usb设备通讯速度
- 主机驱动总线空闲至少10ms用于做恢复时间
- 主机发出获取设备描述符请求(缺省地址)
- 主机为从设备分配唯一设备地址,后续通讯用此地址
- 主机以新地址发出获取设备描述符请求
- 主机以新地址发出获取设备描述符请求,获取设备全部配置
- 主机分析获取的描述符信息,并做相应记录和处理
- 主机发送设备配置请求,为从设备选择一个合适的配置
3.概念
- 设备描述符:第一个需要获取的描述符,长度固定18字节。
- 配置描述符:描述了设备特定的配置,提供了当前配置下设备的功能接口,供电方式,耗电等。是一个配置的集合,集合长度不固定,包含了配置描述符,接口描述符,类定义描述符,短点描述符。
三、控制传输
所有的usb设备都必须支持的传输方式,可以分为三种(每种结构都是由不同事物构成):控制写,控制读,
- 是所有usb从设备必须支持的传输方式,固定使用端点0通讯
- 控制传输的方向是双向的,既可以主机下传输给设备,又可以从设备上传数据
- 多用于主设备和从设备进行信息,功能,状态等方面的获取和修改
1.控制写
- 建立阶段:由一个 setup 事物构成
- 数据阶段:由一个/多个 out 事物构成
- 状态阶段:由一个 in 事物构成
2.控制读
- 建立阶段:由一个 setup 事物构成
- 数据阶段:由一个/多个 in 事物构成
- 状态阶段:由一个 out 事物构成
3.无数据控制
- 建立阶段:由一个 setup 事物构成
- 状态阶段:由一个 in 事物构成
4. 阶段特征
阶段 | 事物 | 特征 |
---|---|---|
建立阶段 | Setup事物 | 固定8字节结构数据,中间的数据包的PID为DATA0,应答包必须未ACK |
数据阶段 | 一个或多个连续的in/out事务 | 不是必要阶段,控制读:连续的in事务,控制写:连续的out事务,事务数据包从PID-DATA1开始,然后进行1-0-1-0-… 交替翻转,应答包支持 ACK/NAK/STALL |
状态阶段 | Setup事物 | 数据包长度为0,数据包的PID为DATA1,执行的事物和数据阶段事物相反,没有数据阶段,执行IN事务 |
1.Setup Stage
控制传输中 Setup Stage 部分(Setup事务),主机发出8字节命令请求,格式如下
大小(byte) | 1 | 1 | 2 | 2 | 2 |
---|---|---|---|---|---|
字段 | bRequestType | bRequest | wValue | wIndex | wlength |