USB协议基础知识笔记
Posted 前端人生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USB协议基础知识笔记相关的知识,希望对你有一定的参考价值。
usb协议
功能层: 控制传输、中断传输、块传输(批量传输)、同步传输
设备层:管理USB设备、分配地址、读取设备描述符
总线接口层:采用NRZI编码-反向非归零编码(0将前一个电平翻转,1不翻转)
电气特性
电压:4.75~5.25V
电流:USB2.0高输出功率最大500mA、低输出功率最大100mA、 USB3.0最大输出900mA
USB事务
usb事务处理是主机和设备数据通信的基础。由: 令牌阶段、数据阶段、握手阶段组成。
常用字段
-
同步字段(SYSC): 每个信息包以SYSC开始,低速/全速同步字段长度为8位,数据为10000000B,从低位开始发送。高速同步字段长度为32位,数据为80000000H。
-
包标志字段(PID):字段长度为8位,低4位类型字段和高4位校验字段组成,校验字段是类型字段的补码,可验证数据的正确性。4种信息包类型: 令牌包、握手包、特殊包和数据包。
包类型 PID[3:0] 二进制 包名 说明 令牌包 1001 OUT PID 数据从主机发送到设备 0001 IN PID 数据从设备发送到主机 0101 SOF PID 作为帧的开始信息 1101 SETUP PID 主机向设备发送的配置信息 握手包 0010 ACK PID 接收方正确接收到数据 1010 NACK PID 接收方未能正确接收到数据 1110 STALL PID 使用的端点被挂起 0110 NYET PID 接收方没有任何响应 数据包 0011 DATA0 PID 数据包为偶数据包 1011 DATA1 PID 数据包为奇数据包 0111 DATA2 PID 高速同步事务专用数据包 1111 MDATA PID SPLIT事务专用数据包 特殊包 1100 PRE PID 令牌,主机发送先导包,使能低速通信 1011 ERR PID 握手信息,SPLIT事务中的错误握手信号 1000 SPLIT PID 高速SPLIT事务的令牌信息 0100 PING PID 数据流量检测控制
-
地址字段: 长度为7位,共128个地址值。地址0缺省,实际只有127个地址。在USB上电的时候主机先通过缺省地址0和usb设备进行通信,配置完成后,主机重新为设备分配一个地址。
-
端点字段: 长度为4位,总共可表示16个端点。低速:3个端点, 高速/全速:16个端点。,端点0是所有USB设备必须的,主要在设备上电初期和USB主机进行通信、完成配置。
-
帧号字段: 长度为11位,最大值07FFH,表示当前帧的帧号,每个帧发送的时候,该字段加1
-
数据字段: 最大长度1024字节,长度由传输类型和程序的需要决定。首先传输低字节,再传输高字节。
-
CRC字段: 循环冗余校验字段。一般在发送方进行位填充之前进行。令牌包一般采用5位CRC校验;数据包采用16位CRC校验。
令牌包
-
IN令牌包: PID字段+ADDR字段+ENDP字段+CRC字段 数据从 设备 到 主机
? PID: 数据从设备发送至主机
? ADDR:USB设备地址
? ENDP: 发送数据的端点号
? CRC: ADDR和ENDP字段进行校验
-
OUT令牌包: PID +ADDR + ENDP + CRC 数据从 主机 到 设备
-
SETUP令牌包: PID + ADDR + ENDP + CRC 数据从主机 到 设备, 配置信息
-
PING令牌包: PID +ADDR + ENDP + CRC 数据从 设备 到 主机, 握手信号传输
-
PRE令牌包: PID 低速数据传输先导包,在开始发送数据之前必须先发送该包(主机与集线器之间进行传输)。
-
数据包: PID + 数据字段 + 16位CRC PID指定数据包DATA0-DATA2或MDATA。数据字段的长度根据协议规定:低速最大长度8字节,全速最大长度 1023字节,高速最大长度1024字节
-
握手包:PID 接收方反馈状态给发送方
事务处理
-
IN事务处理
主机发送IN令牌包: SYNC+IN+EOP
设备发送数据包: SYNC+数据包+EOP
主机发送握手包: SYNC+确认+EOP
-
OUT事务处理
? 主机发送OUT令牌包: SYNC+OUT+EOP
? 主机发送数据包: SYNC+数据包+EOP
? 设备发送握手包: SYNC+确认+EOP
? 3.SETUP事务处理(利用其对设备进行配置,常用于建立阶段)
? 主机发送SETUP令牌包: SYNC+SETUP+EOP
? 主机发送数据包: SYNC+DATA0+EOP
? 设备发送握手包: SYNC+确认+EOP
? 4.PING事务处理(主要用于高速数数据传输中)
? 主机发送PING令牌包: SYNC+PING+EOP
? 设备发送握手包: SYNC+确认+EOP
? 5.SOF事务处理
? 主机主动发送。低速或者全速usb传输,每隔1ms产生一个SOF令牌包,对于高速传输,每
? 隔125us产生一个小帧,每隔7个小帧,产生一个SOF令牌包,不需要握手包。
USB设备的状态
-
连接状态: usb总线开始向usb设备供电,直到电源稳定。
-
上电状态: usb设备处于上电状态,当没有被复位
-
缺省状态: usb设备响应usb主机发出的复位信号,进行复位操作,复位结束后,设备进入缺省状态。该状态下:电流小于100mA,并且使用缺省的设备地址对一些usb事务进行处理。
-
地址状态: 复位结束后,usb主机重新为设备分配一个唯一的地址。
-
配置状态: 主机发出setconfiguration请求。
-
挂起状态: usb设备在3ms内没有检测到总线活动,自动进入挂起状态,保持原有的地址和配置。
USB数据传输
-
块传输: 适用于传输大量且对传输时间和传输速率没有要求的场合。数据包长度 -- 全速端点,可以是8、16、32、64字节;高速端点只能是512字节。数据量如果超过最大的数据包长,主控制器会将其分成多个块事务处理。处理过程:
? 令牌 >> 数据 >> 握手
? 第一个数据包为DATA0,第二个应该是DATA1,之后可以是DATA0/DATA1
-
中断传输: 适用于传输少量或对数据处理有周期要求的场合。数据长度 -- 低速端点最大数据包长度8字节;全速端点最大为64字节;高速端点为1024字节。
-
同步传输: 只能用于全速、高速设备。适用于传输大量、速率恒定的,且对周期有要求的数据。例如:音频、视频等。数据长度 -- 全速端点最大为1023字节;高速端点最大为1024字节
-
控制传输: 主要用于传输少量的,对传输时间和传输速率均无要求、但必须保证传输的数据。数据长度 -- 低速端点最大为8字节;全速端点可谓8、16、32、64字节;高速端点只能是64字节。
? 建立阶段 + 数据阶段 + 状态阶段
USB设备配置
-
设备描述符:表示USB设备的总体信息,一个USB设备只有一个设备描述符。固定18字节。
-
配置描述符: USB设备可以有一个或者多个配置,每个配置必须有一个配置描述符。固定9字节。
-
字符串描述符: 可选。用于保存供应商的名称、产品序列等文本信息。
-
接口描述符: 接口为端点的集合,负责完成该USB设备的特定功能。固定9字节。
-
端点描述符: 指出端点的特性。固定7字节。
-
设备限定描述符: 设备既需要告诉传输也需要全速传输,则必须支持设备限定描述符。固定10字节。
-
其他速率配置描述符: 既采用高速传输又采用全速传输,则必须支持该描述符。固定9字节。
-
以上是关于USB协议基础知识笔记的主要内容,如果未能解决你的问题,请参考以下文章
STM32H7第4章 ThreadX USBX协议栈基础知识
STM32F407第4章 ThreadX USBX协议栈基础知识