iT邦幫忙

1

玩家篇_樹莓派 Pi 5 核心效能結合 DM9058 1588 擴展 (一):高速 SPI 介面應用教學

  • 分享至 

  • xImage
  •  

摘要:釋放 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 時間同步晶片

這是我們這次改裝的核心武器。Davicom(聯傑)的 DM9058 不僅僅是個網卡,它將 PTP clock 直接整合在晶片內。

  • 超強同步: 完美支援 IEEE 1588 PTP 規範。
  • 簡單暴力 SPI: 專為 MCU 和單板電腦設計。不用繁雜的 PCIE 線路,幾根 SPI 線就能直接跟 Pi 5 對話。
  • 穩定輸出: 實體層連接超穩,專為高可靠性環境打造。
  • Linux 友善: 驅動程式支援完善,編譯一下就能在 Raspberry Pi OS 上跑。

2. 樹莓派 Pi 5 (The Beast)

搭載 Broadcom BCM2712RP1 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)

我們的任務清單很簡單,目標就是把這套系統架起來,並驗證它的實力:

  1. 打通任督二脈 (啟用 SPI):進這 sudo raspi-config 把 Pi 5 的 SPI Bus 開關打開:
    https://ithelp.ithome.com.tw/upload/images/20260209/20181669EFOyZtdfho.png

https://ithelp.ithome.com.tw/upload/images/20260209/201816697VJdxBQ0nE.png

  1. 注入靈魂 (驅動程式): 搞定 DM9058 的驅動模組,讓 Linux 內核認得它。
  2. 極限測試 (PTP Protocol): 成功後你會得到一個新的網口(例如 eth1),直接跑 PTP4L 測試,親眼見證資料同步的快感。

三、 備料清單 (Preparation)

開工前,請確認你的實驗桌上有這些東西:

類別    清單與說明                                                                               
主機    樹莓派 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-headersbuild-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 當範例):

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 公分以內,太長會有信號衰減干擾的問題,切記!

系統連接示意:

https://ithelp.ithome.com.tw/upload/images/20260209/20181669OMCxfZDLQd.png

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 reboot

4. 驅動功能驗證 (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 封包是怎麼在網線上跳舞的:

![[raspi_dm9058_wireshark_2_step.jpg]]

觀察 Line 124:
IP 192.168.193.177 (Pi 5) 霸氣地發出 SYNCFollow_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 改裝起來,釋放它真正的潛能吧!

下一篇:玩家篇_樹莓派 Pi 5 核心效能結合 DM9058 1588 擴展 (二):解鎖 One-Step 納秒級同步


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

尚未有邦友留言

立即登入留言