USB协议以及枚举过程浅析

本文深入解析USB协议,从数据的最小单位域开始,详细介绍了同步域、标识域、地址域等各个部分,以及USB的包、事务、传输的构成和工作原理。重点讲解了控制传输、中断传输、批量传输和同步传输的特点,还有USB描述符的作用,为理解USB通信机制提供全面的知识框架。
摘要由CSDN通过智能技术生成

一、概述

数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。

在这里插入图片描述

二、域

域:是USB数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型

1、同步域(SYNC)

是用来告诉USB的串行接口引擎数据要开始传输了,请做好准备。除此之外,同步域还可以用来同步主机端和设备端的数据时钟,因为同步域是以一串0开始的,而0在USB总线上就是被编码为电平翻转,结果就是每个数据位都发生电平变化,这让串行接口引擎很容易就能够恢复出采样时钟信号;对于全速设备和低速设备,同步域使用的是00000001(二进制数,总线上的发送顺序);对于高速设备,同步域使用的是31个0,后面跟1个1(需要注意的是,这是对发送端的要求,接收端解码时,0的个数可以少于这个数)。

2、标识域(PID)

由四位标识符+四位标识符反码构成,表明包的类型和格式,这是一个很重要的部分,这里可以计算出,USB的标识码有16种。

在这里插入图片描述

1)令牌包

0x01:输出(OUT)启动一个方向为主机到设备的传输,并包含了设备地址和标号;

0x09:输入(IN) 启动一个方向为设备到主机的传输,并包含了设备地址和标号;

0x05:帧起始(SOF)表示一个帧的开始,并且包含了相应的帧号;

0x0d:设置(SETUP)启动一个控制传输,用于主机对设备的初始化。

2)数据包

0x03:偶数据包(DATA0);

0x0b:奇数据包(DATA1)。

3)握手包

0x02:确认接收到无误的数据包(ACK);

0x0a:无效,接收(发送)端正在忙而无法接收(发送)信息;

0x0e:错误,端点被禁止或不支持控制管道请求。

4)特殊包

0x0C前导,用于启动下行端口的低速设备的数据传输。

3、地址域(ADDR)

七位地址,代表了设备在主机上的地址,地址000 0000被命名为零地址,是任何一个设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此可以知道为什么一个USB主机只能接127个设备的原因。

4、端点域(ENDP)

四位,由此可知一个USB设备有的端点数量最大为16个。

5、帧号域(FRAM)

11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义(同步传输为四种传输类型之一)。

6、数据域(DATA)

长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度 。

7、校验域(CRC)

对令牌包和数据包(对于包的分类请看下面)中非PID域进行校验的一种方法,CRC校验在通讯中应用很泛,是一种很好的校验方法,至于具体的校验方法这里就不多说,请查阅相关资料,只须注意CRC码的除法是模2运算,不同于10进制中的除法。

三、包

由域构成的包有四种类型,分别是令牌包、数据包、握手包和特殊包,前面三种是重要的包,不同的包的域结构不同,介绍如下

1、令牌包

可分为输入包、输出包、设置包和帧起始包(注意这里的输入包是用于设置输入命令的,输出包是用来设置输出命令的,而不是放据数的) 其中输入包、输出包和设置包的格式都是一样的:

SYNC+PID+ADDR+ENDP+CRC5(五位的校验码)

帧起始包的格式:

SYNC+PID+11位FRAM+CRC5(五位的校验码)

2、数据包

分为DATA0包和DATA1包,当USB发送数据的时候,当一次发送的数据长度大于相应端点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值