拙网论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 236|回复: 0

USB底层协议

[复制链接]

949

主题

1001

帖子

3736

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3736
发表于 2020-4-1 14:01:09 | 显示全部楼层 |阅读模式

https://blog.csdn.net/mcgrady_tracy/article/details/8184387

USB底层协议

USB它是串行总线,所以数据在总线上是一位一位传输的,先传输最低位数据,最后传输最高位数据。对于多个字节的数据传输呢,采用的是小端格式,即先传输低字节数据,最后传输高字节数据。



在USB中,数据是以包为单位进行传输的,所有的包都必须以SYNC字段开始,以EOP(End-of-Packet)结尾。在SYNC字段之后,紧跟着的是包标识符(PID),PID为一个字节,其中4位用于定义包的类型,另外4位是用来校验PID的,PID格式如下:




在USB中,定义了四种类型的包,令牌包、数据包、握手包和特殊包,包类型详细定义如下:

PID类型         PID名                        PID<3:0>
令牌包           OUT                          0001B
                     IN                             1001B
                     SOF                           0101B
                     SETUP                       1101B
数据包           DATA0                      0011B
                     DATA1                      1011B
                     DATA2                      0111B
                     MDATA                     1111B
握手包           ACK                           0010B
                     NAK                          1010B
                     STALL                        1110B
                     NYET                         0110B
特殊包           PRE                           1100B
                     ERR                           1100B
                     SPLIT                        1000B
                     PING                         0100B   
                     Reserved                  0000B


在令牌包的PID字段之后,还包含地址域,地址就包括设备地址和端点地址,设备地址共7位,总共可寻址128个地址,但是地址0是作为默认设备地址的,所以说,USB系统中,最多只能同时连接127个设备。端点地址共4位,可寻址16个端点。



在USB包最后,还包含5位的CRC检验码,CRC校验码只对PID后面的数据进行校验,不对PID进行校验,因为PID本身就包含4位校验码。



包格式

令牌包格式

令牌包格式定义如下:




这里的令牌特指IN、OUT、SETUP令牌,而SOF包格式定义如下:



令牌包实例如下:







数据包格式

数据包包含包标识符(PID)和0到多个字节的数据,数据包类型总共四种,DATA0、DATA1、DATA2和MDATA。数据包格式定义如下:



数据包实例如下:



上图为SETUP请求数据包,用于读取设备的设备描述符。



握手包格式

握手包有三种ACK、NAK和STALL,其中ACK表示数据传输完成并且无错误,NAK表示设备不能接收数据或者没有数据上传,STALL表示设备不能进行数据传输。而NYET和ERR握手包只针对高速设备,表示设备没有准备好或者出错。握手包格式定义如下:



ACK握手包实例如下:


————————————————
版权声明:本文为CSDN博主「mcgrady_tracy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mcgrady_tracy/java/article/details/8184387

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|抱朴守拙BBS

GMT+8, 2025-5-26 02:16 , Processed in 0.206458 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表