USB协议详解第20讲(USB包-帧首包SOF)

USB协议详解第20讲(USB包-帧首包SOF)目录 1 包的四种类型 2 SOF 包组成 3 SOF 包发送时间及 USB 总线包结构 1 SOF 包的发送时间 2 USB 总线包组成 4 SOF 包其它核心概念 5 STM32SOF 包处理机制 1 包的四种类型根据包

大家好,欢迎来到IT知识分享网。

目录

1.包的四种类型

2.SOF包组成

3.SOF包发送时间及USB总线包结构

1.SOF包的发送时间

2.USB总线包组成

4.SOF包其它核心概念

5.STM32 SOF包处理机制


1.包的四种类型

根据包的组成把包分为四种类型,分别是、帧首包SOF(Start of Frame)、命令包(Token)数据包(Data)握手包(Handshake),如下图(大家一定要把PID类型和包类型分开)。

图片

4种PID类型和4种包类型(按照组成分类)的区别如下,大家注意区分。

USB协议详解第20讲(USB包-帧首包SOF)

2.SOF包组成

我们今天看SOF包的详细结构。SOF包由USB主机控制器以全速总线的标称速率每1.00 ms±0.0005 ms发出一次,对于高速总线则为125μs±0.0625μs。SOF数据包由PID域+帧号域+5bit CRC域,下图为SOF包各个域和抓包协议的对应图

图片

3.SOF包发送时间及USB总线包结构

SOF包的发送时间和USB总线的包数据结构大家可以看下图。

(1)SOF包的发送时间

图片

(2)USB总线包组成

图片

4.SOF包其它核心概念

所有高速和全速功能(包括集线器)都接收SOF数据包。SOF包不会引起任何功能生成应答包,因此,无法保证所有的功能都能收到SOF包。

SOF包由两个作用。第一个作用是当一个功能检测到SOF包后,就知道USB主机控制器开始启动一个帧(微帧)了。第二个作用为帧时间敏感功能,讲的通俗一点就是时标功能, 每一个设备功能可以接收SOF包,通过Frame域来判断当前的时间走到哪里了。不需要跟踪帧号(例如,全速操作集线器)的设备功能则只需要解码SOF包的PID,可以忽略帧号域及其CRC域。

5.STM32 SOF包处理机制

STM32的对SOF包的处理代码如下。ISTR_SOF中断位 指示一个新的USB帧的开始,它是在SOF数据包通过USB总线到达时设置的。中断服务例程可以监视SOF事件,使其具有到USB主机的1 ms同步事件,并安全地读取在SOF数据包接收处更新的USB_FNR(USB frame number register),当发生SOF中断时,我们可以读取USB_FNR寄存器来判断帧号并且计算出当前时间或者做其他事情。

图片

//读出的中断标志是SOF中断标志,且SOF中断使能了 if (wIstr & ISTR_SOF & wInterrupt_Mask) { //清除SOF中断标志 _SetISTR((uint16_t)CLR_SOF); //统计共接收到多少SOF bIntPackSOF++; //当定义了SOF_CALLBACK,则调用SOF_Callback,     //像钩子函数一样,在发生SOF中断时做点什么  #ifdef SOF_CALLBACK SOF_Callback(); #endif }

1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除。

2.未经原作者允许不得转载本文内容,否则将视为侵权;

3.转载或者引用本文内容请注明来源及原作者;

4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

USB协议详解第20讲(USB包-帧首包SOF)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/153020.html

(0)
上一篇 2025-03-06 16:10
下一篇 2025-03-06 16:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信