王 旭,陳 曄,2,鄭 賓,2
(1.中北大學 電氣與控制工程學院,太原 030051;2.中北大學 電子測試技術國家重點實驗室,太原 030051)
隨著測試技術的發(fā)展,單一獨立測試設備已不能滿足現(xiàn)代測試要求,測試任務大多需要將不同測試設備連接起來構成分布式測試系統(tǒng)才能完成。而對于分布式測試系統(tǒng)來說,時間同步是保證數(shù)據(jù)有效的重要前提。若各測試節(jié)點或測試子系統(tǒng)的時間同步精度不足,即使得到了測試數(shù)據(jù),也無法對測試結果(包括速度,壓力,加速度等)進行準確的分析。國內外許多專家學者針對此問題進行了大量研究和探索,如:文獻[2,5]研究了通過軟件實現(xiàn)PTP時鐘同步的方法。文獻[3,8]等進行了基于Cortex-A8的LXI觸發(fā)盒的軟件和硬件開發(fā)。目前,該研究方向存在的不足和問題在于:對于分布式測試系統(tǒng)時鐘同步和同步觸發(fā)技術而言,仍停留在理論階段,未能有效的將理論應用于實際測試系統(tǒng),并且上述提到的LXI 觸發(fā)盒技術在測試系統(tǒng)中并不通用,測試系統(tǒng)可以由不同的測試儀器構成,需要具有不同的觸發(fā)模式和功能。針對上述存在的問題,本文采用PTP精密時間協(xié)議通過基于ARM(STM32F407)設計時鐘同步與觸發(fā)單元對該分布式測試系統(tǒng)進行同步。
原分布式測試系統(tǒng)由若干個測試節(jié)點(每個測試節(jié)點即對應一個PXI儀器)組成,每相鄰的兩個測試節(jié)點之間相隔一定距離。原有測試系統(tǒng)的結構框圖如圖1。PXI儀器可以通過背板總線觸發(fā)實現(xiàn)同步測試,但是由于PXI 設備之間的時鐘同步精度不足,且觸發(fā)精度隨觸發(fā)線長度的增加而降低,導致觸發(fā)信號的精度無法滿足高精度同步測試的需求,于是通過在原有測試系統(tǒng)結構的基礎上改進,設計了基于ARM的時鐘同步與觸發(fā)單元為每個測試節(jié)點(每個測試節(jié)點對應一個通用測試儀器)提供高精度的時間基準信號,從而滿足同步測試的需求。改進后的分布式測試系統(tǒng)整體架構框圖如圖2。
圖1 原分布式測試系統(tǒng)結構框圖
PTP協(xié)議(Precision Time Protocol),又稱IEEE 1588協(xié)議,2002年由IEEE組織發(fā)布,并于2008年發(fā)布IEEE 1588V2標準。IEEE 1588實現(xiàn)時鐘同步過程為[1]:
1)主時鐘每隔一定時間(Sync_Interval)向從時鐘發(fā)送一條Sync(同步)報文,主節(jié)點記錄發(fā)送時間戳t1,但是t1不隨Sync一起發(fā)送,從時鐘在接收到Sync時記錄下時間戳t2。
2)主時鐘向從時鐘發(fā)送一條Follow_up(跟隨)報文,該報文內部含有(1)中發(fā)送Sync時記錄的t1時間戳。
3)從時鐘向主時鐘發(fā)送Delay_Request(延遲請求)報文,從時鐘端會記錄報文發(fā)出時的時間戳t3。
4)主時鐘在接收到延遲請求報文后記錄當前時間戳t4,并且返回給從時鐘Delay_Response(延遲請求響應報文),該報文內部包含時間戳t4,從時鐘收到此報文后,利用得到的t1,t2,t3,t4計算得到它和主時鐘的時間延遲[1],至此,一個同步周期結束。具體同步流程原理簡圖如圖3。
圖2 改進后分布式測試系統(tǒng)整體架構框圖
圖3 主從時鐘同步流程原理簡圖
同步計算過程包括延遲值(Delay)計算和偏移值(Offset)計算,延遲值為主從節(jié)點之間的報文傳輸延遲的平均值,偏移值為主從節(jié)點之間的時間偏差[2]。計算公式如下:
(1)
(2)
根據(jù)式(2)即可得到主從時鐘偏差。
根據(jù)IEEE 1588同步過程可知,決定時鐘同步精度的關鍵在于時間戳的獲取?,F(xiàn)有的獲取時間戳的方式有以下3種:
1)在網(wǎng)絡層獲取,這種方式是通過設置Linux內核中的時間選項為SO_TIMESTAMPNS從而得到報文到達網(wǎng)絡驅動層的精確時間,但實現(xiàn)的同步精度較差(最高達到10微秒級)。
2)在數(shù)據(jù)鏈路層(MAC)通過硬件獲取時間戳,該種方式需要借助支持PTP協(xié)議的MCU芯片完成,例如:通過STM32F407 ARM芯片實現(xiàn)亞微秒量級的同步,該種設計優(yōu)點是通用性較強。
3)在PHY物理層獲取,利用支持PTP協(xié)議的PHY芯片當接收到PTP事件報文時芯片會自動對時間戳進行標記[3]。該種方式獲取的時間戳精度理論上可以達到納秒級,但該種設計難度較大,并且增加設計成本。本文的設計采用基于在MAC層上獲取時間戳。
本設計基于對ARM的軟硬件設計實現(xiàn)主從節(jié)點之間的同步。
硬件系統(tǒng)的設計主要分為以下幾個模塊:電源/復位模塊,串口模塊,JTAG模塊,以太網(wǎng)通信模塊等。
而以太網(wǎng)通信模塊為整個硬件系統(tǒng)設計的核心,采用STM32F407 ARM芯片+LAN8720(普通以太網(wǎng)PHY芯片)組合實現(xiàn)以太網(wǎng)應用。由于STM32F407芯片內部集成MAC,則LAN8720(PHY芯片)可以直接和MCU相連。兩者之間通過RMII(簡化媒體獨立接口)進行通信。接口設計電路簡圖如圖4。
圖4 以太網(wǎng)硬件接口設計電路簡圖
下面簡要介紹下STM32的PTP特性。其內部集成的MAC能實現(xiàn)時間戳的獲取功能,支持發(fā)送幀和接受幀時間戳,主要特性包括以下兩個方面:
1)更新PTP時間。STM32使用 PTP 輸入?yún)⒖紩r鐘 HCLK 更新64位PTP時間[4]。
2)捕獲時間戳。當對STM32使能IEEE1588功能時,MAC通過識別報文的起始幀界定符SFD從而捕獲當前時間戳,以太網(wǎng)硬件驅動程序將對報頭進行解析,以區(qū)分出普通報文和PTP事件報文[5]。
2.2.1系統(tǒng)軟件架構
系統(tǒng)軟件架構如圖5所示。整個軟件設計的關鍵是PTP應用層軟件(PTP協(xié)議的實現(xiàn)),通過交換PTP報文信息實現(xiàn),而PTP協(xié)議報文使用UDP協(xié)議進行封裝和傳輸。UDP協(xié)議的實現(xiàn)需要TCP/IP協(xié)議棧。所以首先需要進行網(wǎng)絡協(xié)議棧的移植。本設計選用LwIP協(xié)議棧進行移植,以實現(xiàn)數(shù)據(jù)包傳輸功能。CMSIS-RTOS實時操作系統(tǒng)負責任務的切換和調度。標準外設驅動提供GPIO、定時器和串口等基本外設的驅動,以太網(wǎng)驅動提供以太網(wǎng)硬件設備的驅動。以太網(wǎng)驅動程序采用ST公司提供的Eth_Driver庫文件。標準外設驅動程序使用ST提供的Stm_std庫文件[6]。
圖5 系統(tǒng)軟件架構
2.2.2CMSIS-RTOS實時操作系統(tǒng)移植和LwIP協(xié)議棧移植
CMSIS-RTOS針對RTX實時操作系統(tǒng)的內核進行封裝,并演變?yōu)镵eil的一個組件,因此使用起來很簡便,具體移植工作主要分為兩部分。
1)添加內核文件:包含文件RTX_HAL和RTX_Kernel,分別用于設置RTX接口和內核。
2)配置RTX:通過RTX_Conf_CM.c對RTX進行配置,本設計根據(jù)所使用的主控芯片特性進行設置,配置操作系統(tǒng)主頻為168 MHz,設置系統(tǒng)時鐘節(jié)拍周期為1 000 μs,同時系統(tǒng)使能特權級模式[7]。
LwIP協(xié)議棧是一種輕型TCP/IP協(xié)議棧。其源碼內容包含3部分:doc(協(xié)議棧說明文檔),src(socket接口函數(shù),LwIP內核源碼以及相關的頭文件),test(LwIP的測試代碼)。而移植協(xié)議棧時,需要修改系統(tǒng)文件以適配操作系統(tǒng)。
2.2.3以太網(wǎng)硬件驅動實現(xiàn)
以太網(wǎng)硬件驅動函數(shù)具體需要實現(xiàn)的功能及函數(shù)如下:
1)網(wǎng)卡初始化函數(shù):low_level_init(),該函數(shù)實現(xiàn)對網(wǎng)卡結構體netif中相關字段的初始化操作,以建立穩(wěn)定的物理鏈路并建立接收線程[8]。
2)網(wǎng)絡數(shù)據(jù)發(fā)送函數(shù)low_level_output(),該函數(shù)的作用是將LwIP協(xié)議棧按網(wǎng)絡報文要求封裝好的數(shù)據(jù)報文通過網(wǎng)卡發(fā)送出去。
3)數(shù)據(jù)提取函數(shù)low_level_input(),該函數(shù)的作用是從網(wǎng)卡中提取接收到的網(wǎng)絡數(shù)據(jù),并將數(shù)據(jù)復制封裝在pbuf中,并返回pbuf結構體指針。
4)PTP時鐘偏差函數(shù)ETH_PTPTime_UpdateOffset(),該函數(shù)實現(xiàn)從時鐘對主時鐘時鐘偏差的調節(jié)。
2.2.4基于PTP協(xié)議的時鐘同步應用層軟件設計
1)時鐘同步軟件架構。時鐘同步軟件的總體框架如圖6所示。來自其他PTP時鐘的報文通過UDP接口傳遞給PTP協(xié)議引擎進行處理。PTP協(xié)議引擎將在設定端口接收和發(fā)送報文。MAC在接收到報文后對數(shù)據(jù)包進行解封,以提取有用信息。通過運行最佳主時鐘算法決定本地時鐘狀態(tài)[9]。若本地時鐘為主時鐘,則會向局域網(wǎng)內發(fā)送Announce報文,和其他的外部時鐘數(shù)據(jù)集進行比較。若本地時鐘為從時鐘,則通過運行本地時鐘調節(jié)算法,最終達到和主時鐘之間的同步。
圖6 時鐘同步軟件總體框架
2)最佳主時鐘算法。最佳主時鐘算法由bmc.c實現(xiàn)。它是判別同一PTP域內所有時鐘主從等級的一種算法。通過廣播Announce報文,比較本地時鐘和外部時鐘的數(shù)據(jù)集,從而得出局域網(wǎng)內的主時鐘,并且在網(wǎng)絡發(fā)生變化時,該算法能夠自動運行,并及時更新PTP域內的主時鐘,使其他從時鐘與主時鐘實現(xiàn)同步。
3)IEEE 1588協(xié)議引擎。IEEE 1588協(xié)議引擎主要由protocol.c實現(xiàn)。該代碼主要運行PTP協(xié)議狀態(tài)機,完成協(xié)議端口狀態(tài)之間的正確轉換,核心函數(shù)為protocol()[10]。
PTP協(xié)議狀態(tài)機的運行過程:首先各個時鐘端口上電后進行初始化,然后同一PTP域內的時鐘運行BMC算法,程序根據(jù)運行結果(端口狀態(tài))執(zhí)行相關操作。
4)時間戳獲取。PTP協(xié)議的關鍵在于時間戳的獲取。STM32F407的MAC支持以太網(wǎng)幀時間戳,每個幀在發(fā)送或接收狀態(tài)下都會對應32位秒值時間戳和32位納秒值時間戳[11]。
5)IEEE1588系統(tǒng)時間校準。IEEE1588系統(tǒng)時間校準主要通過粗調和精調兩種方式進行調節(jié)。粗調即把初始值或時間偏移值寫入時間戳更新寄存器[12]。校準時通過將計算得到的offset值寫入時間戳更新寄存器,然后根據(jù)偏移量的正負進而對系統(tǒng)時間進行加減。使用精調即調節(jié)從時鐘的頻率,消除由于頻率漂移帶來的時鐘抖動,計算并校準從時鐘頻率漂移的具體算法如下[13]:
① 在MSTime(n)時刻,主時鐘向從時鐘發(fā)送Sync報文,從時鐘在本地時鐘MSTime(n)時刻接收到該報文,假設主時鐘到從時鐘之間的網(wǎng)絡鏈路延遲為Delay(n),則主時鐘對應從時鐘接收Sync報文的時間為
MCTime(n)=MSTime(n)+Delay(n)
(3)
② 當前同步周期的主時鐘計數(shù)數(shù)目為
MCount(n)=MCTime(n)-MCTime(n-1)
(4)
③ 當前同步周期的從時鐘計數(shù)數(shù)目為
SCount(n)=SCTime(n)-SCTime(n-1)
(5)
④ 當前同步周期的主從時鐘計數(shù)差值的計算公式如下:
ClockDiffCount(n)=MCount(n)-SCount(n)
(6)
⑤ 從時鐘的分頻系數(shù)FreqScaleFactor(n)的計算公式如下:
(7)
通過之前設定主時鐘時間戳加數(shù)寄存器的值,根據(jù)式(7),可以計算出從時鐘時間戳加數(shù)寄存器的值。該算法在粗調的基礎上,進一步減小主從時鐘偏差。
由于在分布式測試系統(tǒng)中,各被測物理量的測試及采集時間不同步,因此各測試單元的觸發(fā)信號的精確性顯得尤為重要。在上述實現(xiàn)時鐘同步的基礎上通過編寫上位機軟件,在計算機上運行控制管理功能客戶端軟件,獲取時鐘單元的狀態(tài)信息并對時鐘單元的觸發(fā)功能進行設置。本設計實現(xiàn)外部觸發(fā)捕獲,延時觸發(fā)輸出,定時觸發(fā)輸出功能。
外部觸發(fā)信號捕獲關鍵在于對脈沖寬度的測量以排除其他信號誤觸發(fā),并提供外部觸發(fā)信號抵達時準確的時間戳,以滿足將分布式測試設備采集數(shù)據(jù)相互關聯(lián)的需求[14]。
對應的軟件設計流程如下:使能外部觸發(fā)捕獲功能后,對應的輸入信號通道開始檢測觸發(fā)信號的上升沿,檢測到上升沿則獲取此時的PTP時間戳external_timestamp,啟動計數(shù)器對脈沖信號寬度進行測量,當檢測到觸發(fā)信號的下降沿時,則計數(shù)器停止工作。通過計算脈沖寬度,判斷信號是否有效。若返回值為TRUE,則將external_timestamp賦值給valid_timestamp,并保存供上位機調取,否則直接丟棄,繼續(xù)檢測觸發(fā)信號。
該延時觸發(fā)功能需在一個激勵信號的觸發(fā)下啟動,使用同步后的PTP時間可以準確實現(xiàn)延時觸發(fā)輸出。
設計流程如下:設置延時觸發(fā)時間后,新建PTP時鐘讀取線程,然后在輸入通道檢測觸發(fā)信號,當檢測到觸發(fā)信號之后,PTP時鐘讀取線程獲取當前PTP時間PTP_timestamp,根據(jù)設置的延時觸發(fā)時間計算預定觸發(fā)時間trigger_time,到達觸發(fā)時間時,輸出觸發(fā)信號。
定時觸發(fā)設計的目的是用于實現(xiàn)在某一特定時刻同時輸出脈沖信號使測試節(jié)點內的測試設備實現(xiàn)同步測試。
設計流程如下:首先設置觸發(fā)時間,然后新建PTP時鐘讀取線程,判斷是否到達預設置的觸發(fā)時間,若達到觸發(fā)時間,則輸出觸發(fā)信號并kill當前進程,反之,則一直等待延遲時間。
首先,為排除網(wǎng)絡不對稱對對時精度的影響,采用網(wǎng)線將兩個時鐘節(jié)點(LAN口)相連,從時鐘端通過串口打印與主時鐘的實時偏差。
在此實驗中,分別設置單個同步周期時間為4 s,2 s,1 s。待時鐘運行穩(wěn)定后,使用串口實時打印時鐘偏差,測試結果如圖7所示。數(shù)據(jù)統(tǒng)計分析如表1所示。
圖7 兩時鐘節(jié)點網(wǎng)線直連測試結果
表1 兩時鐘節(jié)點網(wǎng)線直連測試數(shù)據(jù)統(tǒng)計分析
時鐘同步周期/s同步周期數(shù)絕對偏差平均值/ns最大正偏移/ns最大負偏移/ns4500301595-5622500221498-3521500176389-244
將兩個時鐘同步單元通過網(wǎng)線連入交換機的LAN口,并且將計算機的網(wǎng)口也連入交換機,設置計算機的本地連接為DHCP,然后從時鐘端通過串口打印與主時鐘的實時偏差。本實驗同樣分三次進行,分別設置單個同步周期時間為4 s,2 s,1 s。測試結果如圖8所示。測試數(shù)據(jù)統(tǒng)計分析如表2所示。
圖8 兩時鐘節(jié)點交換機相連測試結果
表2 兩時鐘節(jié)點交換機相連測試數(shù)據(jù)統(tǒng)計
時鐘同步周期/s同步周期數(shù)絕對偏差平均值/ns最大正偏移/ns最大負偏移/ns4500328679-6252500261517-5081500193447-345
對比表1和表2,可以得出:當同步周期越短,同步后的主從偏差則越??;當同步周期設置相同的情況下,使用網(wǎng)絡元件(路由器或交換機)會導致網(wǎng)絡鏈路不對稱,從而導致同步精度下降。
每個時鐘單元設計了外部觸發(fā)輸入捕獲口(IO口),能夠檢測外部觸發(fā)信號,并記錄下觸發(fā)信號到達IO口的時間。此次實驗,將兩時鐘節(jié)點通過交換機組網(wǎng),等主從時鐘關系建立并運行一段時間后,向各時鐘節(jié)點的外部輸入捕獲通道輸入觸發(fā)信號,其中一個主時鐘作為PTP時間基準,另一個從時鐘通過主時鐘進行校準,當輸入通道在檢測到對應的觸發(fā)信號后,會自動記錄到達IO口的時間值,并通過串口打印。測試結果如圖9所示。其中,左邊的表示主時鐘接收觸發(fā)信號后輸出的時間戳,右邊的表示同步后的從時鐘接收觸發(fā)信號后輸出的時間戳,由數(shù)據(jù)可見,兩者的時間差小于200 ns。
圖9 外部觸發(fā)測試結果
每個時鐘同步單元均設計有延時/定時觸發(fā)輸出口,組網(wǎng)方式即將3個時鐘同步單元接入交換機,并將計算機通過網(wǎng)口連入交換機。延時觸發(fā)測試即通過將觸發(fā)信號源接入從時鐘輸入端和示波器通道CH3,在計算機客戶端軟件中設置延時時間,待從時鐘檢測到符號要求的信號后,延遲一定時間通過觸發(fā)輸出口連接示波器的CH1通道。測試結果如圖10所示。從實驗結果可看出,觸發(fā)信號延時200 ms后輸出。
定時觸發(fā)測試即將各時鐘單元的觸發(fā)輸出口連接到示波器的CH1、CH2和CH3通道,當在計算機客戶端軟件中設置觸發(fā)時間后,3個時鐘同步單元在設定的時刻分別輸出觸發(fā)信號,測試結果如圖11所示。由圖11可知,3個時鐘同步單元輸出的觸發(fā)信號之間時間間隔小于4 μs。
圖10 延時觸發(fā)測試結果
圖11 定時觸發(fā)測試結果
本文提出的基于ARM設計時鐘同步與觸發(fā)單元對分布式測試系統(tǒng)進行同步,該方法通過引入PTP精密時間協(xié)議,分析其原理,然后基于ARM芯片及其相關的外圍電路設計了時鐘同步與觸發(fā)單元,進而通過相關軟件(時鐘同步軟件、TCP/IP協(xié)議棧移植、同步觸發(fā)軟件等)的設計,以及大量相關實驗(兩時鐘節(jié)點網(wǎng)線直連,兩節(jié)點交換機相連,外部觸發(fā)捕獲,延時觸發(fā)輸出,定時觸發(fā)輸出測試)表明組網(wǎng)的各時鐘同步與觸發(fā)單元實現(xiàn)了亞微秒級時鐘同步精度和精確同步觸發(fā)功能,該設計方法具有通用性,滿足了一般分布式測試系統(tǒng)同步及觸發(fā)功能要求。