刘宗铭,卓振泰,何明华*
(1.福州大学物理与信息工程学院,福州350002;2.福州大学电气工程与自动化学院,福州350002)
随着计算机网络技术的快速发展,单个单片机系统越来越难以满足实际应用的需求,传统的单片机多机互联一般是基于RS232串行通信,该方式的通信速率较低,一般为9 600 bit/s;而且通信距离短,一般不能超过15 m[1]。如今在智能家居、控制等领域,以单片机为核心的各种智能监控、测试系统因其高性价比等原因正得到越来越广泛的应用,尤其是智能家居系统远程监控的提出,将家居监控控制系统与互联网的结合推向了新的高层。而智能家居的联网就需要有一个高效、稳定,主要是廉价的以太网接口设备[2-3]。
以太网是目前应用非常广泛的网络通信技术,借助以太网技术实现单片机与Internet的数据通信,此技术适应不同应用场合的需求,比如可以很好地解决传统的智能家居系统以太网接口的成本问题[4]。本文将通过单片机和ENC28J60芯片实现单片机系统和Internet的数据通信,这对与嵌入智能家居系统的发展有着重要的作用。
目前市面上最小的嵌入式应用以太网解决方案就是ENC28J60以太网控制器,它符合IEEE 802.3协议标准。该芯片采用10 Mbit/s的SPI(Serial Peripheral Interface)接口,内部具有8 kbyte双端口SRAM缓冲器,可实现对编程信息包高效存储,检索以及修改,有利于提高系统的传输性能[5-7]。
ENC28J60是Microchip Technology(美国微芯科技公司)推出的符合IEEE 802.3协议规范的一款芯片。ENC28J60是28引脚独立以太网控制器,带有行业标准的SPI接口,并集成了媒体访问控制器和10BASE-T以太网物理层器件,支持全双工和半双工模式,可编程填充和CRC生成,可编程8 kbyte双端口SRAM缓冲器,可配置发送/接收缓冲器的大小,具有硬件管理的循环接受FIFO。在它内部还提供了一个DMA模块,可以实现数据的快速吞吐,数据传输速率高达10 Mbit/s[8-10]。ENC28J60和主控制器的通信通过SPI接口实现,这使得嵌入式应用系统的以太网接口变得灵活简单。
ENC28J60采用标准的SPI串行接口,4条线与主控单片机连接。当SCK为上升沿时命令和数据可通过SI引脚送入器件。在SCK的下降沿从SO引脚输出数据。当执行操作时/CS引脚始终保持低电平,操作完成时恢复高电平[11]。由于主控制器运行在5 V电压下,当SPI和中断输入由ENC28J60上的3.3 V输出驱动时,它可能不符合规范要求,因此需要一个单向电平转换器。这里使用一个廉价的带有TTL电平输入缓冲器的5VCMOS芯片74HCT08(4与门)来提供必要的电平转换。如图1,是系统整体框图。
图1 系统整体框图
要实现整个系统的工作,主要的问题就是需要设计电源电路和复位电路。在系统中由于单片机工作在5 V电压,而ENC28J60是工作在3.3 V电压下的,为了此系统可以正常工作,必须给系统统一供电。因此必须设计一个5 V转3.3 V的电源电路,在系统中电源电路采用专用电源芯片AMS1117-3.3,实现电压的转换。为系统提供所需的5 V和3.3 V工作电压,图2所示为系统电源电路。
图2 系统电源电路
ENC28J60可以通过SPI方便地和微控制器连接而构成嵌入式以太网通信接口,对于没有SPI接口的微控制器也可以通过I/O口模拟SPI的方法实现。本设计是基于 STC89C52、ENC28J60和HR911105A的以太网通讯卡设计。并应用C51编程实现数据的网络通信。ENC28J60工作电压为3.3 V的器件,它被设计为易于集成到5 V的系统中。SPI的CS、SCK和SI输入以及RESET引脚都可以承受5 V的电压。因为主控制器运行在5 V电压下,因此当ENC28J60上的3.3V CMOS输出驱动单片机SPI模拟端口和中断输入口时需要一个单向电平转换器。系统中采用74HC08芯片来实现3.3V到5 V的电平转换[12]。
差分接收引脚(TPIN+/TPIN-)以及差分发送引脚(TPOUT+/TPOUT-)与集成变压器带中心抽头的RJ45插座HR911105A连接,ENC28J60的内部模拟电路需要在RBIAS引脚与地之间外接一个2 kΩ(精度为1%)电阻。为降低功耗,ENC28J60中的一些数字电路工作在2.5 V标称电压下,该电压有其内部一个2.5 V稳压器以产生,为使之工作稳定,需在VCAP引脚与地之间连接一个10 μF的电容。ENC28J60与主控单片机STC89C52以及相应外部器件的连接,如图3所示。
STC89C52单片机通过SPI和以太网控制器ENC28J60相连,这样完成了单片机与以太网之间数据的发送和接收。单片利用I/O口模拟SPI接口与ENC28J60通信,并完成了对ENC28J60的控制和发送/接收缓冲区的读写。以太网接口选用带有网络隔离变压器功能的HR911105A来实现。LEDA和LEDB引脚支持复位时的自动极性检测。可以在这两个引脚上,以拉电流或灌电流点亮LED的两种方式连接LED。系统复位时,ENC28J60将检测LED的连接方式,并将LED驱动为PHLCON寄存器配置的默认状态。如果在ENC28J60运行时改变LED的极性,新极性将在下一次系统复位时才能被检测到。复位时会自动读取LEDB上LED的连接状态,并确定如何初始化PHCON1.PDPXMD位。如果引脚采用拉电流的方式点亮LED,则复位时此位清零且PHY默认为在半双工模式下运行。如果引脚采用灌电流的方式点亮LED,则复位时此位置1且PHY默认为在全双工模式下运行。如果LEDB引脚上没有连接LED,则PDPXMD位将复位为不确定值。在此设计中使用的是拉电流方式点亮LED的。
图3 硬件电路图
以太网设备驱动是嵌人式网关的基础,ENC28J60驱动就是通过对其片内存储器的访问和控制,实现MAC帧的发送和接收ENC28J60的片内存储器分为控制寄存器、PHY寄存器、以太网缓冲器。ENC28J60使用包括初始化、发送和接收。
2.3.1 ENC28J60初始化
ENC28J60初始化流程如图4所示,过程主要包括:进行根据应用特点配置收发缓冲区,根据应用配置相应的接收过滤组合,对MAC进行初始化设置,对PHY进行初始化设置。在使用ENC28J60接收数据包前必须对8 kbyte双端口SRAM缓冲器进行初始化,因此要对接收缓冲器起始地址ERXST指针和结束地址ERXND指针编程。所有未被用作接收缓冲器的存储空间都作为发送缓冲器,同时通过设置接收过滤控制寄存器ERXFCON,使能或禁止相应的接收过滤器。系统上电复位后须查询以太网状态寄存器ESTAT的CLKRDY位,确保设置MAC和PHY寄存器前有足够延时。若CLKRDY为1,表示PHY准备就绪,可对MAC和PHY寄存器进行相应设置。
图4 初始化ENC28J60流程图
2.3.2 ENC28J60接收
接收过程主要包括接收设置与启动,内部接收与过滤,数据包读取与处理。接收启动后,内部自动进行接收和过滤,未滤除的数据包写人循环接收缓冲器(其存储结构包括一个报头、实际包数据、可能的填充字节)并产生中断;通过中断服务分析报头,读取实际包数据。ENC28J60的数据接收程序流程图如图5所示。
图5 接收数据包流程图
2.3.3 ENC28J60发送
发送过程主要包括:发送准备,发送,发送异常处理。ENC28J60自动生成前导符和帧起始定界符、最小包的填充和有效CRC追加。在发送准备过程中需要进行最小包填充设置,CRC追加设置,包控制字节输人,以及MAC帧有效字段输人。发送过程是内部过程。当发送异常中止时,需要根据MAC模块自动产生的7 byte发送状态向量进行相应处理。如图6所示,即为 ENC28J60的数据发送程序流程图。
图6 发送数据包流程图
ENC28J60是目前体积最小的以太网控制芯片,它能提供以太网通信的相应功能,而且体积小,可以根据需要设计出体积较小的网关模块。文中采用51单片机及符合国际电工电子委员会制定的IEEE802.3协议的网络芯片ENC28J60为硬件平台,实现了单片机上的以太网通信。PC设计好的网口与路由器连接后,通过PC机可以与单片机ping通。如图7为PC机ping通单片机IP的现象,实验结果数据如表1所示。
图7 PC机ping通单片机IP
表1 实验数据
从表1中可以看出PC机向单片机发送4个测试数据包,测试结果丢包率为0,说明网络状态相当的良好。实际应用结果表明,设计的以太网通信接口通信可靠性高、配置灵活,适合于嵌入式智能家居控制领域使用。用上述方法构建的通信网关可实现以太网与SPI总线之间的协议转换,为以太网与SPI总线网络的互联提供了一种传输速度快,成本低,稳定性和安全性高的解决方案。
本设计的创新之处就在于应用ENC28J60构成嵌入式以太网模块电路,克服了市场上已有以太网控制器封装引脚多的缺点,简化了设计,减小了占板空间。由此可以看出ENC28J60是极具特色的独立以太网控制器。由ENC28J60构成的嵌入式以太网模块电路连接简单,而且功能强大。它与目前大多数的以太网控制器相比具有明显的优势:无需外扩地址,无需外扩数据总线。并且可以根据需要配合不同的微控制器将模块做到足够小的尺寸。这完全符合未来工业以太网控制器的发展趋势。基于ENC28J60的以太网接口设计,电路设计简单,功能强大,可以灵活的应用于通信行业、远程诊断、远程安保报警系统及智能家居远程监控控制等场合,完全符合未来以太网控制器的发展趋势,具有十分广阔的运用前景。
[1]吴俊杰,吴建辉.以太网MAC控制器的MII接口转RMII接口的实现[J].电子器件,2008,31(2):712-715.
[2]缑延军,郑富全.嵌入式系统中的ENC28J60应用[J].山东科学,2007,20(2):75-79.
[3]李阳,吴成富,邓红德.基于DSP和ENC28J60的多串口与以太网数据传输系统设计[J].测控技术,2011,30(12):61-65.
[4]李伟尧.基于以太网控制器ENC28J60嵌入式TCP/IP技术的研究[J].科技信息,2009(30):239-240.
[5]李国峰,王云.利用ENC28J60芯片搭建智能家居系统的Web server环境[J].黑龙江科技信息,2009(16):8.
[6]张伟业,黄云龙,陈国定.基于ENC28J60以太网通信接口的设计与实现[J].机电工程,2008,25(1):28-30.
[7]张庆辉,马延立.STM32F103VET6和ENC28J60的嵌入式以太网接口设计[J].单片机与嵌入式系统应用,2012(9):23-25.
[8]张中央,陶乃彬.基于ENC28J60的嵌入式系统以太网接口设计[J].河南科技大学学报(自然科学版),2007,28(3):49-53.
[9]陈雪梅,曾照福.基于ENC28J60的嵌入式以太网/CAN网关设计[J].现代电子技术,2009(6):24-27.
[10]于浩洋,邵国平,秦杰.基于ENC28J60以太网控制器的SPI接口设计[J].黑龙江工程学院学报(自然科学版),2009,23(2):63-65.
[11]徐冬寅,栾玖华.利用ENC28J60实现嵌入式Web服务器[J].电脑知识与技术,2009,25(26):7551-7552.
[12]阚伟.基于ENC28J60的以太网通信接口的设计[J].长江大学学报,2012,9(3):99-101.