二、架构、系统、协议和供电
1.USB系统结构
2.USB拓扑结构
- USB总线基于分层的星状拓扑结构
- 以Hub为中心,连接周围设备
- 总线上最多可连接127个设备
- Hub串联数量最多5个
- 线缆长度最长5米
3.USB拓扑结构示例
4.USB逻辑部件
5.USB设备供电方式
1)Two possible power configurations
- Self-powered: power provided from external power-supply
- Bus-powered: power provided from VBUS (5v)
2)对总线供电设备,才区分低功耗和高功耗USB设备之分
For bus-powered device, two options are possible:
- Low-power devices :maximum power consumption is 100mA
- High-power devices :maximum power consumption is 100mA during bus enumeration and 500mA after configuration
3)During device enumeration, the device indicates to host its power configuration (self-powered/bus-powered) and its power consumption in the device configuration descriptor (see slide after)
6.USB配置描述符(以Joystick为例)
Configuration Descriptor
0x09,
/* 描述符的长度: 9字节 */
USB_CONFIGURATION_DESCRIPTOR_TYPE,
/* 描述符的类型: 0x02 配置描述符(Configuration) */
JOYSTICK_SIZ_CONFIG_DESC, 0x00,
/* 完整的描述符包括接口描述符、端点描述符和类描述符的长度 */
0x01,
/* 配置所支持的接口数目: 1*/
0x01,
/* 用SetConofiguration()选择此配置,所指定的配置号: 1*/
0x00,
/* 用于描述此配置的字符描述符的索引号: 0 */
0xE0,
/* 供电配置: B7(1 保留), B6(自供电), B5(远程唤醒), B4-B0(0 保留) */
0x32,
/* 最大功耗,以2mA为单位计算: 0x32表示 50×2 =100mA */
7.USB挂起模式
- USB device should enter in USB Suspend mode when the bus is idle for more than 3 ms 该【USB挂起模式】 是针对USB设备来说的
- In suspend mode, when the device is bus powered , the current drawn from VBUS power shouldn’t exceed 2.5mA
- USB host prevents device from entering in suspend mode by periodically issuing Start of Frame (SOF) or Keep Alive for LS
- For High-speed, SOF is sent every micro-frame 125us +/- 65ns
- For Full-speed, SOF is sent every frame 1ms +/- 500ns
- For Low-speed, Keep Alive (End of Packet) is sent every 1ms in absence of low-speed data
- Exist from Suspend mode can be USB设备要退出【挂起模式】可以由Host唤醒,或者自己唤醒
- Initiated from host by issuing the resume signaling
- Initiated from device by issuing the remote wakeup signaling
8.USB 连接器
1)标准接口/Mini接口
2)Micro接口
9.USB总线信号
USB使用的是差分传输模式,两个数据线D+和D-
- 差分信号1: D+ > VOH (2.8V) and D- < VOL(0.3V)
- 差分信号0: D- > VOH and D+ < VOL
- 复位信号(Reset): D+ and D- < VOL for >= 10ms
- IDLE状态: J 状态
- 恢复信号(Resume): K 状态
- SOP:从IDLE状态切换到K状态
- EOP:持续2位时间的SE0信号,后跟随1位时间的J状态
- SYNC: 3个重复的KJ状态切换,后跟随2位时间的K状态
10.USB设备的插入检测和速度检测
Full/high Speed: Pull-up on D+
Low Speed: Pull-up on D-
- The 1.5K pull-up allows the host to detect the device attachment and its supported speed
- High-speed device is detected first as full-speed device then high-speed capability is detected through bus handshakemechanism called “chirp sequence”
11.连接和断开连接
1)没有设备连上主机时
- D+和D-数据线上的下拉电阻起作用,使得二者都在低电平;主机端看来就是个SE0状态;同样地,当数据线上的SE0状态持续一段时间了,就被主机认为是断开状态
2)设备连上主机时
- 当主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了
- 主机必需在驱动SE0状态以复位设备之前,立刻采样总线状态来判断设备的速度
FS/HS设备连上
LS设备连上
12.数据编解码和位填充
1)USB采用NRZI(非归零编码)对发送的数据包进行编码
- 输入数据0, 编码成“电平翻转”
- 输入数据1, 编码成“电平不变”
- 编码出来的序列,高电平: J状态;低电平: K状态
2)位填充是为了保证发送的数据序列中有足够多的电平变化
- 填充的对象是(输入数据),即先填充再编码
- 数据流中每6个连续的“1”,就要插入1个“0”,从而保证编码数据出现电平变化
- 接收方负责解码NRZI码流,然后识别出填充位,并丢弃它们
12.USB传输: Packet、 Transaction、 Transfer
12.1 Packet的组成
12.2 Packet的内容
Packet分四大类:
- 命令 (Token) Packet
- 帧首 (Start of Frame) Packet
- 数据 (Data) Packet
- 握手 (Handshake) Packet
注:不同类型包,以上的组成部件有所不同
12.2.1 Packet内容之PID
12.2.2 Packet内容之地址
12.2.3 Packet内容之帧号
帧号:
- 11 位
- 主机每发出一个帧,帧号都会自加1
- 当帧号达到7FFH时,将归零重新开始计数
- 仅在每个帧的帧首传输一次SOF包
帧格式:
12.2.4 Packet内容之数据
根据传输类型的不同,数据域的数据长度从0到1024字节不等:
12.2.5 Packet内容之CRC
Token CRC:
- 计算地址域和帧号域的CRC
- G(X) = X5 + X2 + 1
Data CRC:
- 计算数据域数据的CRC
- G(X) = X16 + X15 + X2 + 1
12.3 Packet的类型
12.3.1 Packet类型之Token Packet
12.3.2 Packet类型之SOF Packet
12.3.3 Packet类型之DATA Packet
12.3.4 Packet类型之Handshake Packet
12.4 Data PID toggle
12.4.1 Data PID toggle 用于数据的同步
12.4.2 Data PID toggle 用于数据的重发
12.5 USB传输:Transaction
1)Transaction可以分成三类
- Setup transaction: 主机用来向设备发送控制命令
- Data IN transaction: 主机用来从设备读取数据
- Data OUT transaction: 主机用来向设备发送数据
注:总是由主机发起
2)Transaction的packet组成
- Token packet: 总是由主机发出
- Data packet: 包含此次transaction的数据负载
- 可选的Handshake packet
12.6 USB传输:Transfer
注:以上摘自《STM32 USB 开发者培训》,2013.5