《圈圈教你玩 USB》学习笔记-令牌包

令牌包用来启动一次 USB 传输。因为 USB 是主从结构的拓扑结构,所以所有的数据传输都是由主机发起的,设备只能被动地接收数据。这就需要主机发送一个令牌来通知哪个设备进行响应,如何响应。

令牌包有 4 种,分别为输入(IN),输出(OUT),建立(SETUP)和帧起始(SOF)。

OUT 通知设备将要输出数据
IN 通知设备将要输入数据
SOF 通知设备这是一个帧起始包
SETUP 通知设备将要开始一个控制传输

  输出令牌包用来通知设备将要输出一个数据包

  输入令牌包用来通知设备返回一个令牌包

  建立令牌包只用在控制传输中,它跟输出令牌包的作用一样,也是通知设备将要输出一个数据包,两者的区别在于:SETUP 令牌包后只使用 DATA0 数据包,且只能发到设备的控制端点,并且设备必须要接收,而 OUT 令牌包则没有这些限制

  帧起始包在每帧(或微帧)开始时发送,它以广播的形式发送,所有 USB 全速设备和高速设备都可以接收 SOF 包。USB 全速设备每 ms 产生一个帧,而高速设备每 125us 产生一个微帧。USB 主机会对当前帧号进行计数,在每次帧开始时(或者微帧开始时,每 ms 有 8 个微帧,这 8 个微帧的帧号是一样的,即相同的 SOF),通过 SOF 包发送帧号。SOF 中的帧号是 11 位 的,在 4 个令牌包中,只有 SOF 令牌包之后不跟随数据传输,其他的都有数据传输。

每个令牌包,最后都有一个 CRC5 的校验,它只校验 PID 之后的数据,不包含 PID 本身,因为 PID 本身已经有 4 个取反的位进行校验了。

SOF 令牌包的结构如下所示

同步域 8 位包标识 PID 11 位帧号 5 位 CRC5 校验 EOP

OUT/IN/SETUP 令牌包的结构如下所示

同步域 8 位包标识 PID 7 位地址 4 位端点号 5 位 CRC5 校验 EOP

地址域:要访问的设备的地址

端点域:要访问的端点号

CRC5 校验:只计算 PID 之后的地址域和端点域,而不包括 PID。

发布了124 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/tyustli/article/details/103970519