歡迎淘寶搜索飛靈科技,我司相關(guān)新產(chǎn)品陸續(xù)上線。
這幾天在為一個(gè)網(wǎng)絡(luò)控制器實(shí)現(xiàn)IEEE 1588單步時(shí)間戳的驅(qū)動(dòng),幾經(jīng)調(diào)試終于完工了。順便分享一下調(diào)試方法,當(dāng)然如果你想玩1588的單步時(shí)間戳,首先得有支持這個(gè)功能的硬件平臺(tái)。如果對(duì)1588報(bào)文單步時(shí)間戳不了解,可以查看我之前的文章“IEEE 1588 Sync報(bào)文單步時(shí)間戳”。平臺(tái)和工具
我用的平臺(tái)就不透露了,測試使用兩塊板子,網(wǎng)口直連。用到的軟件包括,- Linux:這是我板子的OS,包含我要驗(yàn)證的驅(qū)動(dòng)。
- tcpdump:抓包工具,位于板子的文件系統(tǒng)。
- linuxptp:開源PTP軟件,位于板子的文件系統(tǒng)。
- Wireshark,Windows電腦上的軟件,用來查看抓包文件。
- 兩個(gè)板子網(wǎng)口直連,啟動(dòng)Linux。
- 配置IP地址,確保兩個(gè)網(wǎng)口能ping通。
- 一個(gè)板子做接收,運(yùn)行tcpdump抓包,可直接查看,也可以保存成pcap文件在Wireshark中打開查看。
- 另一個(gè)板子做發(fā)送,運(yùn)行ptp4l做master,發(fā)送單步Sync報(bào)文。
發(fā)送方命令
使用L2 Ethernet協(xié)議,運(yùn)行ptp4l做master,發(fā)送單步時(shí)間戳Sync報(bào)文
#?ptp4l?-i?eth0?-m?--twoStepFlag=0?-2
ptp4l[613.615]:?selected?/dev/ptp0?as?PTP?clock
ptp4l[613.652]:?port?1:?INITIALIZING?to?LISTENING?on?INIT_COMPLETE
ptp4l[613.653]:?port?0:?INITIALIZING?to?LISTENING?on?INIT_COMPLETE
ptp4l[619.801]:?port?1:?LISTENING?to?MASTER?on?ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[619.802]:?selected?local?clock?00e00c.fffe.001600?as?best?master
ptp4l[619.802]:?port?1:?assuming?the?grand?master?role
使用UDP/IPv4協(xié)議,運(yùn)行ptp4l做master,發(fā)送單步時(shí)間戳Sync報(bào)文
#?ptp4l?-i?eth0?-m?--twoStepFlag=0
ptp4l[636.150]:?selected?/dev/ptp0?as?PTP?clock
ptp4l[636.152]:?port?1:?INITIALIZING?to?LISTENING?on?INIT_COMPLETE
ptp4l[636.153]:?port?0:?INITIALIZING?to?LISTENING?on?INIT_COMPLETE
ptp4l[643.497]:?port?1:?LISTENING?to?MASTER?on?ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[643.497]:?selected?local?clock?00e00c.fffe.001600?as?best?master
ptp4l[643.497]:?port?1:?assuming?the?grand?master?role
接收方命令和結(jié)果
使用tcpdump直接查看接收?qǐng)?bào)文完整的數(shù)據(jù)
#?tcpdump?-i?eth0?-xx
可以看到對(duì)L2 Ethernet報(bào)文和UDP/IPv4報(bào)文,PTP消息的correctionField和originTimestamp字段的數(shù)值,直接就解析出來了
。L2 Ethernet:
UDP/IPv4:
結(jié)束語
Sync報(bào)文發(fā)送的硬件時(shí)間戳應(yīng)該是originTimestamp和correctionField相加。根據(jù)1588標(biāo)準(zhǔn)的規(guī)定,originTimestamp和實(shí)際發(fā)送硬件時(shí)間戳差值不能超過1s,所以對(duì)具體的硬件,如果originTimestamp是在發(fā)送報(bào)文前由軟件填寫的,那么一定要在填寫后立即發(fā)送,使得correctionField不能超過1s。當(dāng)前驗(yàn)證的硬件就是這種實(shí)現(xiàn),所以correctionField在2us多,應(yīng)該還是合理的。如果硬件做單步時(shí)間戳的同時(shí),又支持回寫時(shí)間戳,那就可以拿回寫時(shí)間戳和單步時(shí)間戳(originTimestamp correctionField)比較。如果相等,就說明硬件工作沒有問題。