STM32F103VET6和ENC28J60的嵌入式以太网接口设计
张庆辉;马延立
【摘 要】介绍了一种基于STM32F103VET6微处理器和以太网控制芯片ENC28J60的嵌入式以太网接口的设计方案.分析了基于Cortex-M3内核的微处理器STM32F103VET6的功能和特点,以及以太网控制芯片ENC28J60的主要性能和结构特性,并给出了接口的硬件和软件设计方案.本接口尺寸小、性能高,适合于便携式仪器仪表中的应用.%An embedded Ethernet interface is designed based on STM32F103VET6 microprocessor and Ethernet controller chip ENC28J60. The functions and features of microprocessor STM32F103VET6 based on Cortex-M3 core are analyzed,and main performances and structural properties of Ethernet controller chip ENC28J60 are described. Hardware and software design of the interface are given.  The interface has small size and high performance, and it is used for portable instruments.
【期刊名称】《单片机与嵌入式系统应用》
【年(卷),期】2012(012)009旗舰28源码
【总页数】4页(P23-25,32)
【关键词】STM32F103VET6;ENC28J60;嵌入式以太网
【作 者】张庆辉;马延立
【作者单位】河南工业大学信息科学与工程学院,郑州450001
【正文语种】中 文
【中图分类】TP393.11
引 言
随着以太网技术的普及和发展,基于以太网的应用接口设备也迅速普及到医疗设备、工厂电力系统等领域。嵌入式以太网系统不但可以通过Internet将通信距离无限扩大,使得大量数据的快速传输成为可能,还可以实现测控系统间的数据交换,为智能化、模块化的嵌入式设备的实现提供了一种新途径。然而,嵌入式以太网接口设计的核心器件是网络控制芯片,其性能优劣直接影响网络通信的效率。
本文采用基于32位Cortex-M3内核的STM32F103VET6微处理器和高性能的以太网控制芯片ENC28J60实现高性能、高可靠性的嵌入式以太网通信接口设计,其系统各功能模块容易扩展和升级。
1 STM32F103VET6和ENC28J60简介
STM32F103VET6是32位Cortex-M3内核的新型处理器。它具有更多片内RAM和外设,其出的性能和丰富的资源几乎不需要扩展外围电路就能满足一般的设计要求,硬件设计大为简化,且执行速度和内存容量完全满足主控模块的多任务实时应用。
ENC28J60是Microchip公司推出的28引脚独立以太网控制芯片,可为嵌入式应用提供低引脚数、低成本且高效易用的远程通信解决方案。ENC28J60采用业界标准的SPI串行接口,只需4条连线即可与主控单片机连接。ENC28J60以太网控制器的主要功能包括:
① 符合IEEE 802.3标准。内置10Mbps以太网物理层器件(PHY)及媒介接入控制器(MAC),可按业界标准的以太网协议可靠地收发信息包数据。
② 可编程过滤功能。特殊的过滤器包括可编程模式匹配过滤器,可自动评价、接收或拒收M
agic Packe的单播、多播或广播信息包,以减轻主控单片机的处理负荷。
③ 最高速度可达10MB/s的SPI接口。
④ 可编程8KB双端口SRAM缓冲器,以高效的方式进行信息包的存储、检索和修改,以减轻主控单片机的内存负荷。该缓冲器提供了灵活可靠的数据管理机制[1]。
2 硬件电路设计
ENC28J60可以通过SPI接口方便地和微处理器连接而构成嵌入式以太网通信接口,对于没有SPI接口的微处理器也可以通过I/O口模拟SPI的方法实现。STM32F103VET6内部含有3个SPI接口,可以很方便地实现与ENC28J60的连接。STM32F103VET6SPI引脚连接图如图1所示。
图1 STM32F103VET6SPI引脚连接图
ENC28J60具有上电复位功能,一旦VDD上升到某个门限值后,就会在片内产生上电复位脉冲,当VDD上升到足够器件工作电压时,器件会以初始化状态启动,在器件正常工作期间,
RESET引脚的内部弱上拉将会使引脚保持逻辑高电平,在系统上电复位后不应立即发送数据或访问到MAC、MII或PHY寄存器,至少应延迟10ms。通过查询ENC28J60状态寄存器ESTAT中的CLKRDY位来确定系统是否准备好是不可靠的,最好将复位引脚连接到单片机的引脚,通过软件延时来使系统可靠复位[2]。
ENC28J60内部集成了2.5V稳压器,要使之工作稳定,需要在VCAP引脚与地之间外接一个10μF电容;由于ENC28J60内部稳压器无法驱动外部负载,所以电源引脚必须与同一个3.3V电源相连,并且在每个电源引脚与地之间都应连接一个0.1μF的磁片电容,而且电容应尽可能靠近引脚。
硬件电路连接如图2所示。根据ENC28J60的工作频率要求,需在OSC1和OSC2引脚间连接25MHz晶振及接地电容。ENC28J60的内部模拟电路需要在RBIAS引脚与地之间外接一个1kΩ的电阻。以太网变压器在实现以太网接口操作时是不可缺少的,在差分发送引脚(TPOUT+/TPOUT-)上,需要外接一个带有中心抽头的1∶1脉冲变压器[3]。变压器应具有2kV以上的电压隔离性能,以防止静电干扰。本设计采用的是集成以太网隔离变压器RJ45插座HR911105A。
3 软件设计
3.1 STM32标准外设库介绍
STM32(即STM32F10系列芯片,包括了本文所用的芯片)标准外设库也称固件函数库或固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微处理器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,就可以轻松应用每一个外设。因此,使用固件函数库可以大大减少用户的程序编写时间,进而降低开发成本。该固件库中的每个外设驱动都由一组函数组成,这组函数覆盖了该外设的所有功能,并且每个器件的开发都有一个通用API驱动,API对该驱动程序的结构、函数和参数名称都进行了标准化[4]。
在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库:
① 使用外设驱动:这时应用程序开发基于外设驱动的 API。用户只需要配置文件“stm32f10x_conf.h”,并使用相应的文件“stm32f10x_ppp.h/.c”即可。
② 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。
使用标准外设库进行开发可以极大地减少软件开发的工作量,也是目前嵌入式系统开发的一个趋势。
3.2 ENC28J60初始化配置
图2 硬件电路连接图
ENC28J60控制寄存器中最基本和重要的5个寄存器是:EIE、EIR、ESTAT、ECON2和ECON1。
EIE:以太网中断使能控制寄存器,分为总中断使能和各部分使能控制。
EIR:以太网中断标志寄存器,在接收和发送数据包时根据不同的标志位进入不同的执行程序。
ESTAT:以太网状态寄存器,反映以太网当前的数据碰撞、忙信息、错误信息、时钟状态等信息。
ECON2:以太网辅助控制寄存器,设置数据指针、芯片节能等。
ECON1:以太网主控制寄存器,这个是芯片最常用的寄存器,主要用来设置不同层的寄存器空间[5]。
在使用ENC28J60发送和接收数据包时,必须对器件进行初始化设置。根据不同的应用,一些配置选项可能需要更改。ENC28J60的初始化主要是对其接收和发送缓冲器、接收过滤器、晶振启动时间、MAC寄存器、PHY寄存器进行设置。初始化ENC28J60之前,先关闭单片机的中断输入,对引脚给定一个持续的低电平复位信号,然后对相应的寄存器进行设置。设置完成所有需要的寄存器后,判断以太网状态中的时钟启动标志位是否置位,然后开中断。对于以太网传输部分来说,主要有两个作用:一是对要发送的数据按照以太网数据帧格式进行封装并发送;二是对接收的以太网数据帧进行解包,供应用程序使用[6]。