首页 > 其他分享 >USB协议详解第20讲(USB包-帧首包SOF)

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

时间:2024-10-26 10:58:06浏览次数:5  
标签:20 USB SOF 中断 总线 发送 数据包

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

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包。

(1)SOF包的主要作用:

  1. 帧同步: SOF 包作为帧的起始标记,使得所有的 USB 设备能够同步到同一个时间基准上。通过 SOF 包,所有设备可以准确地知道当前处于哪个帧,从而实现同步通信。
  2. 时钟同步: SOF 包的周期性发送有助于 USB 设备保持内部时钟的准确性。设备可以通过检测 SOF 包的到来来调整自己的时钟,保证系统时钟的同步。
  3. 唤醒设备: SOF 包可以用来唤醒处于低功耗状态的 USB 设备。当设备检测到 SOF 包时,会从休眠状态中恢复,准备进行数据传输。
  4. 周期性传输调度: SOF 包的周期性发送为 USB 设备提供了固定的时间基准,使得设备可以根据 SOF 包来安排周期性的数据传输。
  5. 错误检测: SOF 包中的 CRC 校验可以帮助检测数据传输过程中的错误。如果设备收到的 SOF 包校验失败,则可以判定数据传输可能存在问题。

(2)SOF包的发送:

  • SOF 包由 USB 主机周期性地发送,其发送频率取决于 USB 总线的速率。
  • 全速 USB 总线每毫秒发送一个 SOF 包,而高速 USB 总线每 125 微秒发送一个 SOF 包。

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
}

标签:20,USB,SOF,中断,总线,发送,数据包
From: https://www.cnblogs.com/linhaostudy/p/18503782

相关文章

  • 鲜花-CSP2024 游记
    前言坐标\(\text{SX}\),去年\(\text{CSP}\)和\(\text{NOIP}\)都爆炸了,于是这就是我最后一年了。初赛赛前随便做了三份题,可以随便过线就放下不管了。赛时光速写完选择,然后被状压题硬控,没太看懂在求什么,有点慌乱,后面的完善程序二分题很快写上去了,但是\(K\)短路完全没学过,......
  • 2024年工作笔记
    CMake相关CMake从基础到高级技巧#根据操作系统类型安装不同的文件if(CMAKE_SYSTEM_NAMESTREQUAL"Linux")install(FILES"linux_specific_file.conf"DESTINATIONetc)elseif(CMAKE_SYSTEM_NAMESTREQUAL"Windows")install(FILES"windows_speci......
  • 文档透明加密系统怎么用?五款透明加密软件汇总!2024热门推荐,实测分享!
    数据泄露事件频发,让无数企业谈之色变。想要自动对存储在计算机上的文档进行加密吗?怎么在不影响日常工作的前提,确保文档在存储和传输过程中的安全?透明加密系统来助力!本文,将详细介绍文档透明加密系统的使用方法,并汇总五款2024年热门的透明加密软件。文档透明加密系统是什么......
  • 数据防泄漏dlp厂商排名 | 十家数据防泄漏dlp厂商推荐,赶快码住!(2024最新)
    数据泄露事件频发,你是否正在寻找可靠的数据防泄漏(DLP)解决方案?2024年的数据防泄漏市场,哪些DLP厂商能够脱颖而出,成为企业信赖的守护者?为了帮助您更好地了解当前DLP市场的最新动态,我们精心挑选了十家备受推崇的DLP厂商。它们凭借卓越的技术实力、全面的解决方案和优质的服务,......
  • 2024.10.26 InfiniCLOUD WebDAV 简易登录器
     2024.10.26InfiniCLOUDWebDAV简易登录器  ;;2024.10.26InfiniCLOUDWebDAV简易登录器;;C:\APP\WinSCP\AHK\InfiniCLOUD.ahk;;WinSCP一键登录InfiniCLOUD的WebDAV文件服务的AutoHotkey脚本源代码#SingleInstance,force#Persistent;身份验证,请使用飞......
  • 读数据工程之道:设计和构建健壮的数据系统20数据工程存储抽象
    1. 数据工程存储抽象1.1. 数据工程存储抽象是数据组织和查询模式,位于数据工程生命周期的核心,建立在之前讨论的数据存储系统之上1.2. 关键的考虑1.2.1. 目的和用例1.2.1.1. 必须首先确定存储数据的目的1.2.2. 更新模式1.2.2.1. 是否针对批量更新、流式插入或......
  • Windows 10 on ARM, version 22H2 (updated Oct 2024) ARM64 AArch64 中文版、英文版
    Windows10onARM,version22H2(updatedOct2024)ARM64AArch64中文版、英文版下载基于ARM的Windows10请访问原文链接:https://sysin.org/blog/windows-10-arm/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org基于ARM的Windows10起初,Windows10(与Wi......
  • Windows 10 version 22H2 (updated Oct 2024) 中文版、英文版下载
    Windows10version22H2(updatedOct2024)中文版、英文版下载Windows1022H2企业版arm64x64请访问原文链接:https://sysin.org/blog/windows-10/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWindows10更新历史记录Windows10,version22H2,alledit......
  • java学习10.25企业ERP生产计划管理系统(20分)
    今天成功的把这个项目写好了,就是文档中的一些具体的需求比较难写(由于之前没写过)所以项目能完成基本的增删改查和浏览操作。使用技术栈mybatis+thymeleft+mysql比较复杂,写的东西比较多,以后学了springboot会更简便一些整体架构具体页面源代码通过百度网盘分享的文件:企......
  • [Ynoi2015] 盼君勿忘 题解
    CSP前学习珂学,祝自己\(while(1)\rp++\)。考虑求解出每种数对答案的贡献。设\(t=r-l+1,k_x=\sum\limits_{i=l}^r[a_i=x]\),由容斥得贡献为\(x(2^t-2^{t-k_x})\)。求解\(k_x\),考虑莫队,时间复杂度为\(O(n\sqrtn)\),这也是本题的复杂度上限。由于\(p\)会变,所以不能用莫......