本文章基于stm32官方例程实现,详细代码可下载例程。
在RT-thread系统上实现1588协议,网络驱动上需要做较多的修改。
当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个步骤:
- 建立主从关系,选取最优时钟、协商端口主从状态等。
- 频率同步,实现从节点频率与主节点同步。
- 时间同步,实现从节点时间与主节点同步。
协议初始化之后,开始监听网络,master会主动发送sync、Announce包,slave收到Announce后,添加主机(addForeign函数实现),并对其进行**主时钟算法(BMC)比较。
主从关系建立步骤
PTP是通过端口接收到和发送Announce报文,实现端口数据集和端口状态机信息的交互。BMC(Best Master Clock)算法通过比较端口数据集和端口状态机,实现时钟主从跟踪关系。一般按照下面几个步骤来建立:
- 接收和处理来自对端设备端口的Announce报文。
- 利用BMC算法决策出最优时钟和端口的推荐状态,包括Master、Slave或者Passive状态。
- 根据端口推荐状态,更新端口数据集合。
- 按照推荐状态和状态决策事件,根据端口状态机决定端口的实际状态,实现时钟同步网络的建立。状态决策事件包括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)



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