帧: 是一个时间概念,在USB中,一帧就是1MS,包含了一系列总线动作。USB
将一帧分为好几份,每份就是USB的一个传输动作。
上行:设备到主机为上行,主机到设备为下行。
2、数据在USB中的发送是由低位到高位发送的。
3、USB的数据格式:
数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。
域:
名称 |
值 |
意义 |
同步域(SYNC) |
固定为0000 0001 |
用于同步 |
标识域(PID) |
四位标识符+四位标识符反码 |
表明包的类型和格式,共16种 |
地址域(ADDR) |
7位地址 |
设备在主机上的地址(注1) |
端点域(ENDP) |
4位 |
|
帧号域(FRAM) |
11位 |
每个帧都有其编号,最大为0x800 |
数据域(DATA) |
|
|
校验域(CRC) |
|
|
注:1、地址000 0000被命名为零地址,是任何一个设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此可以知道为什么一个USB主机只能接127个设备的原因。
2、端点域有4位,所以一个设备最多有16个端点。
包:
令牌包 |
SYNC+PID+ADDR+ENDP+CRC5(五位的校验码)(输入、输出、设置) SYNC+PID+11位FRAM+CRC5(五位的校验码)(帧起始包) |
数据包 |
SYNC+PID+0~1023字节+CRC16 |
握手包 |
SYNC+PID |
特殊包 |
|
事务:
IN:令牌包、数据包、握手包
OUT:令牌包、数据包、握手包
SETUP:令牌包、数据包、握手包 这8个字节的内容就是标准的USB设备请求命令(共有11条
传输:
传输由IN、OUT、SETUP中的事务构成,有中断传输、批量传输、控制传输、
同步传输、控制传输,其中中断传输和批量转输的结构一样,同步传输有最简单的结构,而控制传输是最重要的也是最复杂的传输。
1、 中断传输:由OUT事务和IN事务构成,用于键盘、鼠标等HID设备的数据传输中
2、 批量传输:由OUT事务和IN事务构成,用于大容量数据传输,没有固定的传输速率,也不占用带宽,当总线忙时,USB会优先进行其他类型的数据传输,而暂时停止批量转输。
3、 同步传输:由OUT事务和IN事务构成,有两个特殊地方,第一,在同步传输的IN和OUT事务中是没有返回包阶段的;第二,在数据包阶段所有的数据包都为DATA0
4、 控制传输:最重要的也是最复杂的传输,控制传输由三个阶段构成(初始设置阶段、可选数据阶段、状态信息步骤),每一个阶段可以看成一个的传输,也就是说控制传输其实是由三个传输构成的,用来于USB设备初次加接到主机之后,主机通过控制传输来交换信息,设备地址和读取设备的描述符,使得主机识别设备,并安装相应的驱动程序,这是每一个USB开发者都要关心的问题
令牌包 :
0x01 输出(OUT)启动一个方向为主机到设备的传输,并包含了设备地址和标号
0x09 输入 (IN) 启动一个方向为设备到主机的传输,并包含了设备地址和标号
0x05 帧起始(SOF)表示一个帧的开始,并且包含了相应的帧号
0x0d 设置(SETUP)启动一个控制传输,用于主机对设备的初始化
数据包 :
0x03 偶数据包(DATA0),
0x0b 奇数据包(DATA1)
握手包:
0x02 确认接收到无误的数据包(ACK)
0x0a 无效,接收(发送)端正在忙而无法接收(发送)信息
0x0e 错误,端点被禁止或不支持控制管道请求
特殊包 0x0C 前导,用于启动下行端口的低速设备的数据传输
上一篇:USB协议深入分析 字符串描述符
下一篇:单片机的FIFO(先入先出)循环队列实现
推荐阅读最新更新时间:2024-03-16 14:28