基於STM32的SNTP授時伺服器的研究與設計
摘要:針對工控領域對時間同步的要求,給出了以STM32和W5100為核心來搭建網路硬體平臺,並在其上實現簡單網路時間協議(SNTP),從而建立嵌入式授時伺服器的設計與實現方法。該系統執行穩定,能夠實現網路時間同步。
關鍵詞:STM32處理器;SNTP授時;簡單網路時間協議;時間同步
O 引言
隨著資訊科技和網路技術的飛速發展,網路互連已經滲透到國民經濟的各行各業。而網路時間同步也越來越受到重視,特別是區域網時間同步在國家安全和國民經濟的諸多領域(如國防軍工、電信網、金融業、交通運輸、電子商務和電力系統等部門)越發不可或缺。隨著嵌入式技術的發展,嵌入式與網路時間同步技術的結合,無疑具有良好的發展前景。
1 方案設計
目前網路授時的實現方法有很多種,本文采用自行設計的嵌入式系統並在上面實現SNTP協議。從而完成網路時間的同步。其系統框圖如圖l所示。
本系統採用C/S模型,分為網路授時同步伺服器和客戶端兩大部分,本文主要對網路授時伺服器部分進行研究。
在網路授時同步伺服器中,處理器STM32f103由內部RTC模組結合日曆演算法來給出時間資訊(年月日時分秒),再從GPS獲取時間資訊,並修正自己的時間,最後結合W5100晶片搭建出一個時間伺服器。當客戶端向伺服器發出請求時,便可同步地統一客戶端的時間資訊,並達到ms級精度。網路傳輸時需實現SNTP應用層協議,設計中通過構造SNTP協議包,並根據同步演算法可計算出包交換的往返延遲。
本系統採用ST公司基於Cortex-M3核心的STM32系列處理器.Cortex-M3核心是專門用於設計高效能、低功耗、低成本、實時性嵌入式應用
系統的處理器核,它在提升效能的同時,又提高了程式碼密度的Thumb-2指令集,同時也大幅度提高了中斷響應的緊耦合巢狀向量中斷控制器的效能。所有新功能都同時具有業界最優的功耗水平。
TCP/IP協議棧的實現採用的韌體晶片W5100是韓國WIZnet公司推出的韌體網路晶片,它集TCP/IP協議棧、乙太網MAC和PHY為一體,可支
持TCP,UDP、ICMP、IGMP、IPv4、ARP,PPPoE、Ethemet等網路協議;同時支援4個獨立的Socket通訊,內部16 K位元組的傳送/接收緩衝區可
快速進行資料交換,最大通訊速率可達到25Mbps。此外,W5100還內嵌10BaseT/100BaseTX乙太網物理層,可支援自動應答(全雙工/半雙工
模式),並提供多種匯流排(兩種並行匯流排和SPI匯流排)介面方式,可以方便地與各種MCU連線。W5100器件的推出大大簡化了硬體電路設計,可使微控制器在沒有作業系統支援的情況下,真正的實現單晶片接入Internet。[!--empirenews.page--]
2 SNTP協議分析
SNTP即簡單網路時間協議,它是一個用於區域網子網末端的時間同步協議,其要求在操作過程中只允許存在一個可靠的同步時鐘源,是
NTP協議的一個簡化版本。
2.1 SNTP的同步原理
SNTP協議主要通過同步演算法來交換時間伺服器和客戶端的時間戳,從而估算出資料包在網路上的往返延遲,進而獨立地估算系統的時鐘偏差。它的時間同步原理的傳輸模型如圖2所示。
圖2中,T1為客戶方傳送查詢請求時間(以客戶方時間系統為參照),T2為伺服器收到查詢請求時間(以伺服器時間系統為參照),T3為伺服器回覆時間資訊包時間(以伺服器時間系統為參照),T4為客戶方收到時間資訊包時間(以客戶方時間系統為參照),D1為請求資訊在網上傳播所消耗的時間,D2為回覆資訊在網上傳播所消耗的時間。假設請求和回覆在網上的傳播時間相同,即:δ1=δ2,則可得出如下公式:
式中,θ為客戶端時間與標準時間之差,δ為資訊在網上傳播的時間。可以看到,θ、δ只與T2、T1的差值和T4、T3的差值相關,而與T2、T3的差值無關,即最終的結果與伺服器處理請求所需的時間無關。據此,客戶端(CLIENT)即可通過T1、T2、T3、T4十算出的時差0去調整本地時鐘。
2.2 SNTP協議格式
SNTP訊息一般封裝在UDP報文中,UDP的埠號是123,UDP頭中的源埠和目的埠是一樣的。SNTP訊息緊跟在IP和UDP報頭之後,其協
議格式如圖3所示。
圖3中,U為跳躍指示器,可警告在當月最後一天的最終時刻插入的迫近閨秒(閨秒)。VN表示版本號。Mode為模式,該欄位包括以下值:
O(預留);1(對稱行為);3(客戶機);4(伺服器);5(廣播);6(NTP控制資訊)。Stratum用於對本地時鐘級別的整體識別。Poll表示有符號整
數表示連續資訊間的最大間隔。Precision表示有符號整數,表示本地時鐘精確度。Root Delay為有符號固定點序號,表示主要參考源的總延遲,如很短時間內的15到16間的分段點。Root Dispersion為無符號固定點序號表示相對於主要參考源的正常差錯,如很短時間內的位15到16間的分段點。[!--empirenews.page--]
Reference Identifier為識別特殊參考源。Originate Timestamp是向伺服器請求分離客戶機的時間,採用64位時標(Timestamp)格式。 Receive Timestamp是向伺服器請求到達客戶機的時間。也採用64位時標(Timestamp)格式。Transmit Timestamp是向客戶機答覆分離伺服器的時間。採用64位時標(Timestamp)格式。
3 硬體設計
圖4所示為W5100部分的電路圖,圖中給出了W5100與STM32的連線方式及其外圍電路。
W5100和STM32可通過SPI方式通訊。通過對SEN管腳用10 kΩ電阻上拉到高電平可允許SPI模式;由於W5100處於SPI從模式,因此,其SPI工作時鐘由處於主模式的STM32提供,MISO和MOSI為用於SPI通訊的兩條資料線,SCLK為SPI時鐘引腳;*****為片選引腳,低電平有效,主要用於在並行匯流排連線時由MCU訪問W5100內部暫存器或儲存器;INT為中斷輸出引腳,低電平有效,在W5100在Socket埠產生連線、斷開、接收資料、資料傳送完成以及通訊超時等情況下,該引腳將輸出訊號以指示MCU。中斷將在寫入中斷暫存器IR或埠的中斷暫存器時被清除,所有中斷都可以被遮蔽。W5100的第5、6、8和9腳是乙太網物理層訊號引腳,用於與RJ45介面相連線,其中第5和第6引腳是RXIP/RXlN訊號對,用於接收從介質傳來的差分資料,第8和第9引腳是TXOP/TXON訊號對,用於將差分資料傳送給介質;第66引腳是連線LED指示引腳,低電平表示10/100Mbps連線狀態正常,連線正常時輸出低電平,而在TX/RX狀態時閃爍;第72引腳是接收狀態LED指示引腳,低電平表示當前接收資料,第73引腳是傳送狀態LED指示引腳,低電平表示當前傳送資料,這些LED指示引腳應與RJ45的相應LED指示燈引腳連線,以用於指示連線狀態。除電源引腳、時鐘引腳外,W5100的其它引腳DO~D7,AO~A14及WR~RD可選擇懸空。[!--empirenews.page--]
圖5所示是GPS模組與STM32的連線示意圖。GPS接收模組採用HOLUX生產的GPS模組M87GPS,模組的序列口輸出和輸入分別接到STM32的輸入與輸出,秒脈衝PPS訊號連線到處理器的IO口,在秒脈衝(1PPS)同步的情況下,系統將實時精準地通過串列埠把標準的UTC時間傳送給處理器STM32。
4 SNTP伺服器的軟體設計
SNTP伺服器的軟體設計主要可分為兩個部分:W5100的驅動設計和SNTP協議的軟體實現。其軟體流程圖如圖6所示。
首先,利用ST公司提供的韌體庫可初始化STM32的系統配置,把SPI介面配置為兩線單向全雙工傳輸、主模式,以8位資料幀的格式進行傳
輸;同時配置RTC模組產生秒脈衝,再與日曆演算法結合得到自身的系統時間,然後通過GPS的秒脈衝PPS修正系統時間。再通過配置W5100公共
暫存器和埠暫存器來完成它的基本設定、網路資訊以及埠儲存器資訊的沒置,使之為UDP伺服器模式。此後,W5100處於監聽狀態,一旦
W5100的SOCKET埠有中斷事件,W5100將觸發STM32的外部中斷,STM32若檢測到SoekRecvflag發生改變,則立即開始SNTP協議的解析。
接收SNTP協議包後,便可記錄收到報文的時間T2,然後從報文中解析出時間戳T1,再將T1、T2封裝成新的報文進行傳送,同時傳送時再記錄一個傳送時間T3。
5 結束語
本文基於STM32和W5100搭建了一個網路伺服器硬體平臺,並在其上實現了SNTP同步時間報文。經測試,本系統執行穩定,並可實現對客
戶端PC機的時鐘同步。通過該系統可有效解決工業控制等領域的時間不同步問題。
相關文章
- 基於FPGA的DDS研究與設計FPGA
- 遊戲心理學研究:基於發展心理學與社會時鐘的遊戲設計遊戲設計
- 從0帶你設計與實現基於STM32的智慧農業管理系統
- 基於STM32無線WIFI智慧家居實時控制系統設計(畢設課設)WiFi
- 基於Java反射的定時任務設計Java反射
- 認證授權的設計與實現
- 基於java博網即時通訊軟體的設計與實現Java
- 基於WebSocket的實時訊息傳遞設計Web
- 基於android的智慧導診的設計與實現Android
- (畢業設計資料)基於STM32智慧窗簾控制系統設計
- 【認證與授權】2、基於session的認證方式Session
- 基於風險回報設計的遊戲自由度研究遊戲
- 基於Android的失物招領APP的設計與實現AndroidAPP
- 基於 Flink+Pravega 的遊戲伺服器監控與調節系統設計遊戲伺服器
- STM32系統時鐘RCC(基於HAL庫)
- 380【畢設課設】基於STM32防久坐_睡眠監測控制系統設計
- 基於Scrapy分散式爬蟲的開發與設計分散式爬蟲
- 基於區塊鏈的智慧鎖設計與實現區塊鏈
- 基於Android的音樂播放器的設計與實現Android播放器
- 基於java的網路招聘系統的設計與實現Java
- 基於java的文章釋出系統的設計與實現Java
- 基於shiro RBAC的表設計
- 基於 esbuild 的 universal bundler 設計UI
- 基於原型的角色設計方法原型
- STM32 定時器詳細篇(基於HAL庫)定時器
- 基於組合語言微控制器的時鐘設計組合語言
- Java畢業設計_基於MySQL網盤管理系統的設計與實現JavaMySql
- 國內的 Stduino IDE 基於 STM32 的串列埠通訊與 LED 燈閃爍UIIDE串列埠
- 基於MATLAB的水果分級設計Matlab
- 基於MaxCompute的拉鍊表設計
- 基於STM32的OLED的SPI介面資料顯示
- 基於ATmega8的測速計設計
- 基於java的企業車輛管理系統的設計與實現Java
- 基於 LLM 的智慧運維 Agent 系統設計與實現運維
- vivo 基於 JaCoCo 的測試覆蓋率設計與實踐
- 基於AlexNet和Inception模型思想的TFCNet模型設計與實現模型
- 基於分發與計算的GRTN全球實時傳輸網路
- 241【畢設課設】基於STM32微控制器數控調頻發射器設計