ASR-A502 GMSL 相機時間同步
在 ASR-A502 平台上實現高精度 GMSL 相機時間同步的技術文檔。
概述
- 背景與同步挑戰
- 解決方案架構與實施
- 驗證與確認程序
為什麼 AMR 和機器人系統需要時間同步
在多相機機器人系統中,不準確的時間戳對齊會顯著影響 SLAM、感測器融合和基於 AI 的感知工作負載的性能。
要確保多個相機之間的確定性幀同步,需要硬體輔助的時間同步機制。
技術挑戰
- Linux 系統時間與相機硬體時間不同步
- 多相機幀時間戳對齊問題
- GMSL 解串器引入的時序不一致
- 需要精確的 PPS(每秒脈衝)同步
解決方案架構
ASR-A502 平台提供基於以下內容的硬體輔助同步框架:
- Intel TGPIO(Time-Aware GPIO)
- PTP 硬體時鐘(
/dev/ptpX) - PPS 信號生成
- 連續同步校準服務
平台目前支援兩種同步方法。

解決方案實施
BIOS 配置
在使用同步框架之前,必須啟用以下 BIOS 功能:
- 啟用 TGPIO 支援
- 整合 BIOS 支援:
INTC1023INTC1024

TGPIO 硬體路由
驗證 CPU TGPIO 信號是否正確連接到 GMSL 解串器。
以下範例使用 ASR-A502 平台。
CPU 到 120-pin 連接器

120-pin 連接器到 MAX9296A(GMSL 子板)

驗證 PTP 設備並編譯測試工具
識別哪個 /dev/ptpX 節點對應 TGPIO 設備。
預期結果應類似於以下範例,其中 TGPIO 設備映射到 /dev/ptp3。
udevadm info /dev/ptp* | grep virtual

根據所使用的 Linux 版本編譯 testptp 工具。
參考來源:
https://github.com/intel/linux-intel-lts/tree/lts-v6.12.36-linux-250711T071314Z
Build procedure:
cd <kernel source folder>
make headers_install ARCH=x86_64
make -C tools/testing/selftests/ TARGETS=ptp
Navigate to the generated binary location:
cd tools/testing/selftests/ptp
The folder contains:
testptpexecutabletestptp.csource code
The source code also demonstrates how to control TGPIO through IOCTL interfaces.
時間偏移測量
比較 TGPIO PTP 硬體時鐘與 Linux CLOCK_REALTIME 以計算同步偏移。
sudo ./testptp -d /dev/ptp3 -X

PPS 信號生成
對於硬體驗證,testptp 可以透過 TGPIO 輸出引腳生成 PPS 波形。
PPS 信號應使用示波器進行驗證。
ASR-A502 GMSL 子板包含兩個解串器 IC。
TIME_SYNC_0 → PPS 輸出
使用 /dev/ptp3 的範例:
sudo ./testptp -d /dev/ptp3 -i 0 -L 0,2 -p 1000000000
1000000000代表 1 秒週期- 輸出波形:
- 50% 高電平
- 50% 低電平
- 生成的 PPS 信號未與 Linux 系統時間相位對齊
TIME_SYNC_1 → PPS 輸出
sudo ./testptp -d /dev/ptp3 -i 1 -L 1,2 -p 1000000000

連續同步服務
在長時間運行期間,Linux 系統時間與 TGPIO PTP 硬體時鐘之間的漂移可能會逐漸增加。
對於需要穩定長期同步的機器人和 AMR 應用,強烈建議使用連續校準機制。
Intel 提供參考實現:
RDC#785823
Precision Time Measurement Test Scripts and Timed-GPIO for Linux*
https://cdrdv2.intel.com/v1/dl/getContent/785823?explicitVersion=true
套件包含樣本工具 pps,在控制 TGPIO 輸出的同時連續對齊 PPS 信號與 Linux 系統時間。
來源位置:
785823_PTM_Test_Scripts_TGPIO_for_Linux_Rev_1_0/
└── Time-Aware-GPIO-Support/
└── user-code/
└── tgpio_pps/
└── pps.c
在編譯 pps.c 之前,使用以下命令獲取 TSC/clock 比率和標稱核心晶體時鐘頻率:
cpuid -1 | grep -E "(Time Stamp|TSC/clock|nominal)"

修改 pps.c 中的必要定義,然後重新編譯工具。

對於 TIME_SYNC_0 PPS 輸出:
sudo ./pps -d /dev/ptp1 -p 0
此服務連續對齊生成的 PPS 信號與 Linux 系統時間。

注意事項
/dev/ptpX索引可能因不同的硬體平台和 BIOS 版本而有所不同。- PPS 時序準確性應始終使用示波器進行驗證。
- 對於長時間運行的機器人和自主系統部署,強烈建議使用連續同步服務。
- 精確的硬體時間同步對於多相機系統中可靠的 SLAM、感測器融合和 AI 感知工作負載至關重要。