目录

FRDM-K64F-IEEE1588硬件时间戳测试

目录

FRDM-K64F IEEE1588硬件时间戳测试

开发板FRDMK64F用了三周了。

硬件时间戳的作用:

https://i-blog.csdnimg.cn/blog_migrate/3dfd393b11e8631f067334af92a2101c.png 上图中的t1为物理层芯片发送数据的时间,t2为物理层芯片接收到数据的时间。如果采用软件实现,要经过MAC芯片的缓冲,然后交给驱动,再交给协议栈,最后由应用程序从硬件时钟获取时间,中间经历的过程非常复杂,导致校时精度不高,另外当处理器繁忙时会进一步降低精度,如果用于数字音频会无法满足精度要求。

所以高精度校时需要硬件支持PTP时间戳功能。

FRDM-K64F的硬件时间戳功能测试:

协议栈使用LWIP,无操作系统,要实现PTPv2的内容。

PTPv2的文档为IEEE 1588-2008,v1为IEEE 1588-2002,还有IEEE 802.1AS-2011。

通过飞思卡尔的官方库读取MAC中IEEE 1588的硬件时间戳。

发送时间戳的读取:

使用例子中的UDP协议发送SYNC数据包后,可以读出对应的时间戳,输出如下:

https://i-blog.csdnimg.cn/blog_migrate/6916358ecf1423c495c116952cc839d1.png

Get the 5-th time 6 second, 728335220 nanosecond:这种输出为直接读取IEEE1588的时间戳。

The 6 frame transmitted success! the timestamp is 16 second, 912475760 nanosecond:这种输出为,通过UDP发送自己构造的SYNC数据帧后,读取到的对应的时间戳。

接收时间戳的读取:

由于没有找到在Windows运行的PTPv2的测试软件,为了测试接收SYNC数据包的时间戳功能,用C++编写了一个可以发送任意数据包的程序。发送构造的SYNC数据包。输出如下:

A frame received. the length 60 Dest Address ff:ff:ff:ff:ff:ff Src Address 50:9a:4c:2d:f4:6a 08-06

A frame received. the length 77 the timestamp is 105 second, 896954860 nanosecond

Dest Address ff:ff:ff:ff:ff:ff Src Address 8c:ec:4b:bb:da:df 88-f7

A frame received. the length 1000 the timestamp is 105 second, 925657900 nanosecond

Dest Address 01:00:5e:01:01:01 Src Address 8c:ec:4b:bb:da:df 08-00

A frame received. the length 60 Dest Address ff:ff:ff:ff:ff:ff Src Address 3c:46:d8:5d:c7:b1 88-99

其中88-f7和08-00是二层网络协议的type字段。

08-00的是IP类型,UDP发送的SYNC数据包。

88-f7的是PTPv2中增加的专用类型。在二层协议上直接发送SYNC数据包。

结果为可以对PTPv2版本的数据包增加时间戳。

之后的测试发现PTPv1版本的SYNC数据包也可以获取时间戳。

https://i-blog.csdnimg.cn/blog_migrate/835955e8dc9f76a90a29960c68569ba4.png

上图为Wireshark抓取的网络数据包,可以看到里面的PTPv1版本的Sync报文。但是开发板的输出中却没有看到时间戳输出,如下图:

https://i-blog.csdnimg.cn/blog_migrate/47180d2a57991c2ee34e1fc6494ab3d6.png

SYNC数据包测试程序:

任意数据包发送是通过WinPcap来实现的。网上还有WSASocket的资料,但是创建socket时失败,所以就放弃了,并且win10中增加了各种限制,可能不适合某些测试要求。

WinPcap代码编写简单,并且发送的数据包没有限制,可以方便做各种测试。

WinPcap官方也提供开发包,和简单易懂的例子程序。WinPcap开发包的下载地址见下图。

https://i-blog.csdnimg.cn/blog_migrate/7bdacbfb4a03d13b79814faa7cad47e0.png

需要安装WinPcap软件才能使用。工作原理为通过一个过滤驱动程序直接向网卡发送数据, 出了能发送数据包外,还能截获网卡的数据包。

意外收获:

1.如果时间戳能达到1纳秒的精度,1纳秒相当于光前进0.3米的距离,所以用于无线定位。

2.通过WinPcap可以做很多网络测试程序,也可用用来实验协议栈。