DM9000 是由 DAVICOM Semiconductor(瑞昱半导体)生产的一款非常流行且低成本的 10/100M 自适应以太网控制器芯片,它因其高性能、低功耗和简单的接口设计,在过去的十几年里被广泛应用于各种嵌入式开发板、工业控制设备、消费电子产品中,尤其是在 树莓派 的早期版本(A型、B型)上作为标准网卡,使其声名远播。

DM9000 核心概述
什么是 DM9000?
它是一个单芯片的、低功耗的 CMOS 10/100M 以太网控制器,它集成了 MAC(媒体访问控制)和 PHY(物理层)功能,可以轻松连接到各种嵌入式微处理器(如 ARM, MIPS, 8051 等)上。
主要特点
- 高度集成:单芯片解决方案,内置 10/100M 自适应 PHY、16K 字节 SRAM 缓冲区、DMA 控制器。
- 接口简单:支持 8/16/32 位的数据总线模式,易于与不同架构的 MCU 对接。
- 低功耗:工作功耗很低,非常适合电池供电的便携设备。
- 性能优异:支持全双工/半双工模式,符合 IEEE 802.3u 100BASE-T 和 IEEE 802.3 10BASE-T 标准。
- 即插即用:支持 Auto-Negotiation(自动协商),能自动与网络设备协商最佳工作模式(10/100M,全/半双工)。
- LED 指示:内置硬件 LED 控制逻辑,可轻松连接网络状态指示灯(Link/Activity)。
- 软件友好:提供标准 SROM 接口,用于存储 MAC 地址和 EEPROM 数据。
技术手册核心内容解析
一份完整的技术手册通常包含以下几个关键部分,我会逐一解释其重要性。
芯片引脚图
这是硬件设计的起点,DM9000 通常有 100-pin 或 48-pin 的封装(如 PQFP100),你需要关注:
- 电源引脚:
VDD(数字电源),VDDA(模拟电源),VDDPHY(PHY电源),VDD33(3.3V I/O电源),GND(地),注意它们的电压要求,通常为 3.3V。 - 数据总线:
SD[15:0](16位数据线),在 8 位模式下可复用为SD[7:0]。 - 地址总线:
CMD(命令/数据选择脚,高电平为命令,低电平为数据),SA[10:2](地址线)。 - 控制引脚:
IORB#(I/O 读),IOWB#(I/O 写),PWRDN#(低功耗模式),INT#(中断输出)。 - 网络接口:
TPIN+/TPIN-(差分信号输入),TPOUT+/TPOUT-(差分信号输出),用于连接网口的变压器。 - 时钟:
XTAL1/XTAL2(连接外部晶振,通常为 25MHz)。 - LED 引脚:
LED0(Link),LED1(Activity)。
功能框图
它展示了芯片内部的工作原理,帮助你理解数据流。

- MAC 层:负责数据帧的封装、解封装,CSMA/CD 冲突检测等。
- PHY 层:负责物理层的编码、解码,与网线上的模拟信号进行交互。
- SRAM Buffer:16K 字节的片内内存,用于存储待发送和接收到的数据包,缓解 CPU 的处理压力。
- DMA 控制器:支持直接内存访问,可以在不占用 CPU 的情况下,将数据包在 SRAM Buffer 和系统内存之间进行传输,大大提高效率。
- 主机接口:这部分是连接外部 MCU 的桥梁,包括数据/地址总线、控制逻辑和寄存器组。
寄存器映射
这是软件编程的核心,CPU 通过读写 DM9000 的内部寄存器来控制其工作,主要寄存器包括:
- 数据端口 (I/O Address =
BASE+ 0x00):用于读写 SRAM Buffer 中的数据。 - 地址端口 (I/O Address =
BASE+ 0x04):用于指定要访问的内部寄存器的地址。 - 内部寄存器 (通过地址端口间接访问):
00H-04H:MAC 地址寄存器,用于设置芯片的物理地址。01H:寄存器页选择,DM9000 的寄存器分为两个页面,通过此寄存器切换。02H:GPIO 寄存器,可用于通用输入输出,控制其他硬件。06H:配置寄存器,设置芯片工作模式,如 8/16 位模式、是否使用内部 PHY 等。07H:EEPROM 控制寄存器,控制外接的 EEPROM。08H:中断状态寄存器,读取它可以知道发生了什么中断(如数据包接收完成)。0AH:中断屏蔽寄存器,决定哪些中断事件可以向 CPU 申请中断。0BH:接收控制寄存器,控制接收功能,如是否丢弃 CRC 错误的包。0CH:发送控制寄存器,控制发送功能,如设置数据包长度等。0DH:传输控制寄存器,设置全双工/半双工模式等。
工作流程
手册会详细描述芯片的初始化、发送和接收数据的过程。
- 初始化流程:
- 复位芯片 (通过
PWRDN#或软件复位命令)。 - 设置 MAC 地址。
- 配置工作模式 (8/16位, 内部/外部 PHY)。
- 配置中断屏蔽和接收控制。
- 启动接收功能。
- 复位芯片 (通过
- 发送数据流程:
- CPU 将数据包写入 DM9000 的 SRAM Buffer。
- CPU 向发送控制寄存器写入发送命令和长度。
- DM9000 的 MAC 层自动从 SRAM Buffer 取出数据并发送到网络上。
- 发送完成后,产生中断通知 CPU。
- 接收数据流程:
- 网络上的数据包被 PHY 层接收。
- 数据包被存入 SRAM Buffer。
- DM9000 产生一个接收中断 (
INT#引脚变低)。 - CPU 响应中断,读取中断状态寄存器,确认是接收中断。
- CPU 从 SRAM Buffer 中读取数据包。
EEPROM 接口
DM9000 可以通过 SROM 接口连接一个外部的 93C46/56 EEPROM,这个 EEPROM 通常用来存储:
- MAC 地址:出厂时烧录,芯片上电时会自动加载。
- 配置信息:如 LED 极性、PHY 特定配置等。 这使得用户可以灵活地修改 MAC 地址,而无需重新烧录固件。
如何获取技术手册?
你可以在网上轻松找到 DM9000 的官方数据手册,推荐以下几个来源:

- Davicom 官网:这是最权威的来源,访问 Davicom 的官方网站,在 "Support" 或 "Download" 区域搜索 "DM9000",即可找到 PDF 版本的数据手册。
- 开源社区和硬件厂商网站:
- Element14/Farnell 或 Mouser 等电子元器件分销商网站也提供数据手册下载。
- 很多基于 DM9000 的开发板(特别是早期的树莓派扩展板)的资料页中,也会提供官方数据手册的下载链接。
- 文档分享网站:如
docin.com,baidu.com等,搜索 "DM9000 数据手册" 或 "DM9000 datasheet",也能找到。
搜索关键词:DM9000 datasheet, DM9000 pdf, DM9000 技术手册, Davicom DM9000。
学习建议与资源
- 先通读一遍:拿到手册后,先不要陷入细节,快速浏览一遍,了解它的基本结构、引脚和主要功能。
- 结合硬件原理图:找到一块使用 DM9000 的开发板(如树莓派B+的原理图),对照手册看引脚是如何连接的,这会让你对硬件连接有直观的认识。
- 从驱动代码入手:阅读开源的 DM9000 驱动代码(Linux 内核中的
drivers/net/ethernet/davicom/dm9000.c)是学习其工作原理的最佳途径。- 看驱动代码如何初始化寄存器。
- 看驱动代码如何处理发送和接收中断。
- 将代码中的寄存器操作(如
iowrite8,iowrite16)和手册中的寄存器描述一一对应起来,理解为什么这么写。
- 动手实践:如果你有硬件,尝试自己编写一个简单的驱动程序,实现一个 "ping" 的基本通信功能,这个过程会让你对 DM9000 的理解更加深刻。
DM9000 虽然是一款“老”芯片,但其设计思想和接口规范对于学习嵌入式网络通信具有非常高的参考价值,它的技术手册是嵌入式网络开发的经典教材之一,掌握 DM9000,不仅能让你了解一款具体芯片的使用,更能为你理解和设计更复杂的网络控制器打下坚实的基础。
