一種基于cpu通用定時器來實現(xiàn)ieee-1588協(xié)議中高精度時標的方法
【專利摘要】本發(fā)明公開了一種基于CPU的通用定時器來實現(xiàn)IEEE-1588中高精度時標的方法。該方法通過使用CPU的通用定時器中的信號捕獲功能,通過捕獲以太網(wǎng)數(shù)據(jù)收、發(fā)的相關(guān)信號的變化,并借助相應(yīng)的軟件處理,可獲取高精度的以太網(wǎng)報文的收、發(fā)時標。該方法可支持IEEE-1588協(xié)議中的一步法和兩步法,特別適用于那些硬件上沒有提供對IEEE-1588支持的硬件平臺,以實現(xiàn)高精度IEEE-1588對時功能。
【專利說明】—種基于CPU通用定時器來實現(xiàn)IEEE-1588協(xié)議中高精度時標的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于電力系統(tǒng)電力電子與繼電保護領(lǐng)域,尤其涉及所述領(lǐng)域內(nèi)的時間同步技術(shù),特別是使用通用定時器來實現(xiàn)IEEE-1588協(xié)議中高精度時標的方法。
【背景技術(shù)】
[0002]IEEE-1588對時技術(shù)是一種基于乒乓對時原理的精確時鐘同步技術(shù),它采用短幀傳輸,算法簡單,對計算性能和網(wǎng)絡(luò)帶寬的要求都較低,適用于如智能變電站中的過程層這類支持多播消息的分布式網(wǎng)絡(luò)通信系統(tǒng)。
[0003]目前,IEEE-1588對時技術(shù)在電力系統(tǒng)中的應(yīng)用,主要還集中在智能變電站中的過程層,以滿足所述過程層所需的精度優(yōu)于Ius的對時。
[0004]IEEE-1588對時的精度,依賴于以太網(wǎng)報文收、發(fā)時標的精度,其在應(yīng)用時,有一步法和兩步法兩種方式,兩種方式主要的差異在于對發(fā)送報文的發(fā)送時標的處理:
[0005]1.兩步法應(yīng)用時,裝置在發(fā)送完IEEE-1588報文后,會將所述報文的發(fā)送時標封裝在一個以太網(wǎng)報文內(nèi)再次發(fā)出。
[0006]i1.一步法應(yīng)用時,裝置在發(fā)送IEEE-1588報文時,需要將所述報文的發(fā)送時標填入所述報文內(nèi)。
[0007]所述的時標,是指IEEE-1588報文的收發(fā)時刻對應(yīng)的TAI (世界原子時)時間。目前,獲取IEEE-1588應(yīng)用所需高精度時標的方式主要有兩種:一是使用IEEE-1588專用的以太網(wǎng)PHY芯片來獲?。欢鞘褂靡蕴W(wǎng)MAC集成了 IEEE-1588功能的CPU。所述兩種方式的通用性都較差,硬件成本偏高,且后者還無法實現(xiàn)IEEE-1588中的一步法功能。
【發(fā)明內(nèi)容】
[0008]為解決現(xiàn)有的IEEE-1588對時應(yīng)用在獲取高精度時標時中存在的:通用性差、硬件成本高、對一步法功能支持有限等問題,本申請公開了一種基于CPU通用定時器來實現(xiàn)IEEE-1588協(xié)議中高精度時標的方法。
[0009]本申請具體采用以下技術(shù)方案。
[0010]一種基于CPU的通用定時器來實現(xiàn)IEEE-1588中高精度時標的方法,其特征在于:所述方法通過使用CPU的通用定時器中的信號捕獲功能,捕獲以太網(wǎng)數(shù)據(jù)收、發(fā)的相關(guān)信號的變化,獲取高精度的以太網(wǎng)報文的收、發(fā)時標。
[0011]一種基于CPU通用定時器來實現(xiàn)IEEE-1588協(xié)議中高精度時標的方法,,其特征在于,IEEE-1588對時采用兩步法應(yīng)用時,所述方法包括以下步驟:
[0012](I)將以太網(wǎng)PHY芯片通過MII接口與CPU芯片相連接,并將MII接口中的發(fā)送使能信號(TX_EN)和接收數(shù)據(jù)有效指示(RX_DV)信號,接至CPU的通用定時器的輸入信號捕獲管腳上;
[0013](2)使用CPU的通用定時器,來維護一個TAI的時間軸,將通用定時器的每一個計數(shù)值都與TAI的時間——對應(yīng);
[0014](3)使能信號TX_EN和接收數(shù)據(jù)有效指示RX_DV信號的上升沿時刻即為以太網(wǎng)報文的發(fā)送和接收時刻,通過使用通用定時器的捕獲功能,獲取所述時刻的通用定時器的計數(shù)值;
[0015](4)將以太網(wǎng)報文發(fā)送和接收時刻對應(yīng)的CPU的通用定時器的計數(shù)值轉(zhuǎn)換為TAI時間值,即可得到發(fā)送時標和接收時標。
[0016](5)步驟(4)中獲取發(fā)送時標和接收時標,需依照IEEE-1588的要求對偏移量進行補償。
[0017]所述IEEE-1588對時采用一步法應(yīng)用時,所述方法包括以下步驟:
[0018](I)將以太網(wǎng)PHY芯片通過MII接口與CPU芯片相連接,并將MII接口中的發(fā)送使能信號(TX_EN)和接收數(shù)據(jù)有效指示(RX_DV)信號,接至CPU的通用定時器的輸入捕獲管腳上;
[0019](2)使用CPU的通用定時器,來維護一個TAI的時間軸,將定時器的每一個計數(shù)值都與TAI的時間——對應(yīng);
[0020](3)接收數(shù)據(jù)有效指示RX_DV信號的上升沿時刻即為以太網(wǎng)報文的接收時刻,通過使用通用定時器的捕獲功能,獲得報文接收時刻的通用定時器的計數(shù)值;
[0021](4)將以太網(wǎng)報文接收時刻對應(yīng)的通用定時器的計數(shù)值轉(zhuǎn)換為TAI時間值,即得到接收時標;
[0022](5)步驟(4)中獲取接收時標,需依照IEEE-1588的要求對偏移量進行補償。
[0023](6)在發(fā)送報文時,先開啟一個定時中斷,延時一段時間后觸發(fā)中斷,需準確計算所述中斷的觸發(fā)時刻,并將所述中斷的觸發(fā)時刻加上發(fā)送延時后,轉(zhuǎn)換成發(fā)送時標填入待發(fā)報文的相應(yīng)字段;發(fā)送延時的初始值為O ;
[0024](7)在步驟(6)的基礎(chǔ)上,將待發(fā)報文寫入發(fā)送緩存,但不使能報文發(fā)送,等待步驟
(6)中所述中斷的觸發(fā)。
[0025](8)待所述中斷觸發(fā)后,立即使能報文發(fā)送;
[0026](9)使能信號TX_EN的上升沿時刻即為以太網(wǎng)報文的發(fā)送時刻,通過使用通用定時器的捕獲功能,即獲得報文實際發(fā)送時刻的通用定時器的計數(shù)值;
[0027](10)將所述以太網(wǎng)報文實際發(fā)送時刻對應(yīng)的通用定時器的計數(shù)值轉(zhuǎn)換為實際的發(fā)送時標值;
[0028](11)步驟(10)中獲取發(fā)送時標,需依照IEEE-1588的要求對偏移量進行補償。
[0029](12)計算出步驟(6)中中斷觸發(fā)時刻至報文實際發(fā)送的延時時間,并將所述延時時間作為步驟(6)中實時更新后發(fā)送延時。
[0030]本申請具有以下技術(shù)效果:
[0031]1.在獲取IEEE-1588報文接收時標時,不再需要CPU或是以太網(wǎng)PHY芯片集成IEEE-1588 功能;
[0032]2.在獲取IEEE-1588兩步法報文的發(fā)送時標時,不再需要CPU或是以太網(wǎng)PHY芯片集成IEEE-1588功能;
[0033]3.在獲取IEEE-1588 —步法報文的發(fā)送時標時,不再需要以太網(wǎng)PHY芯片集成IEEE-1588 功能。【專利附圖】
【附圖說明】
[0034]圖1是本發(fā)明方法中,所涉及的MII接口的接收和發(fā)送時序圖;
[0035]圖2是本發(fā)明方法中,使用CPU的通用定時器來實現(xiàn)IEEE-1588中高精度時標時,(PU與外設(shè)構(gòu)成的最小系統(tǒng)的結(jié)構(gòu)框圖;
[0036]圖3是本發(fā)明方法中,一種基于CPU通用定時器來實現(xiàn)IEEE-1588協(xié)議中一步法中的高精度時標的方法時的流程圖。
【具體實施方式】
[0037]下面結(jié)合說明書附圖對本發(fā)明的技術(shù)方法中的作進一步詳細說明。
[0038]目前,主流的32位CPU,如ARM、P0werPC等芯片內(nèi),均集成中了功能強大的通用定時器,這些定時器通過計數(shù)值來提供基本的計時、定時功能的基礎(chǔ)上,均能提供輸入信號捕獲、輸出信號比較(匹配)等功能。所述輸入信號捕獲功能,是指所述通用定時器可以識別輸入信號的變化,并鎖存所述信號變化時刻的定時器的計數(shù)值。另外,所述的通用定時器,均能提供類型豐富的中斷功能,如定時中斷、信號捕獲、輸出匹配等中斷。借助通用定時器的捕獲功能,結(jié)合以太網(wǎng)的信號變化,可以設(shè)計一種通用方法間接地來實現(xiàn)IEEE-1588中的時標功能。
[0039]目前,主流的32位CPU的以太網(wǎng)MAC(媒體訪問控制器)大多提供MII接口,用于與以太網(wǎng)PHY芯片相連接。一個完整的MII接口共有16根信號線,具體包括TX_ER、TXD[0:3]、TX_EN、TX_CLK、COL、RXD [0:3]、RX_EX、RX_CLK、CRS, RX_DV 等信號。其接收和發(fā)送時,RX_DV及TX_EN信號與其它信號的時序如圖1所示。
[0040]本發(fā)明方法,適用于市面常見的32位CPU和以太網(wǎng)PHY芯片。任何支持MII接口的以太網(wǎng)PHY芯片均適用,任何支持MII接口并集成32位通用定時器的CPU芯片均適用。在此以NXP公司的ARM Cortex-M3芯片LPC1788和TI公司DP83848以太網(wǎng)PHY為例,來具體加以說明。
[0041]IEEE-1588協(xié)議在應(yīng)用時,有一步法和兩步法之分,本發(fā)明方法均適用,但實現(xiàn)的步驟有所不同,其中兩步法時的實現(xiàn)步驟如下:
[0042]1、將LPC1788與DP83848芯片如圖2所示進行連接:
[0043]1.DP83848芯片MII接口的信號需要與LPC1788芯片MII接口的信號按MII接口的標準要求來連接。
[0044]i1.所述MII接口信號中的TX_EN信號還需要接至LPC1788的定時器O模塊對應(yīng)的CAP0.0捕獲管腳(捕獲通道O)。
[0045]ii1.所述MII接口信號中的RX_DV信號還需要接至LPC1788的定時器O對應(yīng)的CAP0.1捕獲管腳(捕獲通道I)。
[0046]2、使用LPC1788的定時器O來維護一個TAI的時間軸,具體如下:
[0047]1.所述LPC1788的定時器O采用CPU內(nèi)部總線時鐘驅(qū)動,時鐘頻率可依需求在10?50Mhz可選。定時器O不使能內(nèi)部的預(yù)分頻器,工作在定時器模式。
[0048]i1.在所述LPC1788內(nèi),選取某個TAI時間的整秒時刻(TaiSoc),記錄所述時刻的LPC1788定時器O的當前計數(shù)器(T0TC寄存器)的值,所述計數(shù)器值即為所述TaiSoc時刻,對應(yīng)在定時器O的計數(shù)器上的位置(TaiPos)。
[0049]ii1.依據(jù)所述LPC1788定時器O使用的輸入時鐘頻率fTMR Hz,計算TAI整秒周期對應(yīng)的定時器O計數(shù)增量(TaiPrd):TaiPrd=fTMR。
[0050]iv.所述LPC1788每隔500ms查詢一次TOTC寄存器的當前值(GtmCnt),當所述GtmCnt與TaiPos值超過TaiPrd時,即對TaiSoc值累加,并同時將TaiPos的值加上TaiPrd,累加次數(shù)視GtmCnt與TaiPos差值大小而定,最終需保證差值小于TaiPrd。若所述TaiPos值在累加時溢出,截取低32位保留。
[0051]V.在步驟1、i1、iii的基礎(chǔ)上,重復(fù)步驟iv,即可實現(xiàn)TAI時間軸的維護。
[0052]3、獲取以太網(wǎng)報文發(fā)送和接收時刻,對應(yīng)的通用定時器的計數(shù)值,具體步驟如下:
[0053]1.配置所述LPC1788內(nèi)的TOIR、TOCCR寄存器,將CAP0.0和CAP0.1設(shè)置為捕獲
信號的上升沿,即捕獲TX_EN和RX_DV信號的上升沿。
[0054]i1.使能所述LPC1788的以太網(wǎng)數(shù)據(jù)接收和發(fā)送完成中斷,每接收到一個有效的以太網(wǎng)包或是完成一個以太網(wǎng)包的發(fā)送后,都會觸發(fā)中斷。
[0055]ii1.在所述接收中斷中,讀取定時器O的TOCRO寄存器,以獲取CAP0.0管腳的捕獲值,以確定RX_DV上升沿時刻的定時器O的計數(shù)值(RxCapCnt);在所述發(fā)送完成中斷中,讀取定時器O的TOCRl寄存器,以獲取CAP0.1管腳的捕獲值,以確定TX_EN上升沿時刻的定時器O的計數(shù)值(TxCapCnt )。
[0056]4、將步驟3中獲取的以太網(wǎng)報文發(fā)送和接收時刻對應(yīng)的通用定時器的計數(shù)值(TxCapCnt和RxCapCnt)轉(zhuǎn)換為發(fā)送時標(TxPreTs)和接收時標(RxPreTs)。將所述計數(shù)值(TxCapCnt和RxCapCnt)代入下述公式中的CapCnt,計算出的TsTaiSec和TsTaiNsec即為所述發(fā)送時標(TxPreTs)和接收時標(RxPreTs)的秒和納秒部分:
[0057]
【權(quán)利要求】
1.一種基于CPU的通用定時器來實現(xiàn)IEEE-1588中高精度時標的方法,其特征在于:所述方法通過使用CPU的通用定時器中的信號捕獲功能,捕獲以太網(wǎng)數(shù)據(jù)收、發(fā)的相關(guān)信號的變化,獲取高精度的以太網(wǎng)報文的收、發(fā)時標。
2.根據(jù)權(quán)利要求1所述的基于CPU通用定時器來實現(xiàn)IEEE-1588協(xié)議中高精度時標的方法,其特征在于,IEEE-1588對時采用兩步法應(yīng)用時,所述方法包括以下步驟: (1)將以太網(wǎng)PHY芯片通過MII接口與CPU芯片相連接,并將MII接口中的發(fā)送使能信號(TX_EN)和接收數(shù)據(jù)有效指示(RX_DV)信號,接至CPU的通用定時器的輸入信號捕獲管腳上; (2)使用CPU的通用定時器,來維護一個TAI的時間軸,將通用定時器的每一個計數(shù)值都與TAI的時間——對應(yīng); (3)使能信號TX_EN和接收數(shù)據(jù)有效指示RX_DV信號的上升沿時刻即為以太網(wǎng)報文的發(fā)送和接收時刻,通過使用通用定時器的捕獲功能,獲取所述發(fā)送或接收時刻的通用定時器的計數(shù)值; (4)將以太網(wǎng)報文發(fā)送和接收時刻對應(yīng)的CPU的通用定時器的計數(shù)值轉(zhuǎn)換為TAI時間值,即可得到發(fā)送時標和接收時標。 (5)步驟(4)中獲取發(fā)送時標和接收時標,需依照IEEE-1588的要求對偏移量進行補\-ZX O
3.根據(jù)權(quán)利要求1所述的基于CPU通用定時器來實現(xiàn)IEEE-1588協(xié)議中高精度時標的方法,其特征在于,所述IEEE-1588對時采用一步法應(yīng)用時,所述方法包括以下步驟: (1)將以太網(wǎng)PHY芯 片通過MII接口與CPU芯片相連接,并將MII接口中的發(fā)送使能信號(TX_EN)和接收數(shù)據(jù)有效指示(RX_DV)信號,接至CPU的通用定時器的輸入捕獲管腳上; (2)使用CPU的通用定時器,來維護一個TAI的時間軸,將定時器的每一個計數(shù)值都與TAI的時間——對應(yīng); (3)接收數(shù)據(jù)有效指示RX_DV信號的上升沿時刻即為以太網(wǎng)報文的接收時刻,通過使用通用定時器的捕獲功能,獲得報文接收時刻的通用定時器的計數(shù)值; (4)將以太網(wǎng)報文接收時刻對應(yīng)的通用定時器的計數(shù)值轉(zhuǎn)換為TAI時間值,即得到接收時標; (5)步驟(4)中獲取接收時標,需依照IEEE-1588的要求對偏移量進行補償; (6)在發(fā)送報文時,先開啟一個定時中斷,延時一段時間后觸發(fā)中斷,準確計算所述中斷的觸發(fā)時刻,并將所述中斷的觸發(fā)時刻加上發(fā)送延時后,轉(zhuǎn)換成發(fā)送時標填入待發(fā)報文的相應(yīng)字段;發(fā)送延時的初始值為O ; (7)在步驟(6)的基礎(chǔ)上,將待發(fā)報文寫入發(fā)送緩存,但不使能報文發(fā)送,等待步驟(6)中所述中斷的觸發(fā); (8)待所述中斷觸發(fā)后,立即使能報文發(fā)送; (9)使能信號TX_EN的上升沿時刻即為以太網(wǎng)報文的發(fā)送時刻,通過使用通用定時器的捕獲功能,即獲得報文實際發(fā)送時刻的通用定時器的計數(shù)值; (10)將所述以太網(wǎng)報文實際發(fā)送時刻對應(yīng)的通用定時器的計數(shù)值轉(zhuǎn)換為實際的發(fā)送時標值; (11)步驟(10)中獲取發(fā)送時標,需依照IEEE-1588的要求對偏移量進行補償。(12)計算出步驟(6)中中斷觸發(fā)時刻至報文實際發(fā)送的延時時間,并將所述延時時間作為步驟(6)中實時更新后發(fā)送延時。
【文檔編號】H04L7/00GK103746789SQ201310697514
【公開日】2014年4月23日 申請日期:2013年12月18日 優(yōu)先權(quán)日:2013年12月18日
【發(fā)明者】胡嘯, 朱啟晨, 于震江 申請人:北京四方繼保自動化股份有限公司