DM9000A以太网控制器嵌入式接口设计指南:总线时序、驱动流程与PCB布局

单芯片MAC+PHY的10/100M并口以太网方案:INDEX/DATA双端口总线、16K SRAM双包收发架构、硬件校验和卸载、网络变压器与Bob Smith终端电路、差分对布局规则与低功耗模式

2026-09-19
DM9000A以太网控制器MAC+PHY嵌入式接口网络变压器PCB布局

给MCU外挂一个10/100M以太网口,DM9000A 是国内嵌入式领域最成熟的并口方案之一:单颗48脚LQFP同时集成MAC与PHY,16K字节片内SRAM提供双包发送与环形接收缓冲,8/16位并行总线直接挂到处理器本地总线,且内置3.3V转2.5V稳压器、I/O容忍5V。它把以太网接口的全部模拟部分(PHY、变压器驱动)和数字协议部分(MAC、DMA、硬件校验和)都收进一颗芯片,嵌入式工程师只需处理三件事:总线时序、收发包驱动流程、网口模拟电路与PCB布局。本文基于 DAVICOM 官方数据手册,把这三件事的参数与规则一次性讲透。

一、方案定位:为什么还在用并口以太网控制器

工业物联网场景里,Modbus TCP、MQTT over TCP 都要跑在有线以太网上。可选的接入方案有四类,各有取舍:

方案接口类型速率CPU占用固件复杂度典型场景
MCU内置MAC+外挂PHY(如STM32F407+DP83848)RMI/MII100M全速低(DMA)高(需移植TCP/IP栈+驱动)高性能网关、协议转换器
DM9000A(并口MAC+PHY)8/16位并行总线10/100M低(DMA+硬件校验和)中(寄存器驱动,Linux/U-Boot原生支持)RTU、工控主板、老旧平台升级
W5500(SPI硬件协议栈)SPI10/100M极低(硬件TCP/IP)低(socket API)小资源MCU、快速组网
ENC28J60(SPI MAC+PHY)SPI10M高(软件校验和)低成本低速采集节点

DM9000A 的独特价值在于:不占用MCU的以太网MAC外设资源、不受SPI带宽瓶颈限制(16位并口一次搬两个字节),同时硬件完成 IP/TCP/UDP 校验和的生成与检查,把协议栈里最热的路径卸载掉。这也是它在国产RTU远程终端与工控板卡中长盛不衰的原因。

二、内部架构与关键特性

DM9000A(48-pin LQFP,3.3V供电、工作电压范围3.135~3.465V)内部由四大部分构成:通用处理器接口与DMA控制器、MAC引擎、10/100M PHY收发器(支持HP Auto-MDIX直连交叉自适应)、以及16K字节SRAM。存储划分非常清晰:前3K字节作为发送缓冲,可同时驻留两帧数据(index I 与 index II 交替发送);后13K字节作为接收环形缓冲,复位后起始地址为0x0C00。其它关键规格:100Base-TX 发射链路采用4B5B编码、扰码、NRZI与MLT-3转换的完整处理链;支持IEEE 802.3x全双工流控与半双工背压;支持唤醒帧、链路状态变化和魔术包(Magic Packet)远程唤醒;可选EEPROM自动加载厂商ID与产品ID;内核识别码为 VID=0x0A46、PID=0x9000,驱动探测时以此确认芯片在位。

三、处理器总线接口:INDEX/DATA双端口

DM9000A 只占用两个地址空间:CMD引脚为0时访问INDEX端口(写入目标寄存器地址),CMD为1时访问DATA端口(读写寄存器数据)。也就是说,任何一次寄存器访问都是"先写INDEX、再读写DATA"两步。配合片选CS#(默认低有效,可由EEPROM重定义极性)、读选通IOR#、写选通IOW#,构成最小并口;数据线SD0~SD15按8位或16位模式连接。

信号方向功能设计要点
SD0~SD15双向数据总线(8/16位模式)16位模式需IO16信号配合;8位模式SD8~15悬空
CS#输入片选默认低有效,极性可EEPROM配置;接MCU片选译码输出
CMD输入端口选择:0=INDEX,1=DATA接MCU最低地址线A0,用两个相邻地址区分端口
IOR# / IOW#输入读/写选通接MCU读/写选通;脉宽不低于10ns
INT输出中断请求接MCU外部中断,收包完成/发送完成/链路变化触发
PWRST#输入上电复位需保证足够复位脉宽,建议接RC+MCU GPIO双重控制
X1/X225MHz晶振接口基频串联谐振晶体,两脚各并22pF对地
EECS/EECK/EEDIOEEPROM接口选用93C46类EEPROM存MAC地址;不用时EECS经10kΩ下拉

读时序的关键参数(数据手册AC特性):CS#与CMD建立到IOR#有效(T1)最小0ns;IOR#脉宽(T2)最小10ns;读数据延迟(T3)最大3ns;读选通撤销到下一次访问的间隔(T6)读寄存器需2个系统时钟、读写SRAM数据需4个系统时钟。对STM32这类主频几十上百MHz的MCU,用GPIO模拟并口时要注意在IOR#/IOW#前后插入NOP或短延时满足T6;用FSMC静态存储器接口则把地址建立、数据保持参数配置进寄存器即可天然满足。

四、收发包驱动流程

发送流程分四步:通过DATA端口把帧数据写入TX SRAM(DMA自动递增地址)→ 将帧长度写入TXPLL/TXPLH(FCH/FDH)寄存器 → 置位NCR(00H)的bit1启动发送 → 查询NSR(01H)或等中断确认完成。得益于双包缓冲,index I 在发送期间MCU就可以把下一帧预装进index II,实现背靠背发送无空泡。

接收缓冲是环形结构,每帧前面有4字节包头:01h、状态字节、帧长低字节、帧长高字节。驱动轮询时先读MRCMDX(F0H,预取读、地址不递增)判断是否有新数据——该寄存器读两次值不同即表示有新包;随后用MRCMD(F2H,读且地址自动递增)一次性把包头和帧数据读出。核心代码骨架如下:

/* STM32 GPIO 模拟并口示例(16位模式, CMD=A0) */
#define DM_ADDR_CMD_LOW()   HAL_GPIO_WritePin(CMD_GPIO_Port, CMD_Pin, GPIO_PIN_RESET)
#define DM_ADDR_CMD_HIGH()  HAL_GPIO_WritePin(CMD_GPIO_Port, CMD_Pin, GPIO_PIN_SET)

uint8_t dm9000_read_reg(uint8_t reg)
{
    DM_ADDR_CMD_LOW();                 /* INDEX端口 */
    bus_write_byte(reg);
    DM_ADDR_CMD_HIGH();                /* DATA端口 */
    return bus_read_byte();            /* 读IOR#脉冲内采样SD */
}

/* 轮询收包:先查MRCMDX两次值是否变化 */
uint8_t dm9000_rx_ready(void)
{
    uint8_t save = dm9000_read_reg(0xF0);   /* MRCMDX预取 */
    return (dm9000_read_reg(0xF0) != save); /* 值变化=有新帧 */
}

void dm9000_rx_packet(uint8_t *buf, uint16_t *len)
{
    header = dm9000_read_data_inc();        /* MRCMD(F2H): 01h,status,len_l,len_h */
    *len = (header & 0xFFFF) >> 8;          /* 从4字节包头取帧长 */
    for (i = 0; i < *len; i++)             /* DMA地址自动递增, 顺序读出整帧 */
        buf[i] = dm9000_read_data_inc();
}

四个工程细节容易被忽略:第一,DMA顺序读的第一个数据是上一次操作的缓冲残留(dummy read),必须丢弃;第二,8位模式与16位模式下环形缓冲的包起始地址边界不同,移植驱动时要按模式对齐;第三,ISR(FEH)中断状态位写1清除,IMR(FFH)bit7置1后SRAM地址才会在读写中回绕;第四,PAR(10H~15H)写入MAC地址、MAR(16H~1DH)写入组播过滤表(组播全收写0xFF),不上电写入这两组寄存器,网络层的ARP和组播协议全都会失效。

五、应用电路:网口模拟部分的设计规则

DM9000A 到 RJ45 之间的模拟电路是设计成败的关键。标准连接为:TXO±/RXI± 差分对经1:1网络变压器接RJ45;每根差分线串50Ω 1%电阻;变压器中心抽头接2.5V AVCC并配220μF大电容与0.1μF陶瓷电容去耦;RJ45空余线对经75Ω×3电阻网络与0.1μF/2kV电容接到机壳地(Bob Smith终端),为共模噪声提供低阻泄放路径;BGGND引脚接6.8kΩ 1%基准电阻到地,该电阻必须紧贴芯片第1、48脚,周围禁止走任何高速信号。

电路要素推荐取值/型号作用与备注
晶振25MHz基频串联谐振,X1/X2各并22pF对地时钟周期40ns,精度±50ppm;也可用有源晶振单端馈入
网络变压器Pulse PE-68515/H1078、Delta LF8200、YCL 20PMT04、Halo TG22-3506ND1:1变比、含Auto-MDIX要求的型号需核对数据手册表2
差分串阻50Ω 1% × 4(TXO±、RXI±各两颗)阻抗匹配,抑制反射
中心抽头2.5V AVCC + 220μF + 0.1μFPHY模拟供电滤波,隔离直流偏置
Bob Smith终端75Ω 1% × 3 + 0.1μF/2kV空线对共模端接,接机壳地,耐压必须2kV
基准电阻6.8kΩ 1%(BGGND)带隙基准,位置紧贴pin1/48
电源去耦0.1μF或0.01μF每电源脚距电源引脚3mm以内放置

六、PCB布局六条铁律

数据手册应用笔记把布局要求写得很明确,可归纳为:

  1. 完整地平面:整个网口区域保持单一连续地平面,任何分割都会推高EMI辐射,直接威胁FCC Part 15认证。
  2. 净空原则:RJ45到变压器、变压器到DM9000A的区域内,除了TXO±/RXI±差分对,不允许有任何其它信号、电源或地平面穿过。
  3. 差分对不交叉:TX与RX两对差分线全程并行等长,严禁相互交叉。
  4. 少用过孔:差分对尽量单层走线,过孔会引入阻抗突变与反射。
  5. 去耦就近:所有电源引脚的去耦电容(0.1μF/0.01μF)距引脚3mm以内。
  6. 电源平面分区:数字电源与2.5V模拟电源(AVDD_25)平面分块规划,只在一点汇接。

七、功耗画像与低功耗设计

对电池供电或需待机的智能硬件,DM9000A 的各工作模式功耗(3.3V)必须心里有数:

工作模式典型电流设计建议
100Base-TX 收发87mA满速工作基线
10Base-T 发送(100%利用率)92mA10M满负荷反而最耗电
10Base-T 空闲38mA链路保持但无流量
自协商进行中56mA上电瞬态,协商完成自动回落
省电模式(无网线插入)31mA掉线检测自动进入,可配合中断唤醒
掉电模式21mA软件配置进入,链路断开
掉电+时钟关闭7mA远程唤醒(魔术包)场景的最深睡眠态

设计低功耗设备时,利用"掉电+时钟关"的7mA档位,配合魔术包唤醒寄存器,可以让设备平时深度睡眠、网络侧一有请求立即恢复通信——这是DM9000A相对纯数字方案少有的模拟侧休眠能力。

结语

DM9000A 的工程价值在于"一颗芯片+一条并口"就把10/100M以太网完整落地:INDEX/DATA双端口让任何MCU都能以最小代价访问它,16K SRAM双包收发架构与硬件校验和卸载保证了吞吐,而网口部分的成败完全取决于模拟电路与布局纪律——1:1变压器、50Ω串阻、Bob Smith终端、完整地平面、差分对净空这五条规则做到位,产品直通FCC/EMC认证的把握就大得多。驱动侧抓住"4字节包头、MRCMDX轮询、PAR/MAR初始化"三个要点,配合Linux/U-Boot中原生驱动的成熟生态,是从原型到量产最快的一条路。

本文基于 DAVICOM《DM9000A Ethernet Controller with General Processor Interface》数据手册(DM9000A-17-DS-F01)整理优化。

相关阅读

需要定制开发?

沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付

立即微信咨询

电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应