USB通信学习-基础概念理解

USB通信

1、USB是轮询总线,USB主机发起所有数据交换。数据往返于USB设备中的端点。USB主机输出使用OUT端点,USB主机输入使用IN端点。USB主机中没有端点,数据存储于缓冲区中。从主机的FIFO到设备的端点,中间是Pipes。全速USB传输中,固定的1帧时间为1ms,在高速USB中有将一帧分为了8个微帧,每个125us。

USB数据层次

USB数据层次从小到大分为域(field),包(packet),事务(transaction),传输(transfer),管道(pipes)。

1、域

域是USB数据的最小单位,其实域就像我们CAN通信中,一个CAN帧内的帧起始,帧ID,RTR,IDE等等。一个USB数据包由7个域组成。分别位同步域、标识域、地址域、端点域、帧号域、数据域、校验域。数据发送低位在前,高位在后。

  • 同步域:用于本地时钟域输入同步,标志一个包的起始,全/低速为8位,高速为32位。
  • 标识域PID:由4位表示符和4位表示符反码组成,用于表明包的类型和格式,有令牌包,数据包,握手包。
  • 地址域ADDR:七位地址,表示设备在主机上的地址。复位和通电后默认为0,在枚举过程中由主机配置。
  • 端点域ENDP:4位,表示端点编号。端点0默认作为控制传输端点,且双向控制。
  • 帧号域:11位,帧号从0开始递增,到0x7FF后自动变为0。
  • 数据域:0~1023字节,不同传输类型中,数据域的长度不同。
  • 校验域:对令牌包(CRC5)和数据包(CRC16)中非PID域进行校验。
2、包

包是USB传输的基本单位。它分为四种类型,令牌包、数据包、握手包和特殊包。

令牌包

令牌包又可分为输出(OUT)、输入(IN)、帧起始(SOF)、建立(SETUP)。令牌包结构如下表所示

PIDADDRENDPCRC5
长度(bit)8745

令牌包说明

PID说明
OUT0001B用来通知设备将要输出数据包
IN1001B用来通知设备将要返回一个数据包
SOF0101B每帧开始时发送,EOP是每帧结束的标志
SETUP1101B只用在控制传输中,它跟输出令牌包作用一样,也是通知设备将要输出一个数据包。SETUP包后只使用DATA0数据包。
数据包

数据包用来传输数据。数据包结构如下表所示

PIDDATACRC16
长度(bit)80~819216

低速设备允许的最大有效数据载荷为8字节,全速设备的最大有效数据负载大小为1023字节,告诉设备的最大有效数据载荷为1024

数据包说明

PID说明
DATA00011数据包偶书包
DATA11011数据包奇数包
DATA20111高速同步事务的专用数据包
MDATA1111SPLIT事务专用数据包
握手包

握手包用来表示一个传输是否被对方确认。包结构如下表所示

PID
长度(bit)8

握手包说明

PID说明
ACK0010数据被正确接收
NAK1010数据未正确接收、设备内存不够无法接收数据或设备无数据可发送
STALL1110设备无法执行这个请求或者端点已经被挂起。
NYET0110在高速设备OUT事务中使用,表示设备本次数据接收成功,但是没有足够的空间接收下次数据。主机下次输出数据时,将先使用PING命令来探测设备是否有足够的空间
3、事务

每个事务都包含由三个包,分别是令牌包,数据包,握手包。根据令牌包中PID的不同,事务可以分为三种:SETUP事务,IN事务,OUT事务。

SETUP事务
方向组成
主机到设备令牌包SYNC+PID(SETUP)+ADDR+ENDP+CRC5
主机到设备数据包SYNC+PID(DATA0)+8字节数据+CRC16
设备到主机握手包SYNC+PID(ACK/NAK/STALL)
  1. 主机先发送一个SETUP令牌包给设备,通知令牌包中的所包含的地址的设备准备接收数据(寻址)。
  2. 主机发送8字节的DATA0数据包给设备,SETUP事务必须使用DATA0。这8字节的内容就是标准的USB设备请求命令。
  3. 设备接收指令后会返回一个握手包给主机。
IN事务
方向组成
主机到设备令牌包SYNC+PID(IN)+ADDR+ENDP+CRC5
设备到主机数据包SYNC+PID(DATA0/1)+(0~1023)字节数据+CRC16
主机到设备握手包SYNC+PID(ACK/NAK/STALL)
  1. 主机先发送一个IN令牌包给设备,通知令牌包中的所包含的地址的设备向主机发送数据(寻址)。
  2. 设备如果正常,则向主机发送数据,如果数据需多次发送,则交替使用DATA0和DATA1。如果设备异常,则发送NAK或STALL提前结束IN事务。
  3. 主机收到数据后发送一个握手包给设备。
OUT事务
方向组成
主机到设备令牌包SYNC+PID(OUT)+ADDR+ENDP+CRC5
主机到设备数据包SYNC+PID(DATA0/1)+(0~1023)字节数据+CRC16
设备到主机握手包SYNC+PID(ACK/NAK/STALL)
  1. 主机先发送一个OUT令牌包给设备,通知令牌包中的所包含的地址的设备准备接收数据(寻址)。
  2. 主机发送数据包给设备,如果数据需多次发送,则交替使用DATA0和DATA1。
  3. 设备接收指令后会返回一个握手包给主机。
4、传输

传输时由事务构成的,有四种类型:中断传输、批量传输、同步传输、控制传输。传输的种类在端点描述符中确定。

中断传输

这里的中断并不是传统意义上的中断,它是主机通过固定时间对中断端点进行查询,轮询时间可以在端点描述符中设置(Interval)。它通常用于有一定实时性要求,但是数据量不大且数据不需要一直通信的传输中,就像我们的鼠标或键盘没有动作就不用传数据给主机。

低速全速高速
最大数据包长度8byte64byte1024byte
最大带宽占用90%90%80%
轮询间隔10~255ms1~255ms2^(interval-1)*125us

需要注意的是主机对中断端点的轮询间隔并不一定是按照我们设置的来,它的只会保证轮询的间隔小于我们设置的间隔。

对于低速和全速传输,一帧中最多只有一次中断传输。对于高速传输,在端点描述符中可以设置中断传输的额外通信次数,最多可以额外传输2次,也就是一微帧中总共传输2次。

中断传输包含了IN事务和OUT事务。如果传输的数据大于最大数据包长度,那么会分多个事务进行传输,直到传输的事务的数据长度小于最大数据包长度,则认为时最后一包数据,传输完成。在传输过程中会,PID会按照DATA0-DATA1-DATA0…来翻转传输。发送端只有在收到ACK的时候才会翻转PID。

批量传输

批量传输的实时性不高,相对来说它的传输优先级最低。只有当USB中有多余的带宽了,批量传输才会开始,但是当带宽比较紧张的时候,批量传输会把带宽让给其他传输。其端点描述符中的Interval不起作用。批量传输一般用于数据传输量大,但是对实时性要求不高的场合,例如打印机。

低速全速高速
最大数据包长度不支持8、16、32、64byte可选512byte

批量传输包含了IN事务和OUT事务,但是比中断传输多了一个PING事务,PING事务只在高速传输中存在。PING事务的用来查看端点的状态。在传输前先PING一下从机,看设备是否准备好接收数据,NYET表示没有准备好接收下一包数据,ACK表示已经准备好接收数据。如果传输的数据大于最大数据包长度,那么会分多个事务进行传输,直到传输的事务的数据长度小于最大数据包长度,则认为时最后一包数据,传输完成。在传输过程中会,PID会按照DATA0-DATA1-DATA0…来翻转传输。发送端只有在收到ACK的时候才会翻转PID。

同步传输

同步传输是一种实时的但是不可靠的传输,不支持错误重发机制。同步传输有固定的时间间隔,端点描述符中的Interval固定为1。对于全速传输,一帧中最多只有一次中断传输(个人理解是对某个端点的中断传输只有一次)。对于高速传输,在端点描述符中可以设置中断传输的额外通信次数,最多可以额外传输2次,也就是一微帧中总共传输2次。同步传输一般用于数据量大,实时性要求高,数据产生连续的场合,例如音视频的传输。

低速全速高速
最大数据包长度不支持1023byte1024byte
最大带宽占用不支持80%90%
轮询间隔不支持1~255ms2^(interval-1)*125us

同步传输包含了IN事务和OUT事务,同步数据的IN和OUT事务没有包握手阶段,数据包的PID都是DATA0。

控制传输

控制传输使用端点0,进行双向传输,一般用于设备配置,枚举。控制传输一般在总线中没有进行同步与中断传输的时候,如果需要进行控制传输,才会启动。

低速全速高速
最大数据包长度8byte8、16、32、64byte可选512byte

控制传输时可靠传输。分为三个过程:

  • 建立过程:一个SETUP事务,用来告诉设备我们主机的请求时什么,数据为8个字节,可以参考标准请求介绍。
  • 数据过程:数据过程不是必须的,数据过程用来读取或者设置请求内容,0个或多个IN/OUT事务。
  • 状态过程:一个IN/OUT 事务,表明请求时否成功了。
标准请求代码表
bRequestValue
GET_STATUS0
CLEAR_FEATURE1
SET_FEATURE3
SET_ADDRESS5
GET_DESCRIPTOR6
SET_DESCRIPTOR7
GET_CONFIGURATION8
SET_CONFIGURATION9
GET_INTERFACE10
SET_INTERFACE11
SYNCH_FRAME12
SET_ENCRYPTION13 (USB2.0以后)
GET_ENCRYPTION14
SET_HANDSHAKE15
GET_HANDSHAKE16
SET_CONNECTION17
SET_SECURITY_DATA18
GET_SECURITY_DATA19
SET_WUSB_DATA20
LOOPBACKDATAWRITE21
LOOPBACK_DATA_READ22
SET_INTERFACE_DS23
SET_SEL48
SET_ISOCH_DELAY49
SETUP 8字节数据格式
OffsetFieldSizeDesc
0bmRequestType1bit7: 0,数据由主机到设备SET请求 1:数据由设备到主机GET请求 bit[6:5]:00,标准请求;01:特定类请求;10:用户定义的请求命令;11:保留
1bRequest1标准请求代码,见标准请求表
2wValue2根据请求的不同,该含义会由变化
4wIndex2根据请求的不同,该含义会由变化
6wLenght2指定第二阶段传输数据的长度,0表示没有数据传输阶段
bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)数据过程
0x00CLEAR_FEATURE(1)特性选择00没有数据
0x01CLEAR_FEATURE(1)特性选择接口号0没有数据
0x02CLEAR_FEATURE(1)特性选择端点号0没有数据
0x80GET_CONFIGURATION(8)001配置制
0x80GET_DESCRIPTOR(6)描述符类型(高字节)和描述符索引(低字节)0或语言ID(字符串描述符)描述符的长度描述符
0x81GET_INTERFACE(10)0接口号1备用(转换)接口
0x80GET_STATUS(0)002设备状态
0x81GET_STATUS(0)0接口号2接口状态
0x82GET_STATUS(0)0端点号2端点状态
0x00SET_ADDRESS(5)设备地址00没有数据
0x00SET_CONFIGURATION(9)配置值00没有数据
0x00SET_DESCRIPTOR(7)描述符类型(高字节)和描述符索引(低字节)0或语言ID(字符串描述符)描述符的长度描述符
0x00SET_FEATURE(3)特性选择00没有数据
0x01SET_FEATURE(3)特性选择接口号0没有数据
0x02SET_FEATURE(3)特性选择端点号0没有数据
0x01SET_INTERFACE(11)备用接口号(转换接口号)接口号0没有数据
0x82SYNCH_FRAME(12)0端点号2帧号

参考

USB 标准请求 - USB中文网 (usbzh.com)

USB初学 – 入门篇 (USB基础知识速览) - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: USB3300是一款通用的USB物理层集成电路(PHY),用于连接USB设备和主机。它充当物理层转换器,将低压差分信号转换为USB协议规定的数字信号,以实现设备之间的可靠通信USB3300的中文手册提供了关于如何正确使用和配置该芯片的详细说明。手册首先介绍了芯片的功能和主要特性,如支持USB 2.0规范和High-Speed、Full-Speed和Low-Speed传输模式,以及支持多种电源模式。接下来,手册提供了使用USB3300的电路连接图和引脚功能描述,以帮助用户正确布线和连接。 手册进一步解释了USB3300的一些重要概念和术语,例如线间均衡、时钟恢复和数据错误检测等。它还提供了关于如何配置寄存器和设置芯片引脚的详细说明,以满足用户特定的应用需求。 此外,手册还包含了一些实际的应用示例,以帮助用户更好地理解如何使用USB3300。这些示例涵盖了一些常见的应用场景,例如USB主机和USB设备之间的通信,以及使用USB3300实现电源管理功能。 总之,USB3300中文手册提供了全面而详细的关于USB3300芯片的使用和配置说明。用户可以通过此手册了解该芯片的功能和特性,并准确地使用它来构建可靠的USB通信系统。 ### 回答2: USB3300是一款USB 2.0 PHY(物理层设备),其具有多种功能和特性。下面是对USB3300中文手册的回答。 首先,USB3300支持完整的USB 2.0规范,并提供全速(12 Mbps)和高速(480 Mbps)两种数据传输速率。它还支持USB OTG(On-The-Go)功能,可以实现设备之间的直接通信,无需通过主机。 其次,USB3300具有内置电源管理功能,可自动控制和检测外部USB设备的连接状态。它支持低功耗模式,以最小化功耗和延长电池寿命。 此外,USB3300还具有丰富的电气特性,包括过电压和电流保护、信号完整性和抗混杂能力。它支持USB高速差分信号传输,并提供多种接口选项,包括串行外设接口(SPI)、串行UART接口和I2C总线接口,以方便和其他设备的通信和控制。 USB3300还提供了丰富的配置和控制选项,可以根据不同应用的需求进行灵活设置。它支持自适应和主动模式两种时钟源,可以根据需要选择合适的工作模式。此外,USB3300还支持硬件复位和软件复位功能,以便在出现问题时进行设备重启和恢复操作。 总结起来,USB3300是一款功能强大、灵活可配置的USB 2.0 PHY芯片,适用于各种USB设备和应用场景。它的详细功能和使用方法可以通过USB3300中文手册来了解和学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值