USB协议入门


提示:以下是本篇文章正文内容,下面案例可供参考

一、USB简介

USB1.0和USB1.1支持1.5Mb/s的低速模式和12Mb/s的全速模式。在USB2.0以上支持480Mb/s的高速模式。
应用如下:
在这里插入图片描述

二、USB总线信号

一个USB设备端的连接器是由D+、D-及Vbus,GND和其它数据线构成的简短连续电路,USB使用的是差分传输模式,两个数据线D+和D-。

信号描述
差分的“1”D+>Voh(min) D-<Vol(max)
差分的“0”D->Voh(min) D+<Vol(max)
单终端“0”(SE0)D+和D-<Vol(max)
数据J态:高速 低速差分的“0” 差分的“1”
数据K态:高速 低速差分的“1” 差分的“0”
复位D+和D-小于Vol(max)的持续时间大于等于10毫秒
挂起状态(Suspend)3ms以上的J状态
包开始(SOP)数据线从空闲态转到K态
包结束(EOP)持续2位时间的SE0信号,后跟随1位时间的J状态
唤醒(Resume)唤醒(Resume)
同步SYNC3个KJ状态切换,后跟随2位时间的K状态

举例:
在这里插入图片描述

三、USB传输

一个传输有多个事务组成,一个事务由2-3个包组成。传输又分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。
注意:USB传输数据先发数据低位再发高位数据
在这里插入图片描述

1. 数据的编码解码与位插入

在包传送时,USB使用一种NRZI(None Return Zero Invert,即无回零反向码)编码方案。在该编码方案中,“1”表示电平不变,“0”表示电平改变。
在这里插入图片描述

位填充是为了保证发送的数据序列中有足够多的电平变化,填充的对象是(输入数据),即先填充再编码,数据流中每6个连续的“1”,就要插入1个“0”,从而保证编码数据出现电平变化,接收方赋值解码NRZI码流,然后识别出填充位,并丢弃它们。
在这里插入图片描述

2. 域

一个包被分为不同域,域是 USB 数据最小的单位, 由若干位组成(多少位由具体的域决定)。不同类型的包所包含的域是不一样的,都要以同步域 SYNC 开始 ,紧跟一个包标识符PID,最终 以包结束符 EOP 来结束这个包。

2.1 同步域

所有的 USB 包都由 SYNC 开始,高速包的 SYNC 宽度为 32bit(31 位 0+1 位 1),全速 /低速包的SYNC 段度为 8bit(7 位 0+1 位 1)。实际接收到的 SYNC 长度由于 USB HUB 的 关系, 可能会小于该值。 同步域用于告诉 USB 串行接口引擎数据即将开始传输,另一个作用是用于本地时钟与输入同步。

2.2 标识域

数据包标识符(PID)紧跟在每个USB数据包的SYNC字段之后。PID由四位数据包类型字段和四位校验字段组成,如图8-1所示。PID指示分组的类型,并且通过推断,指示分组的格式和应用于分组的错误检测的类型。PID的四位校验字段确保PID的可靠解码,从而正确解释数据包的剩余部分。PID校验字段是通过对数据包类型字段执行1的补码而生成的。如果四个PID校验位不是它们各自的分组标识符位的补码,则存在PID错误。
在这里插入图片描述
在这里插入图片描述

2.3 地址域

地址共占 11 位,其中低 7 位是设备地址, 高 4 位是端点地址。
地址域:七位地址,代表了设备在主机上的地址,地址 000 0000 被命名为零地址, 是任何设备第一次连接到主机时,在被主机配置、枚举前的默认地址, 由此可以知道为什么一个 USB 主机只能接 127 个设备。
在这里插入图片描述

2.4 端点域

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

2.5 帧号域

占 11 位,主机每发出一个帧,帧号都会自加 1,当帧号达到 0x7FF 时,将归零重新开始计数。帧号域最大容量 0x800,对于同步传输有重要意义。

2.6 数据域

根据传输类型的不同,数据域的数据长度从 0 到 1024 字节不等。
在这里插入图片描述

2.7 校验域

Token CRC 计算地址域和帧号域的CRC
G(X) = X5 + X2 + 1

Data CRC 计算数据域数据的CRC
G(X) = X16 + X5 + X2 + 1

3. 包

包(Packet)是 USB 系统中信息传输的基本单元, 所有数据都是经过打包后在总线上 传输的。包是USB 总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若 干个数据包组成一次事务传输。一次事务传输也不能打断,属于一次事务传输的几个包必须连续, 不能跨帧完成。一次传输由一次到多次事务传输构成, 可以跨帧完成。由域构成的包有四种类型, 分别是令牌包、数据包、握手包和特殊包,不同包的域结构不同。

3.1 令牌包

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

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

输出(OUT)令牌包用来通知设备将要输出一个数据包;输入(IN)令牌包用来通知 设备返回一个数据包;建立(SETUP)令牌包只用在控制传输中,通知设备将要输出一个 数据包;帧起始包在每帧(或微帧) 开始时以广播的形式发送,所有 USB 全速设备和高速设备都可以接收到 SOF 包。
在这里插入图片描述
帧起始包:在每帧(或微帧)开始时发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。
帧起始包的格式:SYNC + PID + 11 位 FRAM + CRC5(五位的校验码)
在这里插入图片描述

3.2 数据包

数据包分为 DATA0 包和 DATA1 包。当 USB 发送数据的时候, 如果一次发送的数据长 度大于相应端点的容量时,就需要把数据包分为好几个包分批发送,DATA0 包和 DATA1 包 交替发送,即如果第一个数据包是 DATA0,那第二个数据包就是 DATA1。但也有例外情况,

在同步传输中(四类传输类型中之一),所有的数据包都是为 DATA0 。格式如下:
SYNC + PID + 0~1024 字节 + CRC16

注意:低速设备允许的最大数据有效载荷大小为 8 个字节。 全速设备的最大数据有效
载荷大小为 1023.高速设备的最大数据有效载荷大小为 1024 个字节。
在这里插入图片描述

3.3 握手包

握手包包括 ACK、NAK、STALL 以及 NYET 四种, 其中ACK 表示肯定的应答成功的数据传输。对于 IN 事务,将由 host 发出;对于 OUT、SETUP 和 PING 事务, 将由 device 发出。

NAK 表示否定的应答失败的数据传输,要求重新传输。在数据阶段, 对于 IN 事务,它将由 device 发出; 在握手阶段, 对于 OUT 和 PING 事务, 它也将由 device 发出; host从不发送 NAK 包。

STALL 表示功能错误或端点被设置了 STALL 属性。

NYET 表示尚未准备好,要求等待。
握手包是结构最为简单的包,格式如下: SYNC + PID
在这里插入图片描述

4. 事务

4.1 IN

表示 USB 主机从总线上的某个 USB 设备接收一个数据包的过程
令牌包阶段——主机发送一个 PID 为 IN 的输入包给设备,通知设备要往主机发送数据;
数据包阶段——设备根据情况会作出三种反应(要注意:数据包阶段也不总是传送数据 的,根据传输情况还会提前进入握手包阶段)。
握手包阶段——主机正确接收到数据之后就会向设备发送 ACK 包。
【正常】的输入事务处理:设备往主机里面发出数据包(DATA0 与 DATA1 交替)
在这里插入图片描述
【设备忙】时的输入事务处理:无法往主机发出数据包就发送 NAK 无效包, IN 事务提前结
束,到了下一个 IN 事务才继续;
在这里插入图片描述
【设备出错】时的输入事务处理:发送错误包 STALL 包,事务也就提前结束了,总线进入
空闲状态
在这里插入图片描述

4.2 OUT

输出事务处理:表示USB 主机把一个数据包输出到总线上的某个USB 设备接收的过程。
令牌包阶段——主机发送一个 PID 为 OUT 的输出包给设备,通知设备要接收数据;
数据包阶段—— 比较简单,就是主机会往设备送数据, DATA0 与 DATA1 交替
握手包阶段——设备根据情况会作出三种反应
【正常】的输出事务处理:设备给主机返回 ACK,通知主机可以发送新的数据,如果数据
包发生了 CRC 校验错误,将不返回任何握手信息;
在这里插入图片描述
【设备忙时】的输出事务处理:无法给主机返回 ACK,就发送 NAK 无效包,通知主机再次
发送数据
在这里插入图片描述
【设备出错】的输出事务处理:发送错误包 STALL 包,事务提前结束,总线进入空闲状态。
在这里插入图片描述

4.3 SETUP

令牌包阶段——主机发送一个 PID 为 SETUP 的输出包给设备,通知设备要接收数据;
数据包阶段—— 比较简单,就是主机往设备送数据,注意, 这里只有一个固定为 8 个字节的 DATA0 包,这 8 个字节的内容就是标准的 USB 设备请求命令。
握手包阶段——设备接收到主机的命令信息后,返回 ACK,此后总线进入空闲状态,
并准备下一个传输(在 SETUP 事务后通常是一个 IN 或 OUT 事务构成的传输)。
【正常】的设置事务处理
在这里插入图片描述
【设备忙时】的设置事务处理
在这里插入图片描述
【设备出错】的设置事务处理
在这里插入图片描述

5. 传输

控制传输由三个阶段组成,设置阶段、可选的数据阶段、状态阶段,其中设置阶段由1个SETUP事务组成,数据阶段由0个或者多个IN/OUT事务组成,状态阶段由1个IN/OUT事务组成,其中每个阶段事务包结构有所不同
下图是一个控制读取的控制传输过程实例,每一个过程数据的含义
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白日梦想家0.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值