Gmock使用(gmock retiresonsaturation)

Gmock使用(gmock retiresonsaturation)本文章基于 stm32 官方例程实现 详细代码可下载例程 在 RT thread 系统上实现 1588 协议 网络驱动上需要做较多的修改 nbsp 当 Accumulator register 溢出之后 会增加 subsecond register 一个步长 这个步长为 constant value 每个时钟周期 nbsp Accumulator register 会加上 nbsp

大家好,我是讯享网,很高兴认识大家。



本文章基于stm32官方例程实现,详细代码可下载例程。

在RT-thread系统上实现1588协议,网络驱动上需要做较多的修改。 

STM32 ymodem协议 主机_时间同步
讯享网

当Accumulator register,溢出之后,会增加subsecond register一个步长,这个步长为constant value;每个时钟周期 Accumulator register会加上 addend register的值,这样做的目的是调整 subsecond register 增加的周期。

为Accumulator register提供clock的位系统时钟 HCLK,一般为72MHz,而 subsecond register 增加的频率需要为50MHz。

subsecond register的最大值为2^31,把2^31作为1秒钟,那么每20ns subsecond register需要增加 20ns  * (2^31) / 10^9ns = 43 ,即constant value 为43.。

Accumulator register 溢出时间为 49 *10^9 / (2^31) ~= 20.023ns

 Addend / 2^32 = (1 / 20ns) /72mhz    换算单位之后 Addend = .90

原代码的DMA描述符如下:

接收函数也做类似的更改,还有中断函数直接参照例程修改就可以。

1588协议中,定义了两种报文,事件报文和通用报文;

事件报文时间概念报文,进出设备端口时打上精确的时间戳,PTP根据事件报文携带的时间戳,计算链路延迟。事件报文包含以下4种:Sync、Delay_Req、Pdelay_Req和Pdelay_Resp。

通用报文:非时间概念报文,进出设备不会产生时间戳,用于主从关系的建立、时间信息的请求和通告。通用报文包含以下6种:Announce、Follow_Up、Delay_Resp、Pdelay_Resp_Follow_Up、Management和Signaling,目前设备不支持Management、Signaling报文。

时钟同步的实现主要包括3个步骤:

  1. 建立主从关系,选取最优时钟、协商端口主从状态等。
  2. 频率同步,实现从节点频率与主节点同步。
  3. 时间同步,实现从节点时间与主节点同步。

协议初始化之后,开始监听网络,master会主动发送sync、Announce包,slave收到Announce后,添加主机(addForeign函数实现),并对其进行**主时钟算法(BMC)比较。

主从关系建立步骤

PTP是通过端口接收到和发送Announce报文,实现端口数据集和端口状态机信息的交互。BMC(Best Master Clock)算法通过比较端口数据集和端口状态机,实现时钟主从跟踪关系。一般按照下面几个步骤来建立:

  1. 接收和处理来自对端设备端口的Announce报文。
  2. 利用BMC算法决策出最优时钟和端口的推荐状态,包括Master、Slave或者Passive状态。
  3. 根据端口推荐状态,更新端口数据集合。
  4. 按照推荐状态和状态决策事件,根据端口状态机决定端口的实际状态,实现时钟同步网络的建立。状态决策事件包括Announce报文的接收事件和接收Announce报文的超时时间结束事件,当接口接收Announce报文的时间间隔大于超时时间间隔时,将此PTP接口状态置为Master。

BMC算法

  • Priority1:时钟优先级1,支持用户配置,取值范围是0~255,取值越小优先级越高。
  • ClockClass:时钟级别,定义时钟的时间或频率的国际原子时TAI(International Atomic Time)跟踪能力。
  • ClockAccuracy:时钟精度,取值越低精确度越高。
  • OffsetScaledLogVariance:时钟稳定性。
  • Priority2:时钟优先级2,支持用户配置,取值范围是0~255,取值越小优先级越高。

  • 单步时钟模式(One step),指事件报文Sync和Pdelay_Resp带有本报文发送时刻的时间戳,报文发送和接收的同时也完成了时间信息的通告。
  • 两步时钟模式(Two step),指事件报文Sync和Pdelay_Resp不带有本报文发送时刻的时间戳,而分别由后续的通用报文Follow_Up和Pdelay_Resp_Follow_Up带上该Sync和PDelay_Resp报文的发送时间信息。两步时钟模式中,时间信息的产生和通告分两步完成,这样可以兼容一些不支持给事件报文打时间戳的设备。

PTP时间同步有两种不同的同步方式:Delay方式和Pdelay方式,如此划分主要是由于PTP计算路径延时有两种机制。

  • 延时请求-请求响应机制E2E(End to End):根据主从时钟之间的整体路径延时时间计算时间差。
  • 对端延时机制P2P(Peer to Peer):根据主从时钟之间的每一条链路延时时间计算时间差。

fg

对端延时机制P2P(Peer to Peer)

STM32 ymodem协议 主机_时间戳_02

小讯
上一篇 2025-04-19 12:23
下一篇 2025-05-01 13:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/178957.html