DAVICOM DM9051 在嵌入式 Linux 的驅動設定與除錯
用 SPI 介面的 DM9051 為沒有內建 MAC 的 SoC 加上乙太網路:核心驅動啟用、Device Tree 設定與常見問題排解。
為什麼選 SPI 乙太網
許多低階 SoC 或 MCU 並沒有內建 MAC,或 MAC 已被佔用。DM9051 是單晶片 10/100M 乙太網控制器,整合 MAC 與 PHY,只用 SPI 就能加上一個網路埠,大幅簡化硬體佈線。
它已有 Linux kernel 原生驅動,因此在 Buildroot / Yocto 等嵌入式 Linux 平台上整合相當成熟。
啟用核心驅動
DM9051 的驅動位於 kernel 的 drivers/net/ethernet/davicom 目錄。在 menuconfig 中啟用對應的 DM9051 選項(編譯進核心或做成模組)即可。
確認你的 SPI 控制器驅動也一併啟用,因為 DM9051 是掛在 SPI 匯流排上的裝置,必須有可用的 SPI master。
Device Tree 設定
在 SPI 控制器節點下新增一個子節點描述 DM9051:compatible 設為 "davicom,dm9051"、指定 reg(晶片選擇編號)、spi-max-frequency(先保守設定,如 10~25MHz)、以及連接到中斷腳的 interrupts/interrupt-parent。
若硬體有重置腳,也一併用 reset-gpios 描述。設定正確後開機 dmesg 應能看到網卡被註冊(例如 eth0)。
常見問題排解
若網卡註冊失敗或封包不通,依序檢查:中斷是否正確接線與設定(IRQ 是常見問題);SPI 速度是否過高,先調低再逐步提升;MAC 位址是否有效(必要時於 device tree 或開機腳本指定)。
善用 dmesg 與 ethtool 觀察連線狀態(link、速度、雙工),多數問題都能從這裡定位。
文中提及的產品
DM9051 SPI 介面 10/100M Ethernet 控制器
DM9051 是 DAVICOM 推出的單晶片 10/100M Fast Ethernet 控制器,採用 SPI 介面,無需 8/16-bit 並列 bus,大幅簡化硬體設計。內建 16KB SRAM 收發 Buffer,支援 Full-Duplex 流控,已有 Linux kernel 原生驅動支援,適合 ARM 或 RISC-V MCU 系統的網路擴充。
DM9000A 並列介面 10/100M Ethernet 控制器
DM9000A 是廣受嵌入式 Linux 社群熟悉的老牌 Ethernet 控制器,採用 8/16-bit 並列 ISA-like 介面,在 ARM9/ARM11 平台(如 Samsung S3C 系列)上有成熟驅動,u-boot 及 Linux kernel 原生支援,常見於工業嵌入式主板及 SoC 評估板。