iT邦幫忙

0

AT32F403A + DM9058 實現高精度 PTP 時間同步(中篇):成果展示與驗證

  • 分享至 

  • xImage
  •  

本文系統配置/拓撲(Topology):Raspberry Pi 3 (Grandmaster) → KSZ9477 (E2E TC) → AT32F403A (End Slave)

摘要

本文為中篇,接續上篇的環境建置與平台 bring-up,深入探討 PTP 系統的運行成果展示、時間同步精度驗證、以及常見問題與除錯技巧。本文將幫助讀者理解 PTP 系統的運行機制,掌握時間同步精度的量測方法,並學會系統除錯與優化技巧。

文章系列說明

  • 上篇:環境建置與平台 Bring-up(硬體連接、軟體初始化、平台啟動)
  • 中篇(本文):成果展示與驗證(運行成果、精度驗證、除錯技巧)
  • 下篇:系統整合與測試、兩點抓包驗證 TC CorrectionField(深入驗證、工程實作)

關鍵特色

  • PTP 系統運行成果詳細展示
  • 時間同步精度驗證方法
  • Clock Servo 控制迴路分析
  • 常見問題與除錯技巧(⭐ 本文重點)
  • 系統整合測試與穩定性驗證

適用讀者

  • 已完成上篇環境建置的開發者
  • 需要驗證 PTP 同步精度的工程師
  • 遇到 PTP 系統問題需要除錯的技術人員

閱讀建議:建議依序閱讀上篇 → 中篇(本文)→ 下篇,以獲得完整的 PTP 系統實作與驗證知識。


上篇回顧

上篇中,我們完成了:

  1. 系統架構設計

    • 完整的三層 PTP 拓撲(Topology)(GM → TC → ES)
    • PTP One-Step 模式 + E2E Transparent Clock
    • 硬體時間戳記支援(DM9058)
  2. 硬體配置

    • AT32F403A + DM9058 硬體連接
    • SPI、GPIO、中斷配置
    • 硬體實體設置圖
  3. 軟體架構

    • 分層架構設計(應用層 → PTP 協定層 → 網路層 → 驅動層 → HAL 層)
    • 關鍵模組與介面說明
    • 專案目錄結構
  4. 環境建置

    • 開發環境準備
    • 硬體連接步驟
    • 韌體編譯與燒錄
    • AT32F403A 初始化配置(系統時鐘、SPI、中斷、DM9058)
    • PTP Daemon 配置與啟動
  5. 平台 Bring-up 成功

    • 硬體平台已準備就緒
    • 網路層初始化成功
    • PTP daemon 成功啟動

上篇成果:AT32F403A + DM9058 平台已成功運行,PTP daemon 能在「網路就緒後」成功初始化。

本文(中篇)重點:深入分析 PTP 系統的運行成果,驗證時間同步精度,並提供除錯技巧。

下篇預告:下篇將深入探討系統整合與測試,特別是使用「兩點抓包」方法驗證 Transparent Clock 的 CorrectionField 累加機制,提供工程現場可直接照做的測試 SOP 與故障排除手冊。


目錄

  1. PTP 系統運行成果展示
  2. 時間同步精度驗證
  3. 常見問題與除錯技巧
  4. 系統整合測試

1. PTP 系統運行成果展示

上篇的目標很單純:把 AT32F403A + DM9058 平台跑起來,且 PTP daemon 能在「網路就緒後」成功初始化。以下是上篇達成的主要成果展示:

1.1 網路層成果

  • 連線成功(link up)
  • DHCP 取得 IP(或靜態 IP 生效)

https://ithelp.ithome.com.tw/upload/images/20260303/20181669A2jxExeKBy.png

日誌解說
此日誌展示了 AT32F403A + DM9058 平台的網路層初始化成功過程。關鍵訊息包括:

  1. 系統初始化階段

    • [INIT] Configuring TMR6 for local_time updates:配置定時器用於系統時間更新
    • LWIP: Initializing lwIP stack...:初始化 lwIP TCP/IP 協議棧
    • LWIP: DHCP mode - setting IP addresses to 0.0.0.0:啟用 DHCP 模式,等待動態分配 IP
  2. 硬體驅動初始化

    • [SPI Instance] at32f403a_spi1_dma.c:SPI1 DMA 驅動初始化
    • [SPI Pins] sck/mosi/miso/ pa5/pa7/pa6, cs/ pa15:SPI 接腳配置確認
    • [DRIVER INT mode] AT32F403A INT Running...:外部中斷模式啟用
    • [hal] at32f403a_spi1 'spi' Running 25Mhz...:SPI 時鐘設定為 25 MHz
  3. DM9058 晶片識別

    • [DRIVER INT mode] DM9058 found: 9058:成功識別 DM9058 網路控制器
    • PTP Transport: UDP over IPv4:PTP 協定使用 UDP/IPv4 傳輸
  4. 網路介面就緒

    • LWIP: Network interface added successfully:lwIP 網路介面添加成功
    • reg mac 00 60 6e e2 87 6b:從 DM9058 讀取的 MAC 位址
    • LWIP: Link is UP - network ready關鍵訊息:實體層連線已建立(Link UP)
    • Link: State changed from UNKNOWN to UP:連結狀態從未知變為已連線

驗證要點

  • 確認 SPI 通訊正常(DM9058 能被識別)
  • 確認實體層連線(Link UP)
  • 確認 MAC 位址正確讀取
  • ⚠️ 若使用 DHCP,需等待後續的 IP 分配訊息;若使用靜態 IP,需確認 IP 設定已生效

1.2 PTP 初始化成果

  • 進入 PTP state machine

https://ithelp.ithome.com.tw/upload/images/20260303/20181669EFUNA4ayzd.png

日誌解說
此日誌展示了 PTP daemon 成功初始化的過程,包含狀態機轉換和協定層啟動。關鍵訊息包括:

  1. PTP Daemon 啟動條件檢查

    • 系統會先等待網路層就緒(Link UP + IP 分配完成)
    • 確認 UDP 319/320 埠口可用(PTP Event/General 訊息埠)
  2. PTP 協定初始化

    • PTPd_Init():PTP daemon 初始化函式被呼叫
    • 配置來自 PTPd 的 constants.h,經 bmc.cinitData() 寫入 ptpClock->defaultDS
      • SLAVE_ONLY = TRUE:僅從時鐘模式
      • DEFAULT_DELAY_MECHANISM = E2E:End-to-End 延遲機制
      • DEFAULT_TWO_STEP_FLAG = FALSEdefaultDS.twoStepFlag:啟用 One-Step 模式(時間戳直接嵌入 Sync 訊息)
  3. PTP 狀態機轉換

    • INITIALIZING:PTP daemon 正在初始化
    • LISTENING:進入監聽狀態,等待接收 PTP 訊息
    • UNCALIBRATED:尚未校準,等待與 Master 建立同步
    • SLAVE:成功進入從時鐘狀態(目標狀態)
  4. BMC(Best Master Clock)演算法

    • 系統會透過 BMC 演算法選擇最佳主時鐘
    • 比較 clockClasspriority1priority2 等參數
    • 若找到合適的 Master,會進入 SLAVE 狀態

驗證要點

  • 確認 PTP daemon 成功初始化(無錯誤訊息)
  • 確認狀態機進入 SLAVE 狀態(或至少進入 LISTENING)
  • 確認 UDP 埠口綁定成功
  • 確認 PTP 時鐘介面(getTime/setTime/adjFreq)已註冊
  • ⚠️ 若停留在 UNCALIBRATED 狀態,可能是:
    • 尚未收到 Master 的 Sync 訊息(檢查網路連線)
    • Master 未正確配置或未啟動
    • 防火牆阻擋 UDP 319/320 埠口

1.3 可觀測運行成果

  • 周期性輸出 offset / mean path delay

https://ithelp.ithome.com.tw/upload/images/20260303/20181669HZVshoEOLY.png

日誌解說
此日誌展示了 PTP 系統正常運行時的周期性輸出,包含時間偏移量(Offset)和平均路徑延遲(Mean Path Delay)的計算結果。關鍵訊息包括:

  1. 周期性同步訊息交換

    • Sync 訊息(Master → Slave):Master 發送同步訊息,包含發送時間戳 t1
    • Delay_Req 訊息(Slave → Master):Slave 發送延遲請求,記錄發送時間戳 t3
    • Delay_Resp 訊息(Master → Slave):Master 回應,包含接收 Delay_Req 的時間戳 t4
    • Slave 接收 Sync 時記錄時間戳 t2
  2. 時間偏移量(Offset)計算

    Offset = (t2 - t1 - CF_sync) - Mean_Path_Delay
    
    • Offset:Slave 時鐘與 Master 時鐘的時間差
    • 單位:通常為納秒(ns)或微秒(μs)
    • 理想值:接近 0,表示 Slave 已與 Master 同步
    • 負值:表示 Slave 時鐘比 Master 慢
    • 正值:表示 Slave 時鐘比 Master 快
  3. 平均路徑延遲(Mean Path Delay)計算

    Mean_Path_Delay = [(t2 - t1 - CF_sync) + (t4 - t3 - CF_delay)] / 2
    
    • Mean Path Delay:網路傳輸的平均延遲時間
    • CF_sync:Sync 訊息在 Transparent Clock 中的修正欄位(Correction Field)
    • CF_delay:Delay_Req/Delay_Resp 訊息在 TC 中的修正欄位
    • 意義:反映網路傳播延遲和交換機處理延遲的總和
  4. 日誌輸出格式

    updateClock: offset from master:         0 s       -125 ns, drift:    -82599 ns, path delay:        2340 ns
    
    • 每 1 秒(或根據 sync_interval 設定)輸出一次
    • offset from master:與 Master 時鐘的時間偏移量(秒 + 納秒)
    • drift:頻率漂移補償量(納秒),由 PI 控制器計算得出
    • path delay:平均路徑延遲(納秒),即 Mean Path Delay
  5. Clock Servo 控制迴路

    • PTP daemon 使用 PI(Proportional-Integral)控制器進行時鐘調整
    • Proportional 項:根據當前 Offset 進行比例調整
    • Integral 項:累積歷史 Offset,消除長期誤差
    • 調整方式:
      • 頻率調整(adjFreq):微調時鐘頻率,逐步消除 Offset
      • 時間調整(setTime):在 Offset 過大時直接設定時間
  6. 同步品質指標

    • Offset 穩定性:Offset 應該逐漸收斂到接近 0
    • 路徑延遲穩定性:Mean Path Delay 應該相對穩定(除非網路條件改變)
    • 收斂時間:從啟動到穩定同步所需的時間(通常數秒到數十秒)

驗證要點

  • 確認 Offset 值逐漸收斂(絕對值變小)
  • 確認 Mean Path Delay 在合理範圍內(通常 < 10 μs,取決於網路拓撲(Topology))
  • 確認周期性輸出正常(無中斷或錯誤訊息)
  • 確認 Clock Servo 正在調整(Offset 趨勢向 0 收斂)
  • ⚠️ 若 Offset 持續很大或發散,可能原因:
    • 硬體時間戳記不準確(檢查 DM9058 PTP 時鐘配置)
    • 網路延遲不穩定(檢查網路連線品質)
    • Transparent Clock 的 CF 修正未正確處理
    • Clock Servo 參數需要調整(PI 控制器增益)

2. 時間同步精度驗證

2.1 Offset 收斂過程分析

PTP 系統的同步精度主要體現在 Offset 的收斂速度和最終穩定性上。

典型收斂過程

  1. 初始階段(0-10 秒):

    • Offset 可能較大(數百納秒到數微秒)
    • Clock Servo 開始調整時鐘頻率
    • Mean Path Delay 逐漸穩定
  2. 收斂階段(10-60 秒):

    • Offset 逐漸減小
    • PI 控制器持續調整
    • 系統逐漸穩定
  3. 穩定階段(60 秒後):

    • Offset 收斂到接近 0(通常在 ±100 ns 以內)
    • 系統達到穩定同步狀態

理想同步精度指標

  • Offset 絕對值:< 100 ns(sub-microsecond 精度)
  • Offset 穩定性:標準差 < 50 ns
  • Mean Path Delay 穩定性:變化 < 100 ns

2.2 Clock Servo 控制迴路調校

PI 控制器參數調整

PTP daemon 的 Clock Servo 使用 PI 控制器,主要參數包括:

  • Kp(Proportional Gain):比例增益,控制對當前 Offset 的反應速度
  • Ki(Integral Gain):積分增益,控制對歷史 Offset 累積的補償

調校建議

  • 若 Offset 收斂太慢:適當增加 Kp
  • 若 Offset 震盪:減少 Kp 或 Ki
  • 若長期誤差無法消除:適當增加 Ki

注意:PI 控制器參數通常在 PTPd 的 servo.c 中配置,建議參考 PTPd 文件進行調整。


3. 常見問題與除錯技巧

3.1 網路連線問題排查

問題 1:Link UP 但無法取得 IP

症狀

LWIP: Link is UP - network ready
DHCP: No DHCP client data available
(長時間無 IP 分配)

可能原因

  • DHCP 伺服器未啟動或不可達
  • 網路線連接不良
  • 交換機配置問題

除錯步驟

  1. 檢查網路線連接(確認 Link UP 訊息)
  2. 檢查 DHCP 伺服器是否運行
  3. 嘗試使用靜態 IP 配置
  4. 檢查交換機端口狀態

問題 2:無法收到 PTP 封包

症狀

  • PTP daemon 停留在 UNCALIBRATED 狀態
  • 無 Sync 訊息接收記錄

可能原因

  • Master 未啟動或配置錯誤
  • UDP 319/320 埠口被阻擋
  • 網路路由問題

除錯步驟

  1. 確認 Master(Raspberry Pi)上的 ptp4l 正在運行
  2. 使用網路封包分析工具(如 Wireshark)檢查是否有 PTP 封包
  3. 檢查防火牆設定(UDP 319/320)
  4. 確認網路拓撲(Topology)連接正確

3.2 PTP 封包收發除錯

問題 3:收到封包但協定無反應

症狀

  • 網路層能收到封包
  • PTP daemon 狀態機無變化

可能原因

  • UDP 埠口綁定失敗
  • 封包格式不正確
  • PTP 協定層初始化失敗

除錯步驟

  1. 檢查 dep/net.c 中的 UDP bind 是否成功
  2. 檢查封包是否正確識別為 PTP 封包(devif_ptp.c
  3. 檢查 PTP 協定層初始化日誌
  4. 增加除錯輸出,追蹤封包流向

問題 4:時間戳記不準確

症狀

  • Offset 持續很大或發散
  • Mean Path Delay 異常

可能原因

  • DM9058 PTP 時鐘配置錯誤
  • 硬體時間戳記讀取錯誤
  • CF 修正處理錯誤

除錯步驟

  1. 檢查 DM9058 PTP 時鐘初始化(dm9058_ptp.c
  2. 驗證時間戳記讀取函式(dm9058_ptptime_gettime()
  3. 檢查 CF 修正處理邏輯(dep/net.c
  4. 對比硬體時間戳與軟體時間戳

3.3 系統穩定性問題

問題 5:系統運行一段時間後失同步

症狀

  • 初始同步正常
  • 運行一段時間後 Offset 變大
  • 狀態機回到 UNCALIBRATED

可能原因

  • 時鐘漂移過大
  • 網路延遲不穩定
  • 記憶體洩漏或堆疊溢出

除錯步驟

  1. 檢查系統記憶體使用情況
  2. 監控網路延遲變化
  3. 檢查時鐘頻率調整是否正常
  4. 增加長時間運行測試

4. 系統整合測試

4.1 多個 End Slave 同時運行的驗證

測試場景

  • 一個 Grandmaster(Raspberry Pi)
  • 一個 Transparent Clock(KSZ9477)
  • 兩個 End Slave(AT32F403A + DM9058)

驗證要點

  • 每個 End Slave 獨立與 Master 同步
  • TC 能同時處理多個 ES 的 PTP 訊息
  • 各 ES 的 CF 修正獨立且正確
  • 各 ES 的 Offset 都能收斂到合理範圍

測試結果分析

  • 比較各 ES 的 Offset 和 Mean Path Delay
  • 驗證 TC 的 CF 修正是否正確應用於各 ES
  • 檢查系統負載對同步精度的影響

4.2 Transparent Clock CF 修正機制驗證

測試方法

  1. 記錄 Sync 訊息進入和離開 TC 的時間戳
  2. 計算 TC Residence Time(S1)
  3. 驗證 CF 是否正確累加 S1
  4. 檢查 Slave 計算 Offset 時是否正確使用 CF

驗證要點

  • ✅ CF 修正值與實際 TC Residence Time 一致
  • ✅ Forward Path(Sync)和 Reverse Path(Delay_Req/Delay_Resp)的 CF 都正確
  • ✅ Slave 計算 Offset 時正確扣除 CF

4.3 長時間穩定性測試

測試場景

  • 系統連續運行 24 小時以上
  • 監控 Offset 和 Mean Path Delay 的變化

驗證指標

  • Offset 穩定性:標準差 < 50 ns
  • Mean Path Delay 穩定性:變化 < 100 ns
  • 系統無異常:無記憶體洩漏、無堆疊溢出、無狀態機異常

結語

中篇的目標,是幫助讀者深入理解 PTP 系統的運行機制,掌握時間同步精度的量測方法,並學會系統除錯與優化技巧

  • 成果展示:詳細分析網路層、PTP 初始化、以及周期性運行的成果
  • 精度驗證:理解 Offset 收斂過程和 Clock Servo 控制迴路
  • 除錯技巧:掌握常見問題的排查方法和解決方案
  • 整合測試:驗證多 Slave 拓撲(Topology)、CF 修正機制、以及長時間穩定性

到這一步,您已經掌握了完整的 PTP 時間同步系統實作與驗證流程,能夠:

  • 獨立完成 AT32F403A + DM9058 平台的環境建置
  • 驗證 PTP 系統的同步精度
  • 排查和解決常見問題
  • 進行系統整合測試

下一步建議

  • 根據實際應用需求調整 PI 控制器參數
  • 優化硬體時間戳記讀取流程
  • 擴展到更多 End Slave 的拓撲(Topology)
  • 探索更高精度的時間同步方案

下篇預告

下篇中,我們將深入探討:

  1. 系統整合與測試

    • 完整的測試前置 Checklist
    • 系統啟動順序與驗證流程
    • Wireshark 抓包技巧與必要欄位
  2. 兩點抓包驗證 TC CorrectionField(⭐ 下篇核心):

    • 端點兩點抓包方案(GM 端 + ES 端)
    • 封包配對與 ΔCF 計算
    • CorrectionField 單位轉換與統計分析
  3. 工程實作導向的驗證方法

    • 可重現、可量化、可除錯的測試流程
    • 完整的測試結果報告模板
    • 常見問題排查 SOP

下篇將幫助您

  • 使用兩點抓包證明 TC 的 CorrectionField 累加機制
  • 形成工程現場可直接照做的測試 SOP
  • 掌握故障排除手冊與驗證方法

下篇定位:工程實作導向(可重現、可量化、可除錯),使用「兩點抓包」證明 correctionField 在路徑中被累加。


專有名詞對照表(Terminology)

中文 英文 縮寫 說明
拓撲 Topology - 網路設備的連接結構
精確時間協定 Precision Time Protocol PTP IEEE 1588 標準
透明時鐘 Transparent Clock TC 修正網路延遲的中間設備
修正欄位 Correction Field CF PTP 訊息中累加延遲的欄位
駐留時間 Residence Time - 訊息在 TC 內部的停留時間
主時鐘 Grandmaster GM 提供時間源的 PTP Master
從時鐘 Slave Clock - 同步到 Master 的設備
時間戳記 Timestamp - 精確的時間記錄
偏移量 Offset - Slave 與 Master 的時間差
單步模式 One-Step - 時間戳記直接嵌入 Sync 訊息
端對端 End-to-End E2E 延遲測量機制
比例積分控制器 Proportional-Integral Controller PI 用於時鐘調整的控制迴路

參考資料

  1. Artery Technology 原始碼套件(移植來源)SC0101_AT32F407_437_PTP_Daemon_V2.0.0.zip(本專案以其 PTP daemon 整合架構為基礎,移植到 AT32F403A 平台)
  2. IEEE 1588-2008: IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems
  3. AT32F403A Datasheet: Artery Technology AT32F403A/407 Series MCU Datasheet
  4. DM9058 Datasheet: Davicom DM9058 10/100Mbps Ethernet Controller
  5. KSZ9477 User Guide: Microchip KSZ9477 7-Port Gigabit Ethernet Switch with PTP
  6. LinuxPTP Documentation: http://linuxptp.sourceforge.net/
  7. lwIP Documentation: https://www.nongnu.org/lwip/

附錄:原始碼連結

  • 程式碼來源:Artery Technology SC0101_AT32F407_437_PTP_Daemon_V2.0.0.zip(移植基礎)
  • DM9058 驅動: dm9058_edriver_v1.6.1a

上一篇:AT32F403A + DM9058 實現高精度 PTP 時間同步(上篇):環境建置與平台 Bring-up


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言