新型以太网控制器ENC28J60及其接口技术

合集下载

基于ENC28J60的ATMAGE16单片机以太网通信设计

基于ENC28J60的ATMAGE16单片机以太网通信设计

体 积小 、 格 便 宜 等 优 点 , 别 是 该 芯 片 的 价 特
信技术, 借助 以太网技术实现单片机之间互 引脚数仅有2 个, 比于其他大部分 同类芯 钟 由写 入 到 S I 送 缓 冲 寄存 器 的 数 据启 8 相 P发 联 , 以很 好 地 克服 传 统R 2 2 线 实 现 单 片 的8引 脚封 装要 少 得 多 , 大 火简 化 相 关 动 ,P S ( B ) f 上 的数 据 发 送 秩 可 S 3总 0 可 S I MO I 5a脚 P J 片 机互 联 中存 在 的 问题 , 以适应 不 同应 用 场 设 计 , 空 间 。 节省 序 由 寄 存 器 S R ̄ D PC < ORD 控 制 , 位 J 化 置
几十 个单 片机 节点 。 E 2 J0 NC 8 6 以太 网控 制 芯 片 具 有 结 构简 单 、
应 设 置 为模 式0 AT g I 通 过 将E 2 。 me a 6 NC 8 J0 c 引脚 置 低 实 现 与其 的 同 步 。P 时 6的 s SI
以太 网是 目前 应 用 非 常 广 泛 的 网 络 通

学 术论 坛 ・
基 于 E C 86 N 2 J 0的 A MA 1 T GE 6 单 片机 以太 网 通 信 设 计
杨金 石 肖 繁 李 坤
220) 6 5 0 ( 东青 州 山 东 青 州 山
摘 要: 针对智 能测控 领域 数据通 信 的需求 , 设计 了基于E c 86 芯 片 ̄A M G 1单 片 以太 网通信 系统 , 简要介 绍E c N 2J0 T A E6 机 在 N

1 引言
里左右的距离, 但在某些应用场合还是无法 太 网控 制芯 片 。 比于 其 他 可用 于嵌入 式系 C 86 为从 设 备 。 T g l 的S I 作 模 相 2 J0 A mea 6 P 工 满足 需 求 ; 是 连 接节 点 数 目有 限 , S 3 统开发的以太网控 制器(J L 0 9D 0 式 由C O C HA设 置 , 据E 2 J0 三 受R 2  ̄ RT S 1 、 M9 P L、 P 根 NC 8 6 的 2 享 通信 总线 特 性 的 限 制 , 共 一般 仅能 连 接 0 、 x8 76 、 AN l 1 、 S 90 等 ) 8 A 8 9 L L 9 cl1C 8 0 A , S I 写 时 序 , me a 6 P 工 作 模 式 P读 AT g 1 的S I

零死角玩转stm32-高级篇8、以太网(ENC28J60 + Lwip)

零死角玩转stm32-高级篇8、以太网(ENC28J60 + Lwip)

0、友情提示《零死角玩转STM32》系列教程由初级篇、中级篇、高级篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。

M3的世界,与野火同行,乐意惬无边。

另外,野火团队历时一年精心打造的《STM32库开发实战指南》将于今年10月份由机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。

内容上会给你带来更多的惊喜。

是一本学习STM32必备的工具书。

敬请期待!8、以太网(ENC28J60+LWIP)8.1 友情提醒Lwip的教程非常庞大且深入,是《stm32库开发实战指南》里面的内容,鉴于跟出版社的合约的关系,这里不能够开源,但野火STM32开发板里面提供了源码。

欲知更详细内容,请关注机械工业出版社将于10月份出版的《stm32库开发实战指南》。

LWIP实验需要用到ENC28J60这个以太网模块,野火STM32开发板已经板载了这个模块,可直接做LWIP实验。

8.2实验步骤下面简单介绍下LWIP的操作方法和能够达到的效果。

野火STM32开发板供电(DC5V),插上JLINK,插上串口线(两头都是母的交叉线),利用网线把STM32开发板接入与PC相同的路由,也可以直接利用网线把开发板和PC相连,其实验的操作是相同的(这样可以排除路由的问题),但在进行浏览网页实验时,图片可能无法正常显示。

把本工程文件编译后烧录到开发板上,在程序运行框输入cmd命令进入dos模式。

8.2.1 ping实验在命令提示符窗口输入命令并回车: ping 192.168.1.18输入ping命令成功后的现象ping 192.168.1.188.2.2 telnet实验1.如果使用windows 7系统,系统没有telnet程序,需要自行下载安装。

使用xp系统的用户,在命令提示符窗口输入命令并回车:telnet 192.168.1.18输入命令后弹出如下窗口:进入 telnet程序2.见错误!未找到引用源。

以太网控制器

以太网控制器

嵌入式以太网控制器不错的选择一:MC9S12NE64(MCU):单芯片以太网连接网络设备、工业控制、安全系统、照明控制、电源监控以及自动售货机远程接入系统的设计人员都可以采用飞思卡尔半导体的单芯片以太网解决方案,为他们的设备增加连接通道。

飞思卡尔的MC9S12NE64通过一个微控制器单元(MCU)提供完整的以太网连接解决方案。

它是一款16位微控制器,可与第三方的TCP/IP协议栈相匹配,再采用Metrowerks的CodeWarriorTM开发工具的快速设计理念,从而实现低成本的终端节点以太网解决方案。

MC9S12NE64具有使用简便、性能优良、价格低廉(多芯片以太网解决方案的价格可能非常高)的特点,并提供了足够的增长空间。

这些都要归功于64 KB闪存能实现快速编程,并将产品快速投放市场。

MC9S12NE64包含内置的以太网媒体访问控制器(EMAC)、10/100以太网物理层(EPHY)和片内闪存存储器。

此外,它还带有2个串行通信接口(SCI)、1个4通道定时器、1个串行外设接口(SPI)、1个I2C接口、1个10位模数转换器(ADC)。

MC9S12NE64基于强大的HCS12内核。

它采用飞思卡尔的0.25μ闪存工艺,可以为那些需要更大内存、更多外围设备和更高性能的应用提供从68HC08、68HC11和68HC12体系结构进行升级移植的换代产品。

====================================================================== 电源电压/性能3.3 V ±5% 运行-40°C 到+85°C, -40°C 到+105°C内置外围设备8通道、10位模数转换器(ADC)4通道、16位计时器运行正常监控(COP)键盘中断多达70个通用输入/输出通道(GPIO)可选封装80脚TQFP-EP112脚LQFP25 MHz HCS12 内核内存64 KB 闪存8 KB RAM通信10/100 兆以太网媒介访问层接口(EMAC)10/100 兆以太网物理层接口(EPHY)两个串行通信接口(SCI)串行外围设备接口(SPI)I2C接口====================================================================== 二:AX88796A以太网控制器由ASIX推出这款产品是为嵌入式设备设计的,提供8/16bit 10/100M快速以太网连接功能,内建有PHY和8K³16bit的SRAM。

CH ENC28J60 ETHERENET MODULE 用户手册说明书

CH ENC28J60 ETHERENET MODULE 用户手册说明书

CH ENC28J60 ETHERENET MODULEUser ManualCH ENC28J60 ETHERENET MODULEis dedicated to the Ethernet and easy to plug to the Arduino viathe SPIPros ConsCheap library no maintained by Arduino TeamLot of open source librariesNeed to make a choice to select the rightlibrairieCan be used directly on atmega (without arduino card)Now it is time to choose a good library but before choosing a lib. How to wire it?Wiring a Enc28j60 module: ∙ Enc28j60 SO -> Arduino pin 12∙ Enc28j60SI -> Arduino pin 11∙ Enc28j60SCK -> Arduino pin 13∙ Enc28j60 CS -> Arduino pin 10∙ Enc28j60 VCC -> Arduino 3V3 pin∙ Enc28j60 GND -> Arduino Gnd pinChoosing a libraries for Enc28j60 Now your system is ready. It is time to choose a library. There are 2 main libraries:EtherCard: EtherCard is a driver for the ENC28J60 chip, compatible with Arduino IDE.Adapted and extended from code. License: GPL2 EtherCard is found in Software It is compliant with:∙DHCP ∙DNS∙UDPstatic byte myip[] = { 192,168,1,203 }; byte Ethernet::buffer[500]; BufferFiller bfill; void setup () { if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)Serial.println(F("Failed to access Ethernet controller"));ether.staticSetup(myip);}static word homePage() {long t = millis() / 1000; word h =t / 3600; bytem = (t / 60) % 60; byte s = t %60; bfill = ether.tcpOffset();bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n""Content-Type: text/html\r\n""Pragma: no-cache\r\n""\r\n" "<meta http-equiv='refresh' content='1'/>""<title>RBBB server</title>" "<h1>$D$D:$D$D:$D$D</h1>"), h/10, h%10, m/10, m%10, s/10, s%10); return bfill.position();}void loop () {word len = ether.packetReceive();word pos = ether.packetLoop(len);if(pos) // check if valid tcp data is received ether.httpServerReply(homePage());// send web page data}NB: on this example, if you use the previous wiring, you have to change the setup function:void setup (){ //CS is connected to pin 10 if (ether.begin(sizeof Ethernet::buffer,mymac,10)==0)Serial.println(F("Failed to access Ethernet controller"));ether.staticSetup(myip);}Example of simple server/** UIPEthernet EchoServer example.** UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based* Ethernet-shield.**UIPEthernetusesthefineuIPstackbyAdamDunkels<************>** -----------------** This Hello World example sets up a server at 192.168.1.6 on port 1000.* Telnet here to access the service. The uIP stack will also respond to* pings to test if you have successfully established a TCP connection to* the Arduino.**ThisexamplewasbaseduponuIPhello-worldbyAdamDunkels<************>*PortedtotheArduinoIDEbyAdamNielsen<**********************>*AdaptiontoEnc28J60byNorbertTruchsess<*****************************>*/#include<UIPEthernet.h>EthernetServer server =EthernetServer(1000);void setup(){Serial.begin(9600);uint8_t mac[6]={0x00,0x01,0x02,0x03,0x04,0x05};IPAddress myIP(192,168,0,6);Ethernet.begin(mac,myIP);server.begin();}void loop(){size_t size;if(EthernetClient client =server.available()){while((size =client.available())>0){uint8_t*msg =(uint8_t*)malloc(size);size =client.read(msg,size);Serial.write(msg,size);free(msg);}client.println("DATA from Server!");client.stop();}}NB: As it is compliant with classical Arduino Ethernet Lib. You can use Webduino on top of it. Webduino is an Arduino-based Web Server library, originally developed for a class at NYC Resistor. It’s called Webduino, and it’s an extensible web server library for the Arduino using the Wiznet-based Ethernet shields. It’s released under the MIT license allowing all sorts of reuse.How to add Libraryhttps:///en/guide/librariesHow to open software:-Enter to /products/productdetails?ProductId=7E83B9D3-0365-4452-。

以太网接入w5100对比enc28j60的区别和优势

以太网接入w5100对比enc28j60的区别和优势

以太网接入w5100对比enc28j60的区别和优势对于单片机的以太网接入方案~W5100和ENC28J60都是被常常使用到的芯片,这两种方案也可以说是硬件协议栈和软件协议栈的典型代表,两者都是经住了市场考验的~关于他们的使用和讨论也比较多,除了在传统单片机的以太网接入中被广泛使用,我们也能看到他们在开源硬件的以太网扩展中发挥的重要作用~让我们看看部分论坛的讨论吧。

&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash; -来自&ldquo;极客工坊&rdquo;提问: &rdquo; 本人纯新手、还没买网络模块、看了些教程感觉这两个功能差不多,不知道使用起来哪个好用啊?淘宝价格w5100比enc28j60贵不少啊,这是什么原因?求前辈指点。

&rdquo;回帖:&mdash; &ldquo;一个是官方出的库,一个是第三方出的库,兼容性方面存在区别&ldquo;&mdash;&ldquo;绝对w5100好用多了,官方例子多,就是贵&rdquo;&mdash;&ldquo;建议直接上W5100,性能稳定、第三方库各种丰富啊!&rdquo;&mdash;&ldquo;我用的就是w5100,有现成的官方库,蛮好用&rdquo;&mdash;-&ldquo;w5100自带TCP/IP协议栈,enc28j60只有mac和phy,上层都需要自己实现。

对于arduino,w5100是首选,w5100也是arduino官方的方案,开发库完备!&rdquo;&mdash;&ldquo;ENC28J60这个产品提供的是底层的MAC+PHY(10M Base T)W5100这个产品是硬件TCP/IP协议栈+MAC+PHY(10/100M Base T)也就是W5100里面用硬件逻辑电路实现了TCP/IP的协议栈结构,不需要向ENC28J60这样的网络控制器那样还需要一个资源较大的MCU跑软件协议栈。

【微计算机信息】_以太网控制器_期刊发文热词逐年推荐_20140723

【微计算机信息】_以太网控制器_期刊发文热词逐年推荐_20140723

2009年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
科研热词 以太网 嵌入式 tcp/ip linux can 门禁 训练模拟器 虚拟设备 网络 网关 筑路机械控制系统 神经网络 温室 液晶模块 沥青混合料搅拌设备 数据采集 控制系统 接口卡 指纹识别 微处理器 工业监控 工业以太网 嵌入式网络节点 嵌入式网关 嵌入式系统 图文显示 双ahb总线 单片机 动力系统 加药控制器 冗余控制器 伺服控制 仿真支撑平台 以太网接口 串行接口 μ clinux web服务器 vmware tfds sercos-ⅲ协议 s3c2410 pso proteus7.1 pca82c250 lpc2368 lpc2210 led its485 fpga enc28j60 dsp2812 dsp
53 54 55 56 57
dm9000a cp2200 can总线技术 arm9 arm
推荐指数 8 4 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2012年 序号 1 2 3 4 5 6 7 8 9 10
科研热词 组态王 工业以太网 大功率整流设备 协议转换 以太网控制器 uip1.0 modbus/tcp modbus ip核设计 n总线
推荐指数 1 1 1 1 1 1 1 1 1 1
2008年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

ENC28J60+UIP 组播和广播接收问题

ENC28J60+UIP 组播和广播无法接收问题采用UIP进行组播和广播时遇到两个问题,一是无法接收组播数据;二是广播数据大于18字节时无法接收检查组播数据接收时发现EPKTCNT寄存器显示是有数据的,但是UIP_UDP_APPCALL里面uip_newdata()为零表示无数据;因此猜测是uip把数据包丢弃了;顺藤摸瓜,发现:#if UIP_BROADCASTDEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum());if(BUF->proto == UIP_PROTO_UDP &&uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr)/*&&uip_ipchksum() == 0xffff*/) {goto udp_input;}#endif /* UIP_BROADCAST */原来有宏定义,于是找到UIP_BROADCAST的定义,结果是另一个宏定义#ifndef UIP_CONF_BROADCAST#define UIP_BROADCAST 0#else /* UIP_CONF_BROADCAST */#define UIP_BROADCAST UIP_CONF_BROADCAST#endif /* UIP_CONF_BROADCAST */于是增加一句#define UIP_CONF_BROADCAST 1,继续运行,结果发现还是没有效果,于是回到刚才的程序,这才恍然大悟,原来是通过uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr)来进行判定,其中all_ones_addr定义为全部都是F,也就是255.255.255.255,所以只要广播数据才会进入udp_input,自己的数据包是192.168.1.255,所以被丢弃找到问题之后就容易解决了,在下面增加一段程序if(BUF->proto == UIP_PROTO_UDP &&((BUF->destipaddr[1]&0xFF00)==0xFF00)) {goto udp_input;}作用就是判定ip地址最后一位是否为255,如果是则进入udp_input,修改完成之后,发几个数据试试,运行果然就正确了。

enc28j60.c代码简单分析

#include "enc28j60.h"#include "spi.h"#define MIN(a,b) (a) < (b) ? (a) : (b)XDATA u8_t Enc28j60Bank;XDATA u16_t NextPacketPtr;void delay_100ns(){asm("nop");asm("nop");asm("nop");}void delay_ms(int t1){int i;while(t1--){for(i=10;i;--i){delay_100ns();}}}//*****************************************************************************/ / Function : enc28j60ReadOp// Description ://***************************************************************************** u8_t enc28j60ReadOp(u8_t op, u8_t address){u8_t dat1;//spi模拟接口,开启片选,激活enc28j60CSN =0;/* spi模拟接口定义sbit VCC1 = P2^0; // VCC1 NO USEsbit CSN = P1^4; // CSsbit SIN = P1^5; // MOSIsbit SON = P1^6; // MISOsbit SCKN = P1^7; // SCKsbit RSTN = P3^5; // RSTsbit INTN = P3^3; // INTvoid WriteByte(u8_t temp);u8_t ReadByte(void);*/// issue read commanddelay_100ns();WriteByte(op | (address & ADDR_MASK));/*#define ADDR_MASK 0x1FSPI 操作码op定义(来自enc28j60.h)#define ENC28J60_READ_CTRL_REG 0x00 #define ENC28J60_READ_BUF_MEM 0x3A #define ENC28J60_WRITE_CTRL_REG 0x40 #define ENC28J60_WRITE_BUF_MEM 0x7A#define ENC28J60_BIT_FIELD_SET 0x80#define ENC28J60_BIT_FIELD_CLR 0xA0#define ENC28J60_SOFT_RESET 0xFF注意:根据WriteByte(op | (address & ADDR_MASK));操作码后面的参数所示的a为操作寄存器的地址(地址定义可以由enc28j60.h获得),而spi操作码定义op的时候a的位置必须为0,因为还要和控制寄存器的地址进行或运算,而有一些不需要跟寄存器地址的,如:RBM WBM SC都有具体的操作码,并不需要跟地址,这些指令,在使用的时候必须要将address值赋值为0*///从spi读取字节dat1 = ReadByte();//判断要读取的地址的最高位是否为1,若为1,则为读取MAC 或者MII的寄存器,//此处必须说明一下,在enj28j60.h头文件中定义了,由E开头的寄存器的最高位为0 //由M开头的寄存器最高位为1// eg.//页面0 寄存器定义//#define ERDPTL (0x00 | 0x00)//#define ERDPTH (0x01 | 0x00)// 页面2 寄存器定义//#define MACON1 (0x00 | 0x40 | 0x80)//#define MACON2 (0x01 | 0x40 | 0x80)// 数据手册12页说明://ENC28J60 的控制寄存器通常被分为ETH、MAC 和MII//三组寄存器。

嵌入式系统中的ENC28J60应用


维普资讯
7 6




20 年 O7
() 成 M C和 1B S — H 兼容 IE 0 ., 有接 收 冲 2集 A 0 A ETP Y, E E823 具 突抑制 、 编 程 自动 拒 绝 错 误 、 突 时 自动 重 发 、 编 程 填 充 和 可 冲 可
维普资讯
第 2卷 0
第 2期
山 东 科 学
s { IN S Ⅱ C l^ NDD G C E
V0 .0 N 2 1 2 o. A r2 0 p .0 7
2O O 7年 4月
文章编号 :0242 {1 /0-050 10-06 2 Y}20 7.5 X
用 的远程 通讯解 决 方案 。
1 以太 网与 T PI C/ P协议
与主/ 型 的 总线 网络相 比 , 从 以太 网采 用 C MMC S D或 使 用 需 求 优 先 的访 问方 法 , 证 了 网络 节 点 的对 保
等, 并通过网络分段减少冲突阻塞 ; 在多种传输介质下支持 1 0M / 的传输带宽和 10 40 m的传输 0~1 bs 0 0 ~ 00
复位 ) 。
缓冲器读指针
缓冲器 写指针
图 1 T PI C/ P协议族分 层
缓 冲器 (K 8)
发送 缓冲 区
Байду номын сангаас
接 收缓冲 区 ( 环 FF ) 循 IO
发送区起始地 址 控制 寄存 器
( 4段 * 2字 节 ) 3
发送区结束地 址 / 接收 区起 始地址 接 收入区结束地址
距离 ; 包含 了 o I 议栈 中 的介质 访 问控 制子 层 和数据 链路 子 层 。 s协

奋斗STM32开发板uIP1.0 以太网例程讲解

奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程uIP1.0 ENC28J60 以太网例程实验平台:奋斗版STM32开发板V2、V2.1、V3 实验内容:本例程演示了在奋斗STM32开发板上完成ARP,ICMP,TCP服务器、WEB 服务器以及UDP服务器,该实验学习了基于uIP1.0网络协议栈的程序编制。

预先需要掌握的知识1.ENC28J60ENC28J60是MICROCHIP公司的带SPI 接口的独立以太网控制器, 以太网控制器特性 • IEEE 802.3 兼容的以太网控制器 • 集成MAC 和10 BASE-T PHY • 接收器和冲突抑制电路 • 支持一个带自动极性检测和校正的10BASE-T 端口 • 支持全双工和半双工模式 • 可编程在发生冲突时自动重发 • 可编程填充和CRC 生成 • 可编程自动拒绝错误数据包 • 最高速度可达10 Mb/s 的SPI 接口 缓冲器 • 8 KB 发送/ 接收数据包双端口SRAM • 可配置发送/ 接收缓冲器大小 • 硬件管理的循环接收FIFO • 字节宽度的随机访问和顺序访问(地址自动递增) • 用于快速数据传送的内部DMA • 硬件支持的IP 校验和计算 介质访问控制器(MAC)特性 • 支持单播、组播和广播数据包 • 可编程数据包过滤,并在以下事件的逻辑“与” 和“或”结果为真时唤醒主机: - 单播目标地址 - 组播地址 广播地址 - Magic Packet - 由64 位哈希表定义的组目标地址 - 多达64 字节的可编程模式匹配(偏移量可由用户定义)淘宝店铺:1奋斗版 STM32 开发板例程文档———uIP1.0 ENC28J60 以太网例程• 环回模式 物理层(PHY)特性 • 整形输出滤波器 • 环回模式 工作特性 • 两个用来表示连接、发送、接收、冲突和全/ 半双工状态的可编程LED 输出 • 使用两个中断引脚的七个中断源 • 25 MHz 时钟 • 带可编程预分频器的时钟输出引脚 • 工作电压范围是3.14V 到3.45V • TTL 电平输入 • 温度范围:-40°C 到+85°C (工业级), 0°C 到 +70°C (商业级)(仅SSOP 封装) • 28 引脚SPDIP、SSOP、SOIC 和QFN 封装概述ENC28J60 是带有行业标准串行外设接口(SerialPeripheral Interface,SPI)的独立以太网控制器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

新型以太网控制器ENC28J60及其接口技术 作者: 发布时间:2009-04-22 18:45:11 来源: 繁体版 访问数:

引言 ENC28J60是Microchip Technology(美国微芯科技公司)近期推出的28引脚独立以太网控制器。 在此之前,嵌入式系统开发可选的独立以太网控制器都是为个人计算机系统设计的,如RTL8019、AX88796L、DM9008、 CS8900A、LAN91C111等。这些器件不仅结构复杂,体积庞大,且比较昂贵。目前市场上大部分以太网控制器的封装均超过80引脚,而符合 IEEE 802.3协议的ENC28J60只有28引脚,既能提供相应的功能,又可以大大简化相关设计,减小空间。

图1 ENC28J60的硬件连接 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 Start?up 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。 < P> 所有的供电引脚(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所列。

表1 SPI的4种模式 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 K

相关文档
最新文档