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

news/2025/3/17 5:53:37/文章来源:https://www.cnblogs.com/linhaostudy/p/18503782

1.包的四种类型

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

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

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);//统计共接收到多少SOFbIntPackSOF++;    //当定义了SOF_CALLBACK,则调用SOF_Callback,//像钩子函数一样,在发生SOF中断时做点什么 
#ifdef SOF_CALLBACKSOF_Callback();    
#endif
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/822257.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BigDecimal使用

常见方法 我们在使用 BigDecimal 时,为了防止精度丢失,推荐使用它的BigDecimal(String val)构造方法或者 BigDecimal.valueOf(double val) 静态方法来创建对象。 《阿里巴巴 Java 开发手册》对这部分内容也有提到,如下图所示。加减乘除 add 方法用于将两个 BigDecimal 对象相…

低功耗4G模组:FTP应用示例

​ 一、FTP 概述 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。 FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。 其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于 FTP 服务器上的资源。在开发网站的时候,…

「FHQ_Treap」学习笔记

一、前言 & 基本理论 来自笔者的肯定:最容易理解且比较好写的平衡树(不过就是常数有点大了),可能是笔者花了较长的时间去理解旋转 Treap 和 Splay 的旋转吧()。FHQ 不仅比旋转法编码简单,而且能用于区间翻转、移动、持久化等场合。——《算法竞赛》FHQ_Treap 的所有…

鲜花-CSP2024 游记

前言 坐标 \(\text{SX}\),去年 \(\text{CSP}\) 和 \(\text{NOIP}\) 都爆炸了,于是这就是我最后一年了。 初赛 赛前随便做了三份题,可以随便过线就放下不管了。 赛时光速写完选择,然后被状压题硬控,没太看懂在求什么,有点慌乱,后面的完善程序二分题很快写上去了,但是 \(…

如何使用NTP同步时间?

​ 一、NTP通信概述 很多场景中,由于业务需要,模块需要保持正确的系统时钟,才能正常工作。但是模块上电后的初试时间戳是946713600(即2000/01/01,16:00:00),所以同步时钟成为了开发者要解决的重要问题。对于Cat.1模块,移动/电信卡,通常会下发基站时间,那么sntp就不是必要…

工地升降机AI人数识别系统

工地升降机人数识别系统采用了AI神经网络和深度学习算法,工地升降机AI人数识别系统通过升降机内置的摄像头实时监测轿厢内的人员数量。通过图像处理和人脸识别算法,系统能够精确地识别升降机内的人数。一旦系统识别到人数达到或者超过设定的阈值,工地升降机AI人数识别系统会…

楼道堆积物视觉识别监控系统

楼道堆积物视觉识别监控系统采用了AI神经网络和深度学习算法,楼道堆积物视觉识别监控系统通过摄像头实时监测楼道的情况,通过图像处理、物体识别和目标跟踪算法,系统能够精确地识别楼道通道是否被堆积物阻塞。楼道堆积物视觉识别监控系统检测到堆积物的存在,立刻通过告警信…

变电站人员安全作业行为识别监测系统

变电站人员安全作业行为识别监测系统采用了AI神经网络和深度学习算法,变电站人员安全作业行为识别监测系统通过利用已装好的监控摄像头,进行人员行为分析。针对未穿戴安全帽、工作服、安全马甲、绝缘靴等不符合安全要求的行为,系统能够实时识别并发出预警,提醒工作人员及时…

redis数据库操作指令

一、数据库操作指令 2、redis中库说明 对于一个redis服务而言,包含默认有16个数据库给我们使用,从0开始编号,共15号数据库,默认使用的是0号数据库 切换库,select 库号 举例:使用1号库:select 1 库和库之间数据不共享 库和库之间的键可以重名 2、redis中清空库的指令清空…

AI智能识别未穿工作服识别

AI智能识别未穿工作服识别系统采用了AI神经网络和深度学习算法,AI智能识别未穿工作服识别系统通过现场监控摄像头对特定区域内工人的穿戴情况进行实时监测和分析。系统经过大量的数据训练和算法优化,能够准确识别工人是否穿戴合规的工作服、反光衣、安全帽等装备。AI智能识别…

从零开始学五笔(五):撇区字根

介绍下撇区的字根讲解格式:先介绍按键的区位号、口诀内容、口诀说明 然后列每个字根能组成什么汉字,难拆字将用中括号标出‍ T 键 区位号:31 口诀:禾竹一撇双人立,反文条头共三一 说明:禾:一个字根竹:指的是竹字头 ⺮一撇:作为撇区的第一个键,有一个字根为 丿双人立:…

从零开始学五笔(七):折区字根

介绍下折区的字根讲解格式:先介绍按键的区位号、口诀内容、口诀说明 然后列每个字根能组成什么汉字,难拆字将用中括号标出‍ N 键 区位号:51 口诀:已半巳满不出己,左框折尸心和羽 说明:已半巳满不出己:指的是“已”,“巳”,“己”三个字的不同之处,“已”字半封口,“…