各位 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 網卡望塵莫及的境界。
這套改裝適合哪些硬核玩家?
這是我們這次改裝的核心武器。Davicom(聯傑)的 DM9058 不僅僅是個網卡,它將 PTP clock 直接整合在晶片內。
搭載 Broadcom BCM2712 和 RP1 I/O 控制晶片,I/O 吞吐能力是歷代最強。
我們的任務清單很簡單,目標就是把這套系統架起來,並驗證它的實力:
sudo raspi-config 把 Pi 5 的 SPI Bus 開關打開:

eth1),直接跑 PTP4L 測試,親眼見證資料同步的快感。開工前,請確認你的實驗桌上有這些東西:
| 類別 | 清單與說明 |
|---|---|
| 主機 | 樹莓派 Pi 5 (強烈建議裝個主動式風扇,效能全開才不會縮缸) |
| 擴展板 | Davicom(聯傑)的 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、騰訊微雲 |
準備好了嗎?我們開始動手!
拿出你的杜邦線,對照下表把 DM9058 擴展板接到 Pi 5 的 40-pin GPIO 上(這邊用 SPI0 當範例):
| Pi 5 Pin Name | Pi Pin Number | Demoboard module |
|---|---|---|
| 3.3v | 17 | PWR 3.3v |
| GPIO 22 | 15 | INT |
| CE1 | 26 | SS |
| MOSI | 19 | MOSI |
| MISO | 21 | MISO |
| SCLK | 23 | CLK |
| GND | 25 | GND |
[!TIP]
老手經驗談: 線路千萬要插好插滿!SPI 是高速信號,接觸不良會讓你 Debug 到懷疑人生。線長建議保持在 15-20 公分以內,太長會有信號衰減干擾的問題,切記!

在編譯之前,先幫你的 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
拿到原始碼後(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 reboot
重啟回來後,是時候見證奇跡了:
檢查驅動有沒有掛上去:
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
重頭戲來了,我們要來玩真的。
先確認一下 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- ...以此類推,別打錯囉!
想要玩轉 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 封包是怎麼在網線上跳舞的:
![[raspi_dm9058_wireshark_2_step.jpg]]
觀察 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 原生的網口已經很強,但加上 Davicom(聯傑)的 DM9058 後,它直接進化成了一台專業的工業級時間同步設備。這不只是一個擴展板,這是解鎖了高階應用的鑰匙。
不管你是要做機器人協同、高頻交易,還是單純想體驗納秒級同步的爽快感,這套組合絕對能滿足你的硬核需求。還等什麼?快去把你的 Pi 5 改裝起來,釋放它真正的潛能吧!
下一篇:玩家篇_樹莓派 Pi 5 核心效能結合 DM9058 1588 擴展 (二):解鎖 One-Step 納秒級同步