ENC28J60在嵌入式系统接口上的设计与实现

发布者:谁与争锋1最新更新时间:2012-03-26 来源: 微计算机信息 关键字:嵌入式系统  以太网  ENC28J60  LwIP 手机看文章 扫描二维码
随时随地手机看文章

一、引言

随着计算机技术的发展,嵌入式系统已成为计算机领域的一个重要组成部分,实时操作系统的应用也越来越受到重视。uC/OS-II是专门为嵌入式应用设计的实时操作系统内核,它具有以下几个优点:源代码公开,代码结构清晰,注释详尽,组织有条理,具有良好的可扩展性和可移植性,最多可以管理60个任务。uC/OS-II采用了基于优先级的占先式实时内核,它包含了实时内核任务管理、时间管理、任务间的同步(信号量、邮箱、消息队列)和内存管理等功能。正适合嵌入式操作系统体积小、速度快、可裁减、可移植的特性。

嵌入式系统在网络化开发的过程中,如何解决与网络连接,即如何将通用处理器的网络连接装置应用于嵌入式网络的开发是十分重要的。目前市面上有许多以太网络控制芯片,其中大多功耗高、功能复杂,不适用于价格低廉的嵌入式系统之中。并且目前市场上的大部分以太网控制器采用的封装均超过80引脚,而符合 IEEE802.3协议的ENC28J60只有28引脚,就能既提供相应的功能,又可以大大简化相关的设计,并减小占板空间,再加上由Microchip 免费提供的用于单片机的TCP/IP软件堆栈,使之成为目前市面上最小的嵌入式应用以太网解决方案。

二、uC/OS-II在ARM上的移植

ARM是目前嵌入式领域中应用最广泛的RISC微处理器结构,以其低成本、低功耗、高性能等优点占据了嵌入式系统应用领域的领先地位[1]。 uC/OS-II可以简单地看作是一个多任务调度器,在这个任务调度器上完善地添加了与多任务操作系统相关的一些系统服务,如信号量、邮箱等。其90%的代码是用C语言写的,可以直接移植到有C语言编译器的处理器上。移植工作主要都集中在多任务切换的实现上,因为这部分代码用来保存和恢复CPU现场(即写 /读相关寄存器),不能用C语言,只能使用汇编语言完成。uC/OS-II的全部源代码量大约是6000-7000行,共15个文件[1]。将uC/OS-II移植到ARM处理器上,需要修改三个与ARM体系结构相关的文件,代码量大约是500行。以下是这个三个文件的移植工作:

1)OS_CPU. H 的移植

首先进行基本配置和数据类型定义,因为不同的编译器所提供的同一数据类型的数据长度并不相同。其次用#define 语句定义2 个宏开关中断:即

退出临界区宏定义: # define OS_EXITCRITICAL ( ) ARMDisable Int ( )   //关中断,

进入临界区宏定义# define OS_ENTERCRITICAL ( ) ARMEnableInt ( )   //开中断。

最后根据堆栈的方向定义OS_STK GROWTH。

2)OS_CPU.C的移植

OS_CPU.C的移植包括任务堆栈初始化和相应函数的实现.在这里共有6个函数[2]:OSTaskStkInit( ),OSSTaskCreateHook( ),OSTaskDelHook( ),OSTaskSwHook( ),OSTaskStatHook( ),OSTimeTickHook( )。其中后面的5个HOOK函数又称为钩子函数,主要是用来对uC/OS-II进行功能扩展。这些函数为用户定义函数,由操作系统调用相应的HOOK函数去执行,在一般情况下,他们都没有代码,所以实现为空函数即可。而函数OSTaskStkInit( )对堆栈进行初始化,在ARM系统中,任务堆栈空间由高到低依次为PC,LR,R12,R11,…,R1,R0,CPSR,SP,SR。在进行堆栈初始化以后,OSTaskStkInit( )返回新的堆栈栈顶指针。

3)OS_CPU A. S 的移植

uC/OS-II移植的最后还需要用户编写4个重要的汇编函数,包括OSStartHighRdy( )、OSCtxSw( )、OSIntCtxSw( )及OSTickISR( )。分别介绍如下:OSStartHighRdy( )函数由OSStart( )调用,用以运行优先级最高的就绪任务,其运行过程:调用用户定义的OSTaskSwHook( )函数→获取任务堆栈指针→置位全局;OSCtxSw( )函数,实时操作系统内任务级的切换是通过处理器的软中断实现的,并且软中断服务例程的向量地址必须指向OSCtxSw( )函数;OSIntCtxSw( )函数用于实现中断级任务切换,并用在最初清理堆栈(调整堆栈指针的位置);OSTicklSR( )函数实现任务切换,并使用内核定时器产生时钟节拍。

三、主要硬件选型及设计

系统主要采用ENC28J60+LPC2212/LPC2214,其信息终端模块硬件系统框图,如图1所示。

图1 信息终端模块硬件系统框图 [page]                           

    图2  网卡芯片的配置原理图部分电路图

 

硬件由以下几部分组成:

1)单片机及其外围器件:LPC2214、PLL(10KHz晶体等)、LED指示灯;

2)以太网控制器部分:ENC28J60、耦合变压器、RJ45插座、25MHz晶体;

3)电源部分:由一片7805提供5V的直流电压,SPX1117M3-1.8 提供1.8V的直流电压  SPX1117M3-3.3提供3.3V的直流电压。

系统采用LPC2212/LPC2214单片机,LPC2212/LPC2214是一款基于16/32位ARM7TDMI-S,并支持实时仿真和跟踪的CPU,带有128/256 k字节(kB)嵌入的高速Flash存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。

ENC28J60是Microchip Technology(美国微芯科技公司)近期推出的28引脚独立以太网控制器,它采用业界标准的SPI串行接口,具有10 Mbps SPI接口,符合IEEE802.3协议,内置了10 Mbps以太网物理层器件(PHY)及介质访问控制器(MAC),可按以太网协议可靠地收发信息包数据[3]。另外,它还具有可编程8 KB双端口SRAM缓冲器,此缓冲存储器具有灵活可靠的数据管理机制,以高效的方式进行信息包的存储、检索和修改,以减轻主控单片机的内存负荷。该系统用到的网卡芯片配置原理部分电路图,如上图2所示。

四、软件及其程序设计

系统软件的核心是uC/OS-II 内核通过ENC28J60以太网控制器以TCP/IP协议栈LwIP为协议和以太网相连接,在该系统中主要完成以下三个方面的设置与实现:

1) TCP/IP协议栈的精简与实现;2) ENC28J60以太网控制器驱动程序的实现;3) 整个系统的流程图及实现。该系统的软件框图,如图3所示。

图3  系统软件框图

4.1  TCP/IP协议栈实现

1) LwIP协议

嵌入式系统uC/OS-II只是一个实时的任务调度及通信内核,缺少对外围设备和接口的支持。以开放源代码的TCP/IP协议栈LwIP为原型,对嵌入式TCP/IP协议进行改造,可使uC/OS-II成为支持网络的RTOS。[page]

LwIP协议栈在设计时就考虑到了将来的移植问题,它把所有的硬件、OS、编译器相关的部分独立出来,放在一个固定的目录下[4]。因此LwIP在uC/OS-II 上的实现就是修改这个目录下的文件,其他的文件一般不必修改。本系统的硬件平台是ENC28J60+LPC2212/LPC2214。uC/OS-II在LPC2214需要说明的一点是LwIP会为每个网络连接动态分配一些信号量(Semaphone)和消息队列(Message Queue),当连接断开时会删掉这些Semaphone和Queue。

2) 协议的实现

对嵌入式系统来说不需要实现所有的TCP/IP协议,本系统主要实现TCP/IP协议的TCP、UDP、IP、ICMP和 ARP等协议,主要实现的模块如图3中TCP/IP 协议栈的数据流向(虚线框的部分)。

ARP协议主要完成网络地址到物理地址的映射,该协议是网络中实现通信的基础。嵌入式系统中仅响应ARP请求,发送ARP回答包。ICMP协议负责传递差错报文以及其它需要注意的信息,且由ICMP首部8位的类型字段和8位的代码字段决定信息的种类。IP是TCP/IP协议族中最为核心的协议。IP 协议主要是校验 IP 报文头和实现ICMP、TCP协议之间多路复用功能。为测试网络的连通情况,实现了ICMP中类型号为0、代码为0的Ping应答协议。传输层采用了面向连接的可靠数据传输协议TCP,以确保远程数据可靠性要求。UDP协议是一种面向无连接的不可靠的协议。该部分实现对输入包的处理,判断其端口号、检验和是否正确。正确则将其交给相应端口的应用程序,不正确则丢弃;对从应用程序接收到的输出包,设置响应的源端口号和目的端口号,再交给IP层发送。TCP协议提供可靠的面向连接的数据传输服务。

4.  2  ENC28J60的驱动程序

本系统采用ENC28J60以太网控制芯片,需要编写网络设备驱动程序,以实现低层网络接口及硬件函数驱动。本文针对ENC28J60芯片的特点,对该程序做一下预处理以便进行可靠性设计和应用。

对驱动程序进行预处理:

#define MAC_TX_BUFFER_SIZE          (600)     //定义发送缓冲区的大小

#define MAC_TX_BUFFER_COUNT         (1)       //定义发送缓冲区的个数

#define LPC2200_CS_ENC28J60    0x00000800     //ENC28J60的片选信号P0.8

#define LPC2200_RESET_ENC28J60  0x00000200    //ENC28J60的复位引脚

此驱动主要完成ENC28J60网络芯片的初始化过程,主要函数void LpcCtlEncCInit(void),完成在LPC2214控制器中加载ENC28J60网卡芯片的配置信息,并实现ENC28J60的自检功能。其核心流程图,如图4所示。注:在设置ENC28J60的物理地址时应该注意的是ENC28J60的地址顺序是倒序的。

4.  3  系统主程序说明

图4   MacInit()程序流程图

 

图5  系统主函数TaskE( )的流程图

系统主任务主要完成申请动态IP地址,建立与远端中心的连接,以及数据的接收和发送等。首先对该主程序进行预处理:

定义SEVER服务器端和CLIENT客户端

定义协议特征字:其中包括uC/OS-II的任务ID号、uC/OS-II的任务优先级的分配和系统的事件操作指针,如:动态域名解析用到的信号量*DNSFlag;IP动态更新时用到的信号量*ConnectFlag,以及网络传输信息*EthNetMsgFlag等等。

系统工作主流程图,如上图5所示。

在这个流程图中主要调用的函数有:ModeSetTask()函数,完成系统通信接口的设置;EthNetTask()函数,完成主机与终端网口的通信任务;NetSetTask()函数,完成主机与终端串口的通信任务等。

五、结束语

μC/OS-II是近年来发展迅速的一个开放源码实时操作系统,但它只是一个实时的任务调度及通信内核,缺少对外围设备和接口的支持,如没有文件系统、网络协议、图形界面等。而随着以太网技术的深入发展,将嵌入式系统与网络结合,在嵌入式实时操作系统中引入TCP/IP协议栈,以支持嵌入式设备接入网络,成为嵌入式领域重要的研究方向,且对一些基于网络接口的数据采集系统与远程监控的任务系统都将具有广泛的应用前景。

本文作者的主要创新点:

1、提出了在嵌入式系统中运用以太网控制器ENC28J60的硬件及软件的设计思路;

2、将LwIP协议栈运用于ENC28J60+LPC2212/LPC2214的硬件平台上,同时该系统已经应用在LED显示等远程控制中,并取得了良好的效果。

参考文献

【1】《ARM嵌入式处理器结构与应用基础》.马忠梅等编著.  北京航空航天大学出版社.2002年出版

【2】朱华均. uC/OS-II 操作系统在ARM处理器上的移植 . 计算机工程, (软件技术与数据库)2004.12, 增刊 第30卷 64~124

【3】祁树胜 SPI接口以太网控制器ENC28J60及其应用, 微计算机信息 (嵌入式与SOC)2006 年第22 卷第8-2 期 266~268

【4】用TCP/IP进行网际互联第一卷:原理、协议与结构(第四版)  [美]科默(Comer,D.E.)著;林瑶,蒋慧等 译   北京:电子工业出版社

关键字:嵌入式系统  以太网  ENC28J60  LwIP 引用地址:ENC28J60在嵌入式系统接口上的设计与实现

上一篇:CAN总线在嵌入式Linux下驱动程序的实现
下一篇:基于S3C44B0X的Bootloader设计与实现

推荐阅读最新更新时间:2024-03-16 12:56

嵌入式系统开发要素的选择分析
摘要:主要讨论在嵌入式系统开发中,设计人员如何考虑和选择嵌入式处理器、嵌入式操作系统、调试器、仿真器以及开发人员的技术水平和结构比例等组成要素;同时,以实例说明如何选择这些开发要素。 关键词:嵌入式系统 嵌入式处理器 实时操作系统 仿真器 调试器 引 言   在计算机、互联网和通信技术高速发展的同时,嵌入式系统开发技术也取得迅速发展。这不仅表现在从事嵌入式系统开发研究的人员队伍日益壮大,嵌入式处理器和实时操作系统的性能增强和产品升级换代,更重要的体现在嵌入式技术应用范围的急剧扩大。   嵌入式系统拥有巨大的市场空间,我国应该抓住机遇,与时俱进,奋起直追,在嵌入式系统领域赶超世界先进水平。要达到这个目标,具有一定的现实可行性,这是因为
[嵌入式]
基于FINS协议的PLC与上位机以太网通信的实现
  0 引言   在现代工业自动化控制系统中,可编程逻辑控制器(PLC)作为常用的现场控制设备,上位机作为数据采集及人机界面的一种已经得到广泛使用。过去,在工程项目开发中,PLC和上位机间的通信常采用RS-232C或者RS-485串行方式,这种方法很难满足数据量大、通信距离远、实时性要求高的控制系统。随着互联网技术的发展、普及与推广,以太网技术得到了迅速的发展,其传输速率的提高和交换技术的应用,解决了以太网通信的非确定性问题,使得工业以太网能够广泛应用于工业信息控制领域,也是工业信息控制未来的发展趋势。   FINS(factory inteRFace network service)通信协议是欧姆龙公司开发的用于工业自动化控
[工业控制]
如何做一部基于STM32F4的手持式游戏机
这是在Hackster.io上发布的一个项目,基于STM32F4 Discovery板制作的游戏机。采用编写游戏的方式来学习嵌入式系统是比较好的方式,寓教于乐,培养成就感,并不需要学习完模电、数电就可以编程。 下面是这个项目的硬件部分,主要的器件: 一个STM32F4 Discovery板 一个3.2寸、320*240分辨率、带触摸的TFT LCD显示屏(ILI9341为控制器) 一个2轴游戏手柄 单通道2.5W D类音频放大器 一只4ohm,3W的喇叭 两个按键 其它电阻、二极管若干 原理图: 关于游戏手柄及按键的功能定义参见原文 - 点击左下角的“阅读原文”即可到达,在这里不再赘述。 下面是板子的正面和背面器件布局
[单片机]
如何做一部基于STM32F4的手持式游戏机
CAN 以太网接口电路设计图
CAN 以太网接口电路设计图 DP83848I 是工业级10/100Mb/s 单端低功耗以太网收发器。25MHz 时钟输出,智能降功 耗模式。可提供稳定可靠的优质网络服务,为工厂及其他恶劣的操作环境加设可支持实时传 输的以太网。芯片DP83848I 支持三种MAC 接口方式:(1)MII;(2)RMII (Reduced MII); (3)10Mb 串行网络接口(Serial Network Interface,SNI)。选用RMII 接口方式,通过设置pin39 高电平,pin6 低电平。引脚Pin27 置高,其使得DP83848I 以100Mbps 的速率工作。选用 16ST8515,其为网络隔离变压器,其主要是起
[模拟电子]
CAN <font color='red'>以太网</font>接口电路设计图
嵌入式系统中用芯片替代8032时应考虑的几个问题
DS80C320高速微控制器具有8051兼容的指令集,被设计为和传统的8032具有相同的引出脚和基本资源,但具有显著增强的性能和一些附加资源。由于指令集及引出脚相同, DS80C320可作为一个直接替代产品,应该说是嵌入式应用中的新技术,但在此之前,设计者必须考虑以下问题。 处理器速度 虽然DS80C320 100%兼容于8051指令集,为提升性能,指令的运行已被流线化。单字节指令原来需要12个时钟才能完成,现在则只需4个时钟。此外,DS80C320 可以接受速率高达33MHz的时钟,而很多版本的8032最大值为12MHz。由于这种性能的提高,在用DS80C320替代 8032时,必须考虑处理器速度. 由于DS80C320中基
[单片机]
基于CAN总线的现场设备控制管理系统
一. CAN总线的特点 CAN(Controller Area Network)总线协议最初是以研发和生产汽车电子产品著称的德国BOSCH公司开发的,它是一种支持分布式实时控制系统的串行通信局域网。目前,CAN总线以其高性能、高可靠性、实时性等优点,而被广泛应用于控制系统中的检测和执行机构之间的数据通信中。CAN总线具有以下一些技术特性: 1.多主方式工作,采用非破坏性的基于优先权的总线仲裁技术; 2.借助接收滤波可实现多地址的帧传送; 3.数据采用短帧结构,抗干扰性强,数据帧的信息CRC校验及其它错误检测措施完善; 4.发送期间丢失仲裁或由于出错而遭破获的帧可以自动重发; 5.严重错误时可自动关闭总线功能,以使总线其它操作不受影
[嵌入式]
赛灵思针对工业自动化简化实时以太网网络开发
全球可编程逻辑解决方案领导厂商赛灵思公司(Xilinx, Inc. (NASDAQ: XLNX))日前在德国纽伦堡召开的 2010 年全球嵌入式展览会(Embedded World 2010)上推出业界首款专门针对工业自动化系统设计优化的特定市场目标设计平台。该平台基于赛灵思低成本、低功耗 Spartan®-6 现场可编程门阵列 (FPGA),可加速实时以太网网络的开发,让让工业企业到工厂车间也能拥有高速连接和高可靠通信。 赛灵思Spartan-6 FPGA 是一款具有高成本效益、高灵活性的可再编程解决方案,可取代专用标准产品 (ASSP) 或专用集成电路 (ASIC)方案。目前工业设备开发商能通过单个 Sparta
[嵌入式]
如何分隔汽车以太网PAM3信号?以太网测试信号分离技术介绍
如何分隔汽车以太网PAM3信号 目前,有两种方法把主信号与从信号分开。 第一种是传统方法,要求用户断开或剪断汽车以太网电缆,插入定向耦合器来分隔和测试信号。这种方法在以最小干扰实现准确测试方面本身存在着缺陷。 第二种方法也就是泰克信号分隔方法,这是一种新方法,采用先进的软件和探头,非插入式分隔信号,用户可以更清楚地查看真实的信号。这种方法克服了传统定向耦合器方法的缺点。 下面我们将讨论并比较这两种方法。 1 定向耦合方法 如前所述,定向耦合器方法要求断开汽车以太网电缆,手入定向耦合器分隔信号。在系统级剪断电缆并不是一件易事,因此这种方法并不适合进行系统级测试。 通过这种方法,用户可以查看主信号和从信号,但它引入了插损和回损,很
[嵌入式]
如何分隔汽车<font color='red'>以太网</font>PAM3信号?<font color='red'>以太网</font>测试信号分离技术介绍
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved