崔永俊,韓一德,郭 峰
(中北大學(xué)儀器與電子學(xué)院,儀器科學(xué)與動態(tài)測試教育部重點實驗室,電子測試技術(shù)國防科技重點實驗室,山西太原 030051)
時鐘同步系統(tǒng)目前廣泛應(yīng)用在分布式數(shù)據(jù)采集、測試測量、數(shù)字變電站及工業(yè)控制應(yīng)用等領(lǐng)域。多個設(shè)備間為了實現(xiàn)實時采集、測試及控制,要求各設(shè)備中的時鐘保持較高的同步精度。目前時鐘同步方案主要包括IRIG-B碼時鐘同步、GNSS時間服務(wù)器同步、NTP網(wǎng)絡(luò)時間協(xié)議同步、SNTP簡單網(wǎng)絡(luò)時間協(xié)議同步和PTP精確時間協(xié)議同步。其中GNSS時間服務(wù)器同步是將GPS/BD衛(wèi)星時間作為統(tǒng)一標準傳輸?shù)礁髟O(shè)備節(jié)點,可同步多臺設(shè)備且授時精度較高。NTP及SNTP協(xié)議以時鐘源網(wǎng)站為時鐘標準,多應(yīng)用于μs級的PC標準時間等互聯(lián)網(wǎng)時鐘同步應(yīng)用。PTP精確時間協(xié)議同步即IEEE1588協(xié)議,通過采用GPS/BD衛(wèi)星時鐘信號及網(wǎng)絡(luò)時鐘為時鐘源,在NTP協(xié)議基礎(chǔ)上實現(xiàn)標記硬件時間戳提高授時同步精度,適用于工業(yè)測量控制等應(yīng)用[1]。本文對PTP協(xié)議進行移植,采用硬件STM32F407、DP83640物理層芯片和軟件PTPd2(IEEE1588協(xié)議源碼)實現(xiàn)了硬件時間戳的標記,減少了由于軟件協(xié)議棧處理沖突等因素引入的延遲干擾,進一步提高了同步精度[2]。
IEEE1588是高精度時鐘同步協(xié)議,在時鐘同步過程中。主時鐘與各從時鐘之間互相交換包含時間戳信息的報文,各從時鐘通過報文中的時間戳信息計算與主時鐘間的鏈路延遲與時間偏差,進而調(diào)整本地時鐘與主時鐘實現(xiàn)同步。主從時鐘同步原理如圖1所示。
同步報文分為4鐘報文:Sync同步報文,由主時鐘端發(fā)送到從時鐘端,攜帶從時鐘端打的t1時間戳;Follow_up跟隨報文,跟隨主時鐘發(fā)出的Sync同步報文發(fā)出,攜帶主時鐘端打的t1時間戳;Delay_req延時請求報文,從時鐘端發(fā)送到主時鐘端,攜帶從時鐘端打的t3時間戳;Delay_resp延時請求響應(yīng)報文,主時鐘端發(fā)送到從時鐘端,攜帶主時鐘端打的t4時間戳和請求的端口ID。
一次時鐘同步過程分為4步:
(1)主時鐘在t1時刻向從時鐘發(fā)送Sync同步報文,隨后t1時間存放在Follow_up跟隨報文中發(fā)送給從時鐘。
(2)從時鐘在t2時刻接收Sync同步報文,并從Follow_up跟隨報文中獲取t1時間戳。
(3)從時鐘在t3時刻發(fā)送Delay_req延時請求報文給主時鐘。
(4)主時鐘在t4時刻接收到Delay_req延時請求報文,并發(fā)送包含t4時間戳的Delay_resp延時請求響應(yīng)報文給從時鐘。
在一次時鐘同步完成后,從時鐘獲取到t1、t2、t3、t44個時間戳,利用這4個時間戳首先計算主從時鐘間的平均路徑延遲Delay:
(1)
由時鐘偏差Offset與平均路徑延遲Delay關(guān)系:
Offset=t2-t1-Dealy
(2)
繼而計算出主從時鐘間的時鐘偏差Offset:
(3)
同步系統(tǒng)結(jié)構(gòu)圖如圖2所示。IEEE1588時間同步系統(tǒng)中通過GPS/BD衛(wèi)星輸出1PPS信號給主時鐘提供同步信號,主時鐘與從時鐘均采用STM32F407和物理層芯片DP83640構(gòu)成,二者采用RMII接口連接,50 MHz有源晶振提供參考時鐘,參考時鐘主要用于同步報文的接收發(fā)送及PTP時鐘的速率調(diào)節(jié)。從時鐘數(shù)量依據(jù)實際測試需求調(diào)整,主時鐘在一個時鐘同步系統(tǒng)中時鐘精度最高且只有一個。
進行時鐘同步時,主從時鐘通過周期性的交換包含硬件時間戳的同步報文,計算主從時鐘之間的時鐘偏差值,在本地參考時鐘的作用下對時鐘速率進行調(diào)節(jié),增添或減少偏差值實現(xiàn)從時鐘的穩(wěn)定。
系統(tǒng)硬件主要包括STM32F407主控模塊和物理層芯片DP83640。硬件平臺如圖3所示。
STM32F407處理器支持IEEE1588協(xié)議,自身同樣具有在MAC層的MII/RMII接口處標記時間戳功能,同時可對本地PTP時鐘頻率進行粗調(diào)和細調(diào)校正。在需要實現(xiàn)包含多個從時鐘設(shè)備進行時鐘同步時,STM32F407系列CPU芯片價格低廉,相對FPGA與其他ARM處理器芯片具有更高的性價比[3]。但僅采用STM32F407實現(xiàn)的IEEE1588協(xié)議是標記時間戳在MAC數(shù)據(jù)鏈路層,相比于物理層時間戳精度較低。
物理層芯片DP83640為集成了IEEE1588精密時鐘協(xié)議硬件支持功能的以太網(wǎng)芯片。DP83640應(yīng)用框圖如圖4所示,DP83640主要包括以太網(wǎng)物理層接口、IEEE1588時鐘、IEEE1588控制和IEEE1588包檢測處理程序。
DP83640可以實現(xiàn)在物理層最靠近網(wǎng)線的地方對數(shù)據(jù)包標記時間戳,并將時間戳存儲在芯片內(nèi)的時間戳寄存器中,同時DP83640具有自動標記時間戳功能,使能相應(yīng)功能后,DP83640會自動識別PTP報文并將時間戳標記在發(fā)送與接收的報文中。DP83640提供12個GPIO口,使能相應(yīng)管腳功能后,可對外部中斷事件例如上升沿、下降沿標記時間戳,也可以通過相應(yīng)GPIO口輸出定時脈沖提供給自身或其他設(shè)備使用[4]。
系統(tǒng)軟件架構(gòu)如圖5所示,主要包括物理層DP83640、MAC層STM32F407、傳輸層Lwip協(xié)議棧和應(yīng)用層IEEE1588協(xié)議。
時鐘設(shè)備處于主時鐘狀態(tài)時,PTP報文由主時鐘應(yīng)用層產(chǎn)生,采用UDP報文通信,PTP報文采用Lwip協(xié)議棧的UDP_API接口傳遞給MAC層,MAC層接口采用RMII接口與物理層連接并傳遞UDP報文,物理層DP83640中的時間戳模塊記錄并插入包含當前報文到達時間的時間戳在PTP報文中,通過RJ45接口發(fā)送給從時鐘。
時鐘設(shè)備處于從時鐘狀態(tài)時,接收到IP報文的DP83640記錄包含在PTP報文中的時間戳信息,同時發(fā)送含有當前時間戳的UDP報文給MAC層,IP報文經(jīng)過MAC層和傳輸層的報文解封,剝離出PTP報文數(shù)據(jù)發(fā)送給IEEE1588協(xié)議實現(xiàn)對時間戳信息的提取,之后運行最佳主時鐘算法和時鐘同步算法,調(diào)節(jié)本地時鐘完成主從時鐘同步[5-6]。
2.2.1 IEEE1588協(xié)議處理流程
STM32F407完成各協(xié)議的初始化后,IEEE1588協(xié)議進入PTP_Initializing狀態(tài),系統(tǒng)運行最佳主時鐘算法判別當前時鐘狀態(tài)。IEEE1588協(xié)議處理流程如圖6所示。
若當前時鐘處于主時鐘狀態(tài),主時鐘向從時鐘依次發(fā)送Sync同步報文和Follow_up跟隨報文,等待接收報文,記錄報文到達時間并解包。主時鐘判別當前報文是否為從時鐘發(fā)送的Delay_req延時請求報文,若是,則向從時鐘發(fā)送Delay_resp延時請求響應(yīng)報文并繼續(xù)發(fā)送Sync同步報文和Follow_up跟隨報文,若否,繼續(xù)等待接收報文。
若當前時鐘處于從時鐘狀態(tài),從時鐘等待接收從主時鐘發(fā)送的報文,若為Sync同步報文,繼續(xù)等待接收報文,當接收到Follow_up跟隨報文,記錄Follow_up跟隨報文包含的時間戳t1,并向主時鐘發(fā)送Delay_req延時請求報文,之后當接收到主時鐘發(fā)送來的Delay_resp延時請求報文,記錄其包含的時間戳t4,根據(jù)記錄的4個時間戳計算時鐘偏差并修正本地時鐘。
2.2.2 Lwip協(xié)議棧
Lwip是輕型(Light Weight)IP開源協(xié)議棧,保持TCP/IP協(xié)議主要功能的同時對RAM等資源占用量少,適合在STM32F407處理器中使用,有無操作系統(tǒng)均可運行。
Lwip協(xié)議棧主要實現(xiàn)與MAC層的通信接口及上層應(yīng)用層的通信接口建立。與MAC層通信時,Lwip協(xié)議棧調(diào)用low_level_output()函數(shù)將封裝好的IP報文復(fù)制到DMATxDescToSet描述符指向的緩存,etharp_output函數(shù)將IP報文封裝為以太網(wǎng)幀后,調(diào)用linkoutput函數(shù)將數(shù)據(jù)包經(jīng)由MAC層發(fā)出。接收到報文時,low_level_input()函數(shù)對DMA描述符輪詢檢查,當DMA描述符緩存中存有報文時,將報文復(fù)制到pbuf結(jié)構(gòu)體中,由Lwip協(xié)議棧對報文進行處理[6-7]。
與應(yīng)用層通信時,Lwip采用Nerconn API標準接口,報文封裝在netbuf中,調(diào)用netconn_bind()函數(shù)將本地IP地址addr與UDP端口號319、320綁定,建立網(wǎng)絡(luò)連接。后調(diào)用netconn_recv()接收函數(shù)和netconn_send()發(fā)送函數(shù)實現(xiàn)報文的發(fā)送與接收,接收到的報文由IEEE1588協(xié)議進行處理[8-9]。
2.2.3 本地時鐘調(diào)節(jié)
DP83640對本地時鐘調(diào)節(jié)有相位調(diào)整和頻率調(diào)整[10]。相位調(diào)整采用單步調(diào)整,當本地時鐘比主時鐘運行慢時,調(diào)整值為正值,由于DP83640內(nèi)部會對單步調(diào)整值進行16 ns的補償,因此調(diào)整寄存器中的值應(yīng)為調(diào)整值的基礎(chǔ)上增加16 ns。當本地時鐘比主時鐘運行快時,調(diào)整值為負值。
頻率調(diào)整采用固定速率調(diào)整和臨時速率調(diào)整相結(jié)合的方式糾正本地時鐘和主時鐘之間的頻率偏差。固定速率調(diào)整量為固定的2-32ns。臨時速率調(diào)整為短時間的速率調(diào)整,將臨時速率值及持續(xù)時間寫入臨時速率控制寄存器PTP_TEDH和PTP_TEDL,持續(xù)時間結(jié)束后返回固定速率調(diào)整。
本文采用衛(wèi)星時鐘作為授時源,分別采用主從時鐘直連和主從時鐘通過交換機相連的方式對主從時鐘同步精度進行測試及結(jié)果分析。
主從時鐘直連同步測試為主從時鐘通過板上的RJ45接口用網(wǎng)線連接,設(shè)置同步時間間隔為1 s,每秒主時鐘發(fā)送1次Sync同步報文,主從時鐘的時間偏差通過串口輸出,時間偏差值的統(tǒng)計分析結(jié)果如圖7所示。
進行250次同步后,主從時鐘最大時鐘偏差為121 ns,時鐘偏差基本分布在±100 ns之間,精度優(yōu)于±150 ns。
如圖1所示,主從時鐘之間通過100 MHz交換機連接,設(shè)置同步時間間隔為1 s,結(jié)果如圖8所示。
進行250次同步后,主從時鐘最大時鐘偏差為-196 ns,時鐘偏差基本分布在150 ns之間,精度優(yōu)于±200 ns。相比于主從時鐘直連方式,采用交換機相連由于存在往返時延不對稱形成非對稱鏈路,增大了時鐘偏差計算誤差,造成同步精度下降。考慮若采用支持IEEE1588交換機,降低時延不對稱性,可提高一定的同步精度。
本文基于IEEE1588協(xié)議,設(shè)計了軟件與硬件結(jié)合的高精度時間同步系統(tǒng),并在硬件平臺測試中實現(xiàn)了主從兩個時鐘設(shè)備的同步,并達到了一定的同步精度。且隨著時鐘設(shè)備的增加,網(wǎng)絡(luò)負載也會增大,需要進一步對系統(tǒng)拓補結(jié)構(gòu)進行優(yōu)化,增加一定的網(wǎng)絡(luò)元件,如透明千兆交換機等,從而提供具有更高同步精度的時鐘同步系統(tǒng)。