PIC以太网开发板——基于微芯最新ENC28J60以太网控制器
PIC以太网开发板——基于微芯最新ENC28J60以太网控制器
新型以太网控制器ENC28J60及其接口技术 |
摘要介绍新型独立以太网控制器ENC28J60的结构、功能以及与外部接口的软硬件设计。ENC28J60以太网控制器采用标准的SPI串行接口,只需4条连线即可实现与单片机连接,有利于在小型系统上实现以太网功能。对于没有SPI接口的芯片通过模拟SPI接口的方式亦十分方便。
关键词 Ethernet ENC28J60 SPI 接口
引言
ENC28J60是Microchip Technology(美国微芯科技公司)近期推出的28引脚独立以太网控制器。
在此之前,嵌入式系统开发可选的独立以太网控制器都是为个人计算机系统设计的,如RTL8019、AX88796L、DM9008、CS8900A、LAN91C111等。这些器件不仅结构复杂,体积庞大,且比较昂贵。目前市场上大部分以太网控制器的封装均超过80引脚,而符合IEEE 802.3协议的ENC28J60只有28引脚,既能提供相应的功能,又可以大大简化相关设计,减小空间。
1 结构和功能
采用业界标准串行外设接口(SPI)的以太网控制器ENC28J60具有以下主要特征:
◆ 符合IEEE 802.3协议。内置10 Mbps以太网物理层器件(PHY)及媒体访问控制器(MAC),可按业界标准的以太网协议可靠地收发信息包数据。
◆ 具有可编程过滤功能。特殊的过滤器,包括Microchip的可编程模式匹配过滤器,可自动评价、接收或拒收Magic Packet,单播(Unicast)、多播(Multicast)或广播(Broadcast)信息包,以减轻主控单片机的处理负荷。
◆ 10 Mbps SPI接口。业界标准的串行通信端口,使得低至18引脚的8位单片机也具有网络连接功能。
◆ 可编程8 KB双端口SRAM缓冲器。以高效的方式进行信息包的存储、检索和修改,以减轻主控单片机的内存负荷。该缓冲存储器提供了灵活可靠的数据管理机制。
2 硬件设计
ENC28J60的硬件设计需要注意复位电路,时钟振荡器,振荡器启动定时器,时钟输出引脚,变压器、终端和其他外部器件,输入/输出电平等几个方面。(图1可供参考)
2.1 复位电路
ENC28J60有上电复位(Power-on Reset)功能,RESET引脚上的低电平使ENC28J60进入复位模式;RESET引脚内部有弱上拉电阻。ENC28J60的硬件连接如图1所示。
2.2 时钟振荡器
ENC28J60需要一个25 MHz的晶振,接在OSC1和OSC2脚上;也可由外部时钟信号来驱动。此时3.3 V的外部时钟接在OSC1脚上,OSC2断开或者通过一个电阻接地来降低系统噪声。
2.3 振荡器启动定时器
ENC28J60内部有一个振荡器启动时钟OST(Oscillator Startup Timer),上电7 500个时钟周期(300 μs),OST期满后内部的PHY方能正常工作。这时不能发送或者接收报文。上位机可通过检测ENC28J60内部ESTAT寄存器中的CLKRDY位的状态来决定是否可设置发送或接收报文。
需要注意的是,当ENC28J60上电复位或者从PowerDown模式下唤醒时,必须检测ESTAT寄存器中的CLKRDY是否置位。只有CLKRDY置位后才能发送、接收报文,访问相关寄存器。
2.4 时钟输出引脚
CLKOUT引脚可为系统中的其他设备提供时钟源。上电后CLKOUT引脚保持低电平,复位结束后OST计数。OST期满后,CLKOUT输出频率为6.25 MHz的时钟。
时钟输出功能通过ECOCON寄存器禁止、调整和使能。时钟输出可设置为1、2、3、4、8分频,上电后默认为4分频。ECOCON寄存器配置改变以后,CLKOUT引脚有80~320 ns的延迟(保持低电平),然后按照设定输出固定频率的时钟信号。
软件或者RESET引脚上的复位信号不会影响ECOCON寄存器的状态。PowerDown模式也不会影响时钟的输出。当禁止时钟输出时,CLKOUT引脚保持低电平。
2.5 变压器、终端和其他外部器件
为了实现以太网接口ENC28J60,需要几个标准的外部器件: 脉冲变压器、偏置电阻、储能电容和去耦电容。
差分输入引脚(TPIN+/TPIN-),需要一个1∶1变比的脉冲变压器来实现10BASET。差分输出引脚(TPOUT+/TPOUT-),需要一个变比为1∶1、带中心抽头的脉冲变压器。变压器需要有2 kV或更高的隔离能力,防静电。对变压器的详细要求请参考芯片手册第16章“电气特性”。每个部分都需要通过2个50 Ω、精度为1%的电阻和1个0.01 μF的电容串联后接地。
笔者采用的是中山汉仁公司的集成以太网隔离变压器RJ45插座HR901170A。
ENC28J60内部的模拟电路需要在RBIAS引脚和地之间跨接1个2 kΩ、1%的偏置电阻。部分数字电路工作在2.5 V,以降低功耗;ENC28J60内部集成1个2.5 V的调节器来产生所需的电压,需在VCAP引脚和地之间接1个10 μF的电容保证供电的稳定性(该2.5 V调节器不是为外部负载设计的)。
所有的供电引脚(VDD、VDDOSC、VDDPLL、VDDRX、VDDTX)必须接在外部的同一个3.3 V电源上;同理,所有的地(VSS、VSSOSC、VSSPLL、VSSTX)必须接在同一个外部地上。每个供电引脚和地之间应当接1个0.1 μF的陶瓷电容去耦(电容要尽可能接近供电引脚)。
驱动双绞线接口需要较大的电流,所以电源线应尽可能宽,与引脚的连接尽可能短,以降低电源线内阻的消耗。
2.6 输入输出电平
ENC28J60是一个3.3 V的CMOS器件,但它设计得非常容易统一到5 V系统中去:SPI、CS、 SCK、SI输入和RESET引脚一样,都可承受5 V电压。当SPI和中断输入与3.3 V驱动的CMOS输出不兼容时,可能需要一个单向的电平转换器。74HCT08 (四与门), 74ACT125(四三态缓冲器)和许多具有TTL电平输入的5 V CMOS缓冲器芯片都可以提供所需的电平转换。
2.7 LED配置
LEDA和LEDB引脚在复位时支持极性自动检测。既可直接驱动LED,又可灌电流驱动。复位时ENC28J60检测LED的连接,并按照PHLCON寄存器的默认设置来驱动。运行过程中的LED极性转换直到下一次系统复位后才能被检测到。LEDB的连接比较特殊,在复位过程中检测它的连接,决定如何初始化PHCON1寄存器的PDPXMD位。如果LEDB直接驱动LED,则PHCON1.PDPXMD位被清零,PHY工作在半双工模式;如果LEDB吸收反向电流点亮LED,则PHCON1.PDPXMD被置位,PHY工作在全双工模式;如果LEDB没有连接,则PHCON1.PDPXMD复位后的值不确定。这时主控制器必须适当设置该位,以使PHY工作在所需的状态(半双工或全双工)。
3 软件接口
3.1 SPI接口
SPI接口( Serial Peripheral Interface )是一种同步、全双工串行接口,基于主从配置,是一个4线接口——主出/从入(MOSI),主入/从出(MISO),串行时钟(SCK),从机选择(SSEL)。
在同一总线上可以有多个主机或者从机,但同一时刻只能有一个主机和一个从机能够进行通信。在一次数据传输过程中,数据是同步进行发送和接收的:主机向从机发送1字节数据,从机也向主机返1字节数据。数据传输原则上是全双工的;但实际上,大多数情况下只有一个方向上的数据流包含有意义的数据。
SPI格式的主要特性是SCK信号的无效状态和相位,数据传输的时钟由主机提供。常用的时钟设置基于时钟极性(CPOL)和时钟相位(CPHA)两个参数,CPOL定义SPI串行时钟的活动状态,而CPHA定义相对于从机输出数据位的时钟相位。CPOL和CPHA的设置决定了数据取样的时钟沿。
取决于CPOL和CPHA的设置不同,SPI共有4种模式,如表1所列。
3.2 ENC28J60与单片机的连接
ENC28J60与微控制器MCU的连接是通过SPI实现的,支持10 Mbps。对于没有SPI接口的芯片可通过用I/O口模拟SPI接口的方式实现。ENC28J60仅支持SPI模式0,0。
微控制器可通过SPI接口发送命令,访问ENC28J60的寄存器或读写接收/发送缓冲区,完成相关操作。复位也可通过SPI接口由软件实现,软件复位不影响RESET引脚的状态。
ENC28J60有两个中断输出,分别用于事件中断触发和网络唤醒主机。
CPU采用LPC2138用宏定义实现SPI口读写操作。SOSPDR为SPI数据寄存器,该双向寄存器为 SPI提供发送和接收的数据,发送数据通过写该寄存器提供,SPI接收的数据可从该寄存器读出。SOSPSR为SPI状态寄存器。在对SPI接口进行操作之前需对其初始化。下面给出读/写SPI接口的源代码。
#define READSPI( Val )
{
S0SPDR = 0x00;
while( 0 == (S0SPSR & 0x80));
Val = S0SPDR;
}
#define WRITESPI( Val )
{
if ( 0 == (S0SPSR & 0x40) ) {
S0SPDR = Val;
while( 0 == (S0SPSR & 0x80) );
}
}
亦可用LPC2138的SSP来连接ENC28J60,需将其设置为SPI模式。应当注意到SSP有8帧的收/发 FIFO,如果处理不当将造成读/写错误。因为缓冲区的存在可能破坏读/写ENC28J60的时序。
对于没有SPI接口的单片机可采用普通I/O口模拟的方法实现SPI主机。此时须注意静态时时钟的无效状态和相位,以及输出数据位出现的时间;对ENC28J60操作期间片选必须保持有效(低电平),操作结束后返回低电平。根据ENC28J60的读/写波形很容易写出模拟SPI主机的程序。笔者曾在AT89S51上实现了模拟SPI主机读/写MCP2515的操作。
4 结论
笔者在LPC2138+ENC28J60+HR901170A平台上实现了以太网通信。相对于其他方案,该系统极为精简。对于没有开放总线的单片机,虽然有可能采用模拟并行总线的方式连接其他以太网控制器,但不管从效率还是性能上,都不如用SPI接口或采用通用I/O口模拟SPI接口连接ENC28J60的方案。
可以看出,ENC28J60是极具特色的独立以太网控制器:SPI接口使得小型单片机也能具有网络连接功能;集成MAC和PHY无需其他外设;具有可编程过滤功能,可自动评价、接收或拒收多种信息包,减轻了主控单片机的处理负荷;内部继承可编程的8 KB双端口SRAM缓冲器,操作灵活方便。不足之处为仅支持10BASET。
http://www.hificat.com/tcp/tcp_28j60.html ;
PIC以太网开发板——基于微芯最新ENC28J60以太网控制器相关推荐
- 迅为RK3588开发板-基于瑞芯微RK3588摄像头方案
硬件: RK3588开发板+摄像头 MIPI摄像头: 1.1 硬件连接 RK3588 底板上有四个摄像头接口,如下图所示,此四个接口均可连接摄像头 ov5695 和 摄像头 ov13850. 摄像 ...
- 基于小梅哥AC620开发板的NIOS II LWIP百兆以太网例程移植到自己做的板子上
原程序是运行在小梅哥AC620开发板上的:基于小梅哥AC620开发板的NIOS II LWIP百兆以太网例程_ZLK1214的专栏-CSDN博客_小梅哥ac620[开发板]开发板型号:小梅哥AC620 ...
- 【迅为iMX6Q】开发板 Linux 5.15.71 RTL8211E 以太网驱动适配
相关参考 [迅为iMX6Q]开发板 u-boot 2022.04 SD卡 启动 [迅为iMX6Q]开发板 u-boot 2020.04 RTL8211E 以太网驱动适配 [迅为iMX6Q]开发板 Li ...
- 龙芯linux内核移植开发板,基于国产龙芯GS32I的开发板的设计与嵌入式Linux的移植...
摘要: 目前,嵌入式系统已经渗透到各个领域:工业控制,军事国防,消费类电子产品,网络通信等,但大部分领域的应用都是基于国外各大厂商的嵌入式处理器.在嵌入式领域使用国产芯片,走国产化道路已经成为一个迫切 ...
- 基于米联客MA703FA开发板的MicroBlaze LWIP千兆以太网例程
Xilinx FPGA MicroBlaze使用AXI 1G/2.5G Ethernet Subsystem(= Tri Mode Ethernet MAC + AXI Ethernet Buffer ...
- python微控制器编程从零开始 开发板_Python微控制器编程从零开始 使用MicroPython 文轩网正版图书...
章概述1 1.1MicroPython简介1 1.2设计思想2 1.3MicroPython探究2 1.4面向对象编程和一些Python基础4 1.4.1面向对象的概念4 1.4.2建模一个机器人7 ...
- BDW01手把手系列01:BDW01开发板基于TencentOS Tiny之helloworld!
Hello world BDW01是一个接口资源十分丰富的物联网开发板. 本文先介绍开发板资源,然后是开发环境安装,环境搭建,最后在串口上输出创建的两个任务打印. 一.开发板BDW01入门介绍 1. ...
- android平板开发板,基于ARM Cortex A9开发板平板电脑实战项目
Cortex A9处理器基于先进的推测型八级流水线,该流水线具有高效.动态长度.多发射超标量及无序完成特征,这款处理器的性能.功效和功能均达到了前所未有的水平,能够满足消费.网络.企业和移动应用等领域 ...
- 科创板|微芯生物8月12日上市 将成科创板第28家上市公司
[TechWeb]8月9日消息,在柏楚电子和晶晨股份昨日挂牌上市之后,科创板下周又将迎来一家新的上市公司,微芯生物已确定将在下周一上市. 微芯生物是在首次公开发行股票科创板上市公告书中,披露上市日期的 ...
最新文章
- typora 公式_Typora --- 一款功能强大的高效排版编译器
- 无限极评论回复插件_如何一键修复上色破损的旧照片?老照片有救了,用这个魔法插件...
- 8.5 特征选择-机器学习笔记-斯坦福吴恩达教授
- sainsbury online order
- python编写ftp客户端_用Python写FTP客户端程序
- python基础-2
- 最易懂的Spring IOC原理讲解
- matlab背景点状,基于MATLAB的点状目标检测
- Electron 应用实战 (架构篇)
- Android 中AlarmManager升级4.2
- 函数式编程的兴衰(Composing Software 1)
- Freeman链码,差分码,归一化链码,归一化差分码
- MSF利用ms17_010实验
- 麦克风阵列入门(一)
- 【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers
- AI算法模型线上部署方法总结
- 服务器系统怎么安装网卡驱动,网卡驱动怎么安装,教您网卡驱动的安装操作
- MindManager 2020下载与使用
- 软件测试带宽低,性能测试分析之带宽瓶颈的疑惑
- Week 7 Homework
热门文章
- —++,--的虐待,小白的痛苦,自增与自减
- 亚马逊常见各国标准产品认证标准|干货贴|运营必看|
- 假如我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比
- Prometheus普罗米修斯部署
- NUIST OJ 1364 [2017 江苏科技大学 程序设计竞赛]D.重复成绩统计(改编) 【STL-map】
- java算斜率_[Java教程]js用斜率判断鼠标进入div的四个方向
- 计算机网络知识详解之:TCP连接原理详解
- 你一定要用好的实用外贸工具(内附清单)
- 政策“风云突变”!新东方市值蒸发超近2000亿!俞敏洪何去何从?
- java实现基金浮动_基于JAVA的重仓股基金接口调用代码实例