深度剖析ENC28J60:独立以太网控制器的设计与应用指南

电子说

1.4w人已加入

描述

深度剖析ENC28J60:独立以太网控制器的设计与应用指南

在当今数字化时代,以太网连接在各类电子设备中扮演着至关重要的角色。ENC28J60作为一款具备SPI接口的独立以太网控制器,以其独特的功能和广泛的适用性,成为众多电子工程师的首选。本文将对ENC28J60进行全面深入的剖析,涵盖其特性、外部连接、内存组织、SPI接口等多个方面,旨在为工程师们提供一份详尽的设计与应用指南。

文件下载:ENC28J60T-I ML.pdf

一、ENC28J60概述

ENC28J60专为与具备SPI接口的控制器搭配使用而设计,能够无缝融入各类以太网网络环境。它严格遵循IEEE 802.3规范,可全面兼容10/100/1000Base - T网络,具备多种实用特性。

  • 核心特性:集成了MAC和10Base - T PHY,支持单10Base - T端口,具备自动极性检测与校正功能,支持全双工和半双工模式。同时,它还拥有可编程的自动重传、填充和CRC生成功能,以及自动拒绝错误数据包的能力,借助SPI接口,时钟速率最高可达20 MHz。
  • 功能模块:主要由SPI接口、控制寄存器、双端口RAM缓冲器、仲裁器、总线接口、MAC模块和PHY模块等七大功能模块构成。此外,还配备了振荡器、片上稳压器、电平转换器等辅助模块,以提供5V容忍的I/O和系统控制逻辑。

二、外部连接设计要点

振荡器配置

  • 晶体振荡器:ENC28J60通常需搭配25 MHz的并联谐振晶体,连接至OSC1和OSC2引脚。使用串联谐振晶体可能导致频率超出制造商规定范围。
  • 外部时钟源:也可采用外部时钟源连接至OSC1引脚,但需注意时钟占空比限制,可添加接地电阻以降低系统噪声,但可能会增加系统电流。
  • 振荡器启动定时器:为确保振荡器和集成PHY稳定运行,ENC28J60内置了振荡器启动定时器(OST)。在电源上电复位或从掉电模式唤醒后,需等待7500个OSC1时钟周期(300 μs),期间可通过SPI总线读写寄存器和缓冲器内存,但不宜进行数据包传输、接收或访问MAC、MII、PHY寄存器等操作。当ESTAT寄存器中的CLKRDY位被置位时,方可开始正常的设备操作。

CLKOUT引脚应用

CLKOUT引脚可作为主机控制器时钟或系统中其他设备的时钟源。其内部预分频器可将输出频率进行1、2、3、4或8分频,通过ECOCON寄存器进行配置。在电源上电初期,CLKOUT引脚保持低电平,待OST计数结束后,将输出默认频率6.25 MHz(主时钟除以4)。在改变频率时,会有2 - 8个OSC1时钟周期的延迟,期间CLKOUT引脚保持低电平。

外部组件连接

  • 电阻与电容:PHY模块的内部模拟电路要求在RBIAS引脚与地之间连接一个2.32 kΩ、1%的电阻,以影响TPOUT + / - 信号幅度。同时,需在VCAP引脚与地之间连接一个低ESR的外部滤波电容,典型值为10 μF,最小值为1 μF。
  • 脉冲变压器:TPIN + / - 和TPOUT + / - 引脚需连接额定用于以太网操作的1:1中心抽头脉冲变压器。在以太网模块启用时,TPOUT引脚会持续吸收电流,通过改变TPOUT + 和TPOUT - 的相对电流来在以太网上创建差分电压。
  • 电源与接地:所有电源引脚需连接至同一电源,所有接地引脚需连接至同一接地节点,每个VDD和VSS引脚对附近应放置一个0.1 μF的陶瓷旁路电容,以减少信号干扰。
  • I/O电平转换:尽管ENC28J60为3.3V器件,但SPI的CS、SCK、SI输入及RESET引脚具备5V容忍能力。若主机控制器为5V器件,可能需要使用单向电平转换器,如74HCT08、74ACT125等。
  • LED配置:LEDA和LEDB引脚支持自动极性检测。在系统复位时,ENC28J60会检测LED的连接方式,并根据PHLCON寄存器的配置驱动LED至默认状态。可通过LACFG<3:0>和LBCFG<3:0>位分别配置LED的工作极性、闪烁速率和闪烁拉伸间隔。

三、内存组织架构

ENC28J60的内存采用静态RAM实现,主要包括控制寄存器、以太网缓冲器和PHY寄存器三种类型。

控制寄存器

控制寄存器用于ENC28J60的配置、控制和状态检索,可通过SPI接口直接读写。其内存被划分为四个32字节的存储体,通过ECON1寄存器中的BSEL<1:0>位进行选择。部分地址未被实现,写入这些地址将被忽略,读取返回‘0’。其中,地址1Ah的寄存器为保留寄存器,不应进行读写操作。

以太网缓冲器

以太网缓冲器由8 Kbytes的存储单元组成,分为接收和发送缓冲器空间,其大小和位置可由主机控制器通过SPI接口进行编程设置。

  • 接收缓冲器:采用硬件管理的循环FIFO缓冲器,通过ERXSTH:ERXSTL和ERXNDH:ERXNDL寄存器对定义其大小和位置。数据按顺序写入接收缓冲器,当写入到ERXND指向的内存后,会自动回到ERXST指向的内存开始写入。主机控制器可在接收逻辑未启用时对ERXST和ERXND指针进行编程,但在接收逻辑启用后(ECON1.RXEN置位)则不可修改。
  • 发送缓冲器:8 Kbytes内存中未被配置为接收FIFO缓冲器的空间即为发送缓冲器。主机控制器负责管理数据包在发送缓冲器中的位置,在发送数据包前,需编程设置ETXST和ETXND指针,以指定要发送的数据包在发送缓冲器中的位置。
  • 缓冲器读写:主机控制器通过单独的读、写指针(ERDPT和EWRPT)结合SPI的读缓冲器内存和写缓冲器内存命令来访问以太网缓冲器内容。在顺序读取接收缓冲器时,到达接收缓冲器末尾会发生回绕;在顺序写入缓冲器时,则不会发生回绕。
  • DMA访问:集成的DMA控制器在计算校验和以及复制内存时需从缓冲器读取数据,遵循与SPI访问相同的回绕规则。

PHY寄存器

PHY寄存器用于PHY模块的配置、控制和状态检索,所有PHY寄存器均为16位宽,共32个地址,但仅9个位置被实现。通过MIIM接口访问PHY寄存器,具体操作包括写入地址、数据,等待操作完成等步骤。

四、SPI接口指令集

ENC28J60的操作完全依赖于外部主机控制器通过SPI接口发送的命令,共实现了七种指令。

读控制寄存器命令(RCR)

用于读取ETH、MAC和MII寄存器的内容。对于ETH寄存器,发送RCR操作码和5位寄存器地址后,数据将立即从SO引脚移出;对于MAC和MII寄存器,先移出一个虚拟字节,然后再移出数据。操作结束后,将CS引脚置高。

读缓冲器内存命令(RBM)

允许主机控制器从集成的8 Kbyte发送和接收缓冲器内存中读取字节。发送RBM操作码和5位常量1Ah后,数据将从ERDPT指向的内存中移出。若ECON2寄存器中的AUTOINC位被置位,ERDPT指针将自动递增,实现连续读取。

写控制寄存器命令(WCR)

用于向ETH、MAC和MII控制寄存器写入数据。发送WCR操作码和5位地址后,将数据写入指定寄存器。操作结束后,将CS引脚置高。

写缓冲器内存命令(WBM)

允许主机控制器向集成的8 Kbyte发送和接收缓冲器内存中写入字节。发送WBM操作码和5位常量1Ah后,将数据写入EWRPT指向的内存。若ECON2寄存器中的AUTOINC位被置位,EWRPT指针将自动递增,实现连续写入。

位字段设置命令(BFS)

用于设置ETH控制寄存器中的最多8位。发送BFS操作码和5位地址后,将数据字节与指定寄存器内容进行按位或操作。

位字段清除命令(BFC)

用于清除ETH控制寄存器中的最多8位。发送BFC操作码和5位地址后,将数据字节取反并与指定寄存器内容进行按位与操作。

系统复位命令(SRC)

允许主机控制器发出系统软复位命令。发送SRC操作码和5位软复位命令常量1Fh后,操作结束将CS引脚置高。

五、以太网数据包处理

数据包格式

正常的IEEE 802.3兼容以太网帧长度在64 - 1518字节之间,由目的MAC地址、源MAC地址、类型/长度字段、数据有效负载、可选填充字段和CRC组成。在传输和接收数据时,ENC28J60会自动生成或去除前导码和帧起始分隔符字节,主机控制器通常无需处理这些内容。

数据包发送

在发送数据包前,需对MAC寄存器进行初始化设置。主机控制器需生成并写入除前导码、帧起始分隔符、填充和CRC(若已配置)之外的所有帧字段,并在数据包前添加一个单字节的每包控制字节。设置ETXST和ETXND指针,清除EIR.TXIF,设置EIE.TXIE和EIE.INTIE(若需要中断),然后设置ECON1.TXRTS开始传输。传输完成或因错误/取消而中止时,ECON1.TXRTS位将被清除,发送状态向量将被写入ETXND + 1位置,EIR.TXIF将被置位,并触发中断(若已启用)。

数据包接收

在接收数据包前,需初始化接收缓冲器、配置MAC和接收过滤器。启用接收功能后,未被过滤的数据包将被写入循环接收缓冲器。每个数据包前有一个6字节的头部,包含下一个数据包指针和接收状态向量。主机控制器可使用RBM命令从下一个数据包指针开始读取数据包内容,处理完数据包后,需推进接收缓冲器读取指针ERXRDPT,并将ECON2.PKTDEC位置1,以减少EPKTCNT寄存器的值。

六、接收过滤器配置

为减轻主机控制器的处理负担,ENC28J60集成了多种接收过滤器,包括单播、模式匹配、Magic Packet™、哈希表、多播和广播过滤器。这些过滤器由ERXFCON寄存器配置,可通过ANDOR位进行逻辑与或逻辑或操作。通过合理配置过滤器,可自动拒绝不需要的数据包。

七、双工模式选择与配置

ENC28J60不支持自动双工协商,若要实现全双工通信,需与远程节点进行手动配置。

半双工模式

当MACON3.FULDPX = 0且PHCON1.PDPXMD = 0时,ENC28J60工作在半双工模式。在此模式下,同一时间只能有一个以太网控制器进行数据传输。若发生冲突,硬件将根据冲突发生的时间采取相应的处理措施:若在“冲突窗口”内发生冲突,将进行随机指数退避延迟后重新尝试传输;若在“冲突窗口”外发生冲突,则立即中止传输。默认情况下,半双工模式会将发送的数据包回环至自身,可通过设置PHCON2.HDLDIS位来停止此行为。

全双工模式

当MACON3.FULDPX = 1且PHCON1.PDPXMD = 1时,ENC28J60工作在全双工模式。在此模式下,数据包可同时进行发送和接收,不会发生冲突。默认情况下,全双工模式不会将发送的数据包回环至自身,若需要进行诊断,可设置PHCON1.PLOOPBK位。

八、流量控制策略

半双工模式

在半双工模式下,设置EFLOCON.FCEN0位可启用流量控制。此时,以太网介质上会自动发送交替的‘1’和‘0’(55h)的连续前导码模式,阻止其他节点进行通信。当主机控制器发送数据包时,前导码模式将停止,发送完成或中止后,前导码模式将自动恢复。由于此模式可能对网络产生不利影响且效果不佳,建议仅在经过适当测试的封闭网络环境中使用。

全双工模式

在全双工模式下,通过发送IEEE 802.3规范定义的暂停控制帧来实现硬件流量控制。主机控制器需设置MACON1寄存器中的TXPAUS和RXPAUS位,当接收缓冲器空间不足时,将EFLOCON寄存器写入02h以开启流量控制,硬件将定期发送包含暂停定时器值的暂停帧;当有足够空间时,将EFLOCON寄存器写入03h以关闭流量控制,硬件将发送一个包含暂停定时器值为0000h的暂停帧。

九、复位操作流程

ENC28J60支持多种复位方式,包括上电复位、系统复位、仅发送复位、仅接收复位和杂项MAC和PHY子系统复位。

上电复位(POR)

当VDD上升超过一定阈值时,芯片内部会产生上电复位脉冲,使设备进入初始化状态。为确保正常复位,需满足VDD的最小上升速率要求。上电复位后,双端口缓冲器内存内容未知,但所有寄存器将加载为指定的复位值。部分功能在复位后需等待OSC启动定时器结束方可访问。

系统复位

可通过RESET引脚或SPI接口的系统复位命令进行系统复位。复位后,所有PHY寄存器在复位结束后至少50 μs内不应进行读写操作,所有寄存器将恢复到默认复位值,双端口缓冲器内存状态保持不变。

仅发送复位

通过向ECON1寄存器的TXRST位写入‘1’来执行仅发送复位。若正在发送数据包,硬件将自动清除TXRTS位并中止传输,仅复位发送逻辑。

仅接收复位

通过向ECON1寄存器的RXRST位写入‘1’来执行仅接收复位。若正在接收数据包,硬件将自动清除RXEN位并中止接收,仅复位接收逻辑。

PHY子系统复位

向PHCON1寄存器的PRST位写入‘1’可复位PHY模块。复位后,所有PHY寄存器内容将恢复到默认复位值,但PHY不能立即退出复位状态,需等待一段时间,待硬件自动清除PRST位后,主机控制器方可使用PHY。

十、中断管理机制

ENC28J60具备多个中断源和一个中断输出引脚,通过EIE寄存器控制中断使能,EIR寄存器记录中断标志。当启用的中断发生时,中断引脚将保持低电平,直到主机控制器清除或屏蔽所有导致中断的标志。建议使用位字段清除(BFC)SPI命令来重置EIR寄存器中的标志位,以避免在写入命令期间意外改变标志。

主要中断类型

  • 接收错误中断(RXERIF):表示接收缓冲器溢出或接收缓冲器中的数据包过多,无法再存储新数据包。
  • 发送错误中断(TXERIF):表示发送中止,可能由过多冲突、后期冲突、数据包过大等原因导致。
  • 发送中断(TXIF):表示请求的数据包传输已结束。
  • 链路更改中断(LINKIF):表示链路状态已更改,需通过设置PHIE.PLNKIE和PGEIE位来启用。
  • DMA中断(DMAIF):表示DMA模块已完成内存复制或校验和计算。
  • 接收数据包待处理中断(PKTIF):表示接收缓冲器中存在一个或多个数据数据包。

唤醒功能

ENC28J60支持Wake - On - LAN/Remote Wake - up功能,可通过配置接收过滤器和中断掩码寄存器,在接收到唤醒数据包(如Magic Packet)时唤醒处于低功耗模式的主机控制器。

十一、DMA控制器应用

ENC28J60集成的双用途DMA控制器可用于在8 Kbyte内存缓冲器内复制数据,也可计算与多种行业标准协议兼容的16位校验和。

内存复制操作

为在缓冲器内复制内存,需适当编程设置EDMAST、EDMAND和EDMADST寄存器对,设置EIE.DMAIE和EIE.INTIE(若需要中断),清除EIR.DMAIF,确认ECON1.CSUMEN位已清除,然后设置ECON1.DMAST开始复制。复制完成后,DMA硬件将清除DMAST位,设置DMAIF位,并触发中断(若已启用)。

校验和计算操作

计算校验和时,需编程设置EDMAST和EDMAND寄存器对,清除EIR.DMAIF,设置EIE.DMAIE和EIE.INTIE(若需要中断),然后设置ECON1.CSUMEN和ECON1.DMAST开始计算。计算完成后,硬件将清除DMAST位,设置DMAIF位,并触发中断(若已启用),计算结果将存储在EDMACSH和EDMACSL寄存器中。

十二、内置自测试控制器使用方法

ENC28J60的内置自测试(BIST)模块可用于验证8 Kbyte内存缓冲器中每个位的正常运行。通过EBSTCON、EBSTSD、EBSTCSH和EBSTCSL四个寄存器来操作BIST控制器,支持随机数据填充、地址填充和模式移位填充三种操作模式。

测试步骤

  1. 编程设置EDMAST寄存器对
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分