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.c 的 initData() 寫入 ptpClock->defaultDS:
      • SLAVE_ONLY = TRUE:僅從時鐘模式
      • DEFAULT_DELAY_MECHANISM = E2E:End-to-End 延遲機制
      • DEFAULT_TWO_STEP_FLAG = FALSE → defaultDS.twoStepFlag:啟用 One-Step 模式(時間戳直接嵌入 Sync 訊息)
  3. PTP 狀態機轉換:

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

    • 系統會透過 BMC 演算法選擇最佳主時鐘
    • 比較 clockClass、priority1、priority2 等參數
    • 若找到合適的 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) }}
直播中

尚未有邦友留言

立即登入留言