问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

USB协议详解:帧首包SOF(Start of Frame)深度解析

创作时间:
作者:
@小白创作中心

USB协议详解:帧首包SOF(Start of Frame)深度解析

引用
1
来源
1.
https://www.cnblogs.com/linhaostudy/p/18503782

USB协议中的帧首包SOF(Start of Frame)是确保设备同步和数据传输准确性的关键组件。本文将详细介绍SOF包的结构、功能及其在USB总线中的作用,并通过STM32的具体实例展示其处理机制。

包的四种类型

根据包的组成,USB协议将包分为四种类型:帧首包SOF(Start of Frame)、命令包(Token)、数据包(Data)和握手包(Handshake)。这四种类型的包在USB通信中扮演着不同的角色。

四种PID类型和四种包类型(按照组成分类)的区别如下:

  • PID类型:包括同步包、数据包、握手包和预留类型。
  • 包类型:包括帧首包SOF、命令包、数据包和握手包。

SOF包组成

SOF包由USB主机控制器以全速总线的标称速率每1.00 ms±0.0005 ms发出一次,对于高速总线则为125μs±0.0625μs。SOF数据包由PID域+帧号域+5bit CRC域组成。

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

SOF包的发送时间和USB总线的包数据结构如下:

SOF包的发送时间

USB总线包组成

USB总线包由多个部分组成,包括同步段、PID字段、数据段和CRC校验段。

SOF包的其他核心概念

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

SOF包的主要作用:

  1. 帧同步:SOF包作为帧的起始标记,使得所有的USB设备能够同步到同一个时间基准上。通过SOF包,所有设备可以准确地知道当前处于哪个帧,从而实现同步通信。

  2. 时钟同步:SOF包的周期性发送有助于USB设备保持内部时钟的准确性。设备可以通过检测SOF包的到来来调整自己的时钟,保证系统时钟的同步。

  3. 唤醒设备:SOF包可以用来唤醒处于低功耗状态的USB设备。当设备检测到SOF包时,会从休眠状态中恢复,准备进行数据传输。

  4. 周期性传输调度:SOF包的周期性发送为USB设备提供了固定的时间基准,使得设备可以根据SOF包来安排周期性的数据传输。

  5. 错误检测:SOF包中的CRC校验可以帮助检测数据传输过程中的错误。如果设备收到的SOF包校验失败,则可以判定数据传输可能存在问题。

SOF包的发送:

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

STM32 SOF包处理机制

STM32对SOF包的处理代码如下:

//读出的中断标志是SOF中断标志,且SOF中断使能了
if (wIstr & ISTR_SOF & wInterrupt_Mask)
{
    //清除SOF中断标志
    _SetISTR((uint16_t)CLR_SOF);
    //统计共接收到多少SOF
    bIntPackSOF++;    

    //当定义了SOF_CALLBACK,则调用SOF_Callback,
    //像钩子函数一样,在发生SOF中断时做点什么 
    SOF_Callback();    
}

这段代码展示了STM32如何处理SOF中断,包括清除中断标志、统计接收到的SOF包数量以及调用回调函数。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号