摘要:釋放 Pi 5 野獸潛能!打造專屬的 IEEE 1588 PTP 納秒級同步神獸
各位 Pi 友們,如果你手上的樹莓派 Pi 5 還只是用來跑跑一般的 Web Server 或是當成普通的 Desktop 用,那真的太浪費那顆 RP1 南橋晶片 的強大 I/O 實力了!作為從 Pi 4 到 Pi 5 的性能大躍進,Pi 5 的 SPI 介面速度和穩定性簡直是為了硬核應用而生。
今天我們不談普通的應用,我們要來玩點“硬”的——如何通過 高速 SPI 匯流排,外掛一顆 Davicom(聯傑)的 DM9058 1588-PTP 時間同步晶片,直接把你的 Pi 5 升級成工業級的網路設備。這不只是一個擴展網口的教學,更是一場深入 Linux 內核驅動與硬體極限的改裝之旅!
為什麼我們要這麼折騰?(典型應用場景)
因為我們要的是 Precision (極致精准)!藉由 Davicom(聯傑)的 DM9058 強悍的 IEEE 1588 PTP 硬體支援,我們能達到 納秒等級 (Nanosecond-level) 的同步精度。這可是普通 USB 網卡望塵莫及的境界。
這套改裝適合哪些硬核玩家?
- 機器人狂熱者 (Advanced Robotics):多軸協作機器人還在各自為政?DM9058 讓所有關節像鐘錶一樣精確協作,動作精度直接拉滿。
- 工控自動化大神 (Industrial Automation):生產線上的微秒誤差都可能導致災難。DM9058 確保關鍵指令在絕對正確的時間點觸發,這是工業 4.0 的基石。
- 追求極致時序的開發者:無論是金融交易的時間戳記記,還是分散式系統的時基統一,掌握納秒級的時間控制權,就是帥氣。
一、 硬體軍火庫解析 (Core Hardware Analysis)
1. DM9058 1588-PTP 時間同步晶片
這是我們這次改裝的核心武器。DM9058 不僅僅是個網卡,它將 PTP clock 直接整合在晶片內。
- 超強同步:完美支援 IEEE 1588 PTP 規範。
- 簡單暴力 SPI:專為 MCU 和單板電腦設計。不用繁雜的 PCIE 線路,幾根 SPI 線就能直接跟 Pi 5 對話。
- 穩定輸出:實體層連接超穩,專為高可靠性環境打造。
- Linux 友善:驅動程式支援完善,編譯一下就能在 Raspberry Pi OS 上跑。
2. 樹莓派 Pi 5 (The Beast)
搭載 Broadcom BCM2712 和 RP1 I/O 控制晶片,I/O 吞吐能力是歷代最強。
- 通用性無敵:只要有 SPI 就有戲!其實 Pi 3, 4, 5 通通都能接 DM9058,但我們當然選最強的 Pi 5 來玩。
- OS 支持:完整的 Linux 環境讓我們可以隨心所欲地編譯模組、調試內核。
- 性價比之王:說到 1588 one-step 同步,大家可能會想到 CM4 (Compute Module 4) 搭配特定的 PHY。確實,CM4 方案很強,但目前 Pi 除了 CM4 通過 PHY 可以達到 one-step,但是 CM4 架設成本較昂貴 , Davicom(聯傑)的 DM9058 是目前Pi上的1588 one step 的經濟方案。花小錢辦大事,這才是 Maker 的浪漫!
二、 本次改裝目標 (Modding Goals)
我們的任務清單很簡單,目標就是把這套系統架起來,並驗證它的實力:
- 打通任督二脈 (啟用 SPI):進這 `sudo raspi-config` 把 Pi 5 的 SPI Bus 開關打開:

raspi_dm9058_raspi_config_spi_1

- 注入靈魂 (驅動程式):搞定 DM9058 的驅動模組,讓 Linux 內核認得它。
- 極限測試 (PTP Protocol):成功後你會得到一個新的網口(例如 `eth1`),直接跑 PTP4L 測試,親眼見證資料同步的快感。
三、 備料清單 (Preparation)
開工前,請確認你的實驗桌上有這些東西:
主機:樹莓派 Pi 5 (強烈建議裝個主動式風扇,效能全開才不會縮缸)
擴展板:DM9058 Demoboard 從朋友處取得
電源/存儲:5V/5A USB-C 電源、microSD 卡 (最好是用高速卡,跑 OS 才順)
連接線:杜邦線 (連接 **SPI** 針腳)、RJ-45 網線
作業系統:Raspberry Pi OS (64-bit)** (都用 Pi 5 了,當然上 64-bit)
開發環境:確認 `raspberrypi-kernel-headers` 和 `build-essential` 這些吃飯傢伙都要裝好
測試機:需要一台有網卡的 PC 來對接。本文使用 PC + Intel I226-V 網卡,跑 Debian-12。這網卡在我們系統對應的裝置名稱為 `enp1s0`,後面測試會出現。
驅動:dm9058_linux_driver_1.1.7.tar.bz2 [Google Drive、騰訊微雲]
四、 手把手實戰教學 (Step-by-Step Guide)
準備好了嗎?我們開始動手!
1. 硬體連接 (Hardware Connection)
DM9058 Demoboard 接線圖:
拿出你的杜邦線,對照下表把 DM9058 擴展板接到 Pi 5 的 40-pin GPIO 上(這邊用 SPI0 當範例):

[TIP]
老手經驗談:線路千萬要插好插滿!SPI 是高速信號,接觸不良會讓你 Debug 到懷疑人生。線長建議保持在 15-20 公分以內,太長會有信號衰減干擾的問題,切記!
系統連接示意:

2. 軟體環境建置 (Software Setup)
在編譯之前,先幫你的 Pi 5 補補身子,把該裝的工具裝一裝:
# 1. 更新軟體包清單,保持最新狀態
sudo apt update
# 2. 安裝內核標頭檔與構建工具,這是編譯驅動的基礎
sudo apt install raspberrypi-kernel-headers build-essential git -y
# 3. 解壓 DM9058 驅動程式原始碼大法
tar -xvf dm9058_linux_driver_1.1.7.tar.bz2
3. 驅動程式編譯與安裝 (Compile & Install)
拿到原始碼後(`dm9058.c`, `Makefile` 都在裡面了),直接開編:
# 1. 進入驅動程式目錄
cd dm9058_linux_driver
# 2. 編譯驅動模組
make
接下來是關鍵步驟:配置 Device Tree (設備樹)。我們寫好了一個腳本 `install_dt_overlay.sh` 來自動化這個過程:
sudo ./install_dt_overlay.sh
Starting DM9058 Device Tree Overlay Setup...
Step 1: Compiling Device Tree Overlay...
Compilation successful. created dm9058.dtbo
Step 2: Installing Device Tree Overlay...
Installed dm9058.dtbo to /boot/overlays
Step 3: Enabling overlay in config.txt...
Overlay 'dm9058' is already enabled in /boot/firmware/config.txt
--------------------------------------------------------
Setup Complete!
IMPORTANT: You must REBOOT your system for changes to take effect.
--------------------------------------------------------
```
看到 `Setup Complete!` 就是爽。現在,請重啟你的 Pi 5 讓設置生效:
sudo reboot4. 驅動功能驗證 (Verification)
重啟回來後,是時候見證奇跡了:
檢查驅動有沒有掛上去:
cd dm9058_linux_driver
sudo make install
dmesg | grep dm9058
如果你看到類似 `dm9058 spi0.0: chip 9058 found` 的資訊,恭喜你,硬體已經被內核抓到了!
檢查網路介面:
這時候你應該會多出一個網口,通常是 `eth1`(原本內建的是 `eth0`)。插上網線,PTP 同步的大門已經為你打開。
如果有 DHCP,它應該已經自動抓到 IP 了。來看看狀態:
# 觀察網路介面狀態
ip a
...
5: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:60:6e:e2:87:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.193.177/24 brd 192.168.193.255 scope global dynamic noprefixroute eth1
valid_lft 7148sec preferred_lft 7148sec
inet6 fe80::927e:440d:6f99:6fb4/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5. PTP 時間同步實測 (PTP Time Sync Testing)
重頭戲來了,我們要來玩真的。
前置作業:校準 DM9058 PTP Clock
先確認一下 DM9058 driver 對應到哪一個 Linux PTP device:
sudo ethtool -T eth1
Time stamping parameters for eth1:
Capabilities:
hardware-transmit
software-transmit
hardware-receive
software-receive
software-system-clock
hardware-raw-clock
PTP Hardware Clock: 1
Hardware Transmit Timestamp Modes:
off
on
onestep-sync
Hardware Receive Filter Modes:
none
all
ptpv2-event
ptpv2-delay-req
看到 `PTP Hardware Clock: 1` 了嗎?這代表我們的硬體時鐘已經就位。
接著我們來手動校準一下這個 PTP clock:
tom@rpi5:~/work/dm9058_linux_driver $ sudo phc_ctl /dev/ptp1 get
phc_ctl[63197.872]: clock time is 609529.043418589 or Thu Jan 8 09:18:49 1970
tom@rpi5:~/work/dm9058_linux_driver $ sudo phc_ctl /dev/ptp1 set
phc_ctl[63213.821]: set clock time to 1765333291.036764025 or Wed Dec 10 10:21:31 2025
tom@rpi5:~/work/dm9058_linux_driver $ sudo phc_ctl /dev/ptp1 get
phc_ctl[63217.404]: clock time is 1765333294.619768825 or Wed Dec 10 10:21:34 2025
現在 `/dev/ptp1` 的時間已經跟系統對上了。
[關於校準]
這裡稍微對一下就好,這只是秒級的粗調。真正的魔法在於後面的 PTP 同步,那可是納秒級的自動收斂,讓它自己去微調就好。
[TIPS: 認清你的時間裝置]
用 `ethtool` 看仔細了:
- 如果顯示 `PTP Hardware Clock: 0` -> 後面指令請用/dev/ptp0
- 如果顯示 `PTP Hardware Clock: 1` -> 後面指令請用/dev/ptp1
- ...以此類推,別打錯囉!
經由 Ethernet Hub 同步
想要玩轉 PTP 同步,首先得請出 LinuxPTP 這把瑞士刀。
前置準備:
先來下載 LinuxPTP:
`git clone https://github.com/richardcochran/linuxptp.git`
這支 DM9058 驅動支持的是 4.4 版本,所以我們把 LinuxPTP 切換過去,避免版本打架:
cd linuxptp
git checkout -b v44 v4.4
然後開始 build & install:
make clean && make
sudo make install
[NOTE]
記得!Pi 5 和測試端的 PC 都要安裝 LinuxPTP,這可是雙人舞,少一個都不行。
觀察與驗證:
在 Pi 5 上一聲令下,啟動 Master 模式:
sudo ptp4l -m -H -i eth1
你會看到它進入 Master 模式,開始等待連接:
ptp4l[161406.324]: selected /dev/ptp1 as PTP clock
ptp4l[161406.325]: port 1 (eth1): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[161406.326]: port 0 (/var/run/ptp4l): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[161406.326]: port 0 (/var/run/ptp4lro): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[161414.056]: port 1 (eth1): LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[161414.056]: selected local clock 00606e.fffe.e28785 as best master
ptp4l[161414.057]: port 1 (eth1): assuming the grand master role
回到 測試端 PC,啟動 Slave 模式來追隨 Master:
sudo ptp4l -m -H -i enp1s0 -s
其中 `enp1s0` 是我的 Intel-226V 網卡名稱,`-s` 代表 Slave 模式。
盯著螢幕,你會看到 Slave 開始瘋狂收斂時間:
ptp4l[1802135.896]: selected /dev/ptp0 as PTP clock
ptp4l[1802135.897]: port 1 (enp1s0): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1802135.897]: port 0 (/var/run/ptp/ptp4l): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1802135.897]: port 0 (/var/run/ptp/ptp4lro): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1802135.919]: port 1 (enp1s0): new foreign master 00606e.fffe.e28785-1
ptp4l[1802139.919]: selected best master clock 00606e.fffe.e28785
ptp4l[1802139.919]: port 1 (enp1s0): LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[1802142.919]: master offset 2718985382 s0 freq -0 path delay 40606
ptp4l[1802143.919]: master offset 2718902783 s1 freq -82599 path delay 40606
ptp4l[1802144.919]: master offset -2637 s2 freq -85236 path delay 40606
ptp4l[1802144.919]: port 1 (enp1s0): UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[1802145.919]: master offset 15483 s2 freq -67907 path delay 25120
ptp4l[1802146.919]: master offset 12398 s2 freq -66347 path delay 13369
ptp4l[1802147.919]: master offset -2336 s2 freq -77361 path delay 11852
ptp4l[1802148.919]: master offset -7090 s2 freq -82816 path delay 11313
ptp4l[1802149.919]: master offset -6096 s2 freq -83949 path delay 10774
ptp4l[1802150.919]: master offset -4202 s2 freq -83884 path delay 10386
ptp4l[1802151.919]: master offset -2854 s2 freq -83797 path delay 9998
ptp4l[1802152.919]: master offset -1459 s2 freq -83258 path delay 9998
ptp4l[1802153.919]: master offset -844 s2 freq -83081 path delay 9921
ptp4l[1802154.919]: master offset 39 s2 freq -82451 path delay 9837
ptp4l[1802155.919]: master offset -515 s2 freq -82993 path delay 9921
ptp4l[1802156.919]: master offset 364 s2 freq -82269 path delay 9828
ptp4l[1802157.919]: master offset -10 s2 freq -82533 path delay 9828
ptp4l[1802158.919]: master offset 7 s2 freq -82519 path delay 9826
ptp4l[1802159.919]: master offset -44 s2 freq -82568 path delay 9828
看著那個 `master offset` 從幾秒瞬間收斂到納秒級,心裡只有一個爽字。
想要更硬核一點?打開 Wireshark 抓包,親眼看看 PTP 封包是怎麼在網線上跳舞的:

觀察 Line 124:
IP 192.168.193.177 (Pi 5) 霸氣地發出 `SYNC` 和 `Follow_Up`。
IP 192.168.193.190 (PC) 收到後,回敬一個 `Delay_Req`。
Pi 5 再回一個 `Delay_Resp`。
這就是一次完美的時鐘握手!
直接對接同步
覺得中間隔個 Hub 不夠純粹?那就拔掉它!直接把 Pi 5 和 PC 對接,這才是最純淨的直連同步。
sudo ptp4l -m -H -i enp1s0 -s
[sudo] password for tom:
ptp4l[1803544.824]: selected /dev/ptp0 as PTP clock
ptp4l[1803544.825]: port 1 (enp1s0): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1803544.825]: port 0 (/var/run/ptp/ptp4l): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1803544.825]: port 0 (/var/run/ptp/ptp4lro): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1803545.056]: port 1 (enp1s0): new foreign master 00606e.fffe.e28785-1
ptp4l[1803549.056]: selected best master clock 00606e.fffe.e28785
ptp4l[1803549.056]: port 1 (enp1s0): LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[1803551.055]: master offset -29515 s0 freq -82433 path delay 242
ptp4l[1803552.055]: master offset -29605 s1 freq -82523 path delay 242
ptp4l[1803553.055]: master offset -2594 s2 freq -85117 path delay 242
ptp4l[1803553.055]: port 1 (enp1s0): UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[1803554.055]: master offset 541 s2 freq -82760 path delay -257
ptp4l[1803555.055]: master offset 780 s2 freq -82359 path delay -257
ptp4l[1803556.055]: master offset 220 s2 freq -82685 path delay 220
ptp4l[1803557.055]: master offset 431 s2 freq -82408 path delay 220
ptp4l[1803558.055]: master offset 377 s2 freq -82332 path delay 216
ptp4l[1803559.055]: master offset 189 s2 freq -82407 path delay 228
ptp4l[1803560.055]: master offset 183 s2 freq -82357 path delay 216
ptp4l[1803561.055]: master offset 19 s2 freq -82466 path delay 228
ptp4l[1803562.055]: master offset 64 s2 freq -82415 path delay 216
ptp4l[1803563.056]: master offset -28 s2 freq -82488 path delay 216
ptp4l[1803564.055]: master offset -8 s2 freq -82476 path delay 214
ptp4l[1803565.056]: master offset 47 s2 freq -82424 path delay 208
ptp4l[1803566.056]: master offset -35 s2 freq -82491 path delay 214
ptp4l[1803567.056]: master offset -6 s2 freq -82473 path delay 214
各位觀眾!看看這個收斂速度和穩定度!
沒有了不支持 1588 的 Hub 當拖油瓶,`master offset` 幾乎是瞬間壓在個位數跳動。這就是硬體 One-step Sync 的真正實力,精准到讓人起雞皮疙瘩!
結語:這才是 Pi 5 的完全體!
雖然 Pi 5 原生的網口已經很強,但加上 Davicom(聯傑)的 DM9058 後,它直接進化成了一台專業的工業級時間同步設備。這不只是一個擴展板,這是解鎖了高階應用的鑰匙。
不管你是要做機器人協同、高頻交易,還是單純想體驗納秒級同步的爽快感,這套組合絕對能滿足你的硬核需求。還等什麼?快去把你的 Pi 5 改裝起來,釋放它真正的潛能吧!
下一篇會繼續介紹 one step 的串接,請期待~
玩家篇_樹莓派 Pi 5 核心效能結合 DM9058 1588 擴展 (二):解鎖 One-Step 納秒級同步























