深度剖析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控制器,支持随机数据填充、地址填充和模式移位填充三种操作模式。
测试步骤
- 编程设置EDMAST寄存器对
-
SPI接口
+关注
关注
0文章
290浏览量
36992 -
ENC28J60
+关注
关注
0文章
36浏览量
22445 -
以太网控制器
+关注
关注
0文章
53浏览量
13216
发布评论请先 登录
ENC28J60以太网模块与Arduino的连接方案介绍
新型以太网控制器ENC28J60及其接口技术
stm32有自带的以太网模块与ENC28J60控制器有什么区别?
独立以太网控制器ENC28J60电子资料
ENC28J60 spi 接口 以太网 网络模块 提供 代码
微雪电子ENC28J60以太网模块简介
ENC28J60的网口资料详细资料说明
ENC28J60带SPI接口的独立以太网控制器数据手册免费下载
深度剖析ENC28J60:独立以太网控制器的设计与应用指南
评论