基于 uIP的通信路由控制器的设计

2010-09-13 03:44克磊陈小平
通信技术 2010年11期
关键词:寄存器以太网数据包

克磊, 陈小平

(苏州大学电子信息学院,江苏 苏州 215006)

0 引言

随着嵌入式系统的迅猛发展,越来越多的嵌入式装置需要相互连接起来以更好的发挥作用,传统的嵌入式装置利用现场总线或其他特殊的协议实现相互通信[1]。然而,由于连通的有限性,这些网络不能实现对 Internet的无缝对接。设计的嵌入式网络路由控制器以 ARM Cortex-M3微处理器LM3S6965为核心,利用其内置以太网媒体访问控制器,成功移植了 uIP协议栈,实现客户端与服务器的 Internet的无缝连接。

1 通信路由控制器硬件设计

通信路由控制器设计框图 1所示,目的是将 uIP协议栈移植到嵌入式系统中,使其能够在通信双方规定协议的基础上,实现与综合通信系统的网络通信,并能通过操作按键控制综合通信系统的工作模式,设置通信侧路由。指示系统的工作状态,包括通信侧连通状态,流量统计。

图 1 通信路由控制器设计方案

1.1 以太网控制器

LM3S6965以太网控制器由一个完全集成的介质访问控制器(MAC)和网络物理(PHY)接口器件组成[2]。以太网控制器遵循IEEE802.3规范,完全支持 10BASE-T和 100BASE-TX标准。MAC层和PHY层分别与ISO模型的第 2和第 1层相对应。以太网控制器的基本接口是到 MAC层的一个简单总线接口。MAC层提供了以太网帧的发送和接收处理。MAC层还通过一个内部的媒体独立接口给 PHY模块提供接口。PHY层负责与以太网的数据通信。以太网控制器基本结构如图 2所示。

图 2 以太网控制器结构

1.2 网络隔离变压器与ARM的连接

LM3S6965以太网控制器模块遵循 10BASE-T/100BASETX IEEE802.3标准,只需要一个双路隔离变压器就能与网络相连[2]。这里采用了一款带滤波功能的网络隔离变压器。

图 3为网络隔离变压器的接口电路图。图中右侧所标TX+、TX-、RX+和 RX-引脚分别与网络水晶头连接;左侧所标 TXOP、TXON、RXIP和 RXIN引脚分别接至 LM3S6965以太网控制器各数据通信端口,其中 TXOP和 TXON表示以太网控制器数据输出差分信号,RXIN和RXIP表示数据接收差分信号;另外 PHY还支持 2个 LED信号,用来指示以太网控制器操作的各种状态,这两个信号对应 LED0和 LED1引脚。

2 uIP协议栈的体系结构

uIP是瑞典计算机科学研究所 Adam Dunkels开发的。uIP的体系结构如图 4所示,uIP处于网络通信的中间层,其上层协议称之为应用程序,下层硬件和其它固件称为网络设备驱动[3],此处由LM3S6965内置以太网控制器构成 ISO模型的物理层和数据链路层。这样就屏蔽了下层硬件的处理细节,为上层应用提供一个统一的接口。在实际的应用中用户只要根据自己的需要编写相应的应用程序来实现具体的应用要求而不必过多地考虑硬件接口问题。

3 通信路由控制器软件设计

通信路由控制器软件设计的总体思想是:首先进行系统初始化,包括 LM3S6965系统时钟、IO端口、定时器、液晶以及看门狗等初始化工作;然后配置以太网控制器寄存器,编写网络设备驱动;其次移植uIP协议栈,运用其丰富的接口函数处理数据包;最后根据功能需要编写用户应用程序。

3.1 以太网控制器驱动程序的编写

图 3 网络隔离变压器的接口电路

要使用以太网控制器,外设必须通过置位 LM3S6965的运行模式时钟选通控制寄存器 RCGC2的 EPHY 0和 EMAC0位来使能。然后,使用以下步骤来配置以太网控制器。

图 4 uIP协议栈体系结构

①编程管理分频寄存器MACMDV在内部 MII上获得一个 2.5MHz的时钟;

②编程单个地址 0寄存器 MACIA0和单个地址 1寄存器MACIA 1进行地址过滤;

③使用值 0x16编程发送控制寄存器 MACTCTL,实现自动 CRC产生、填充和全双工操作;

④使用值 0x08编程接收控制寄存器 MACRCTL来拒绝带有坏 FCS的帧;

⑤通过置位 MACTCTL和MACRCTL寄存器的LSB来使能发送器和接收器。

图 5为以太网初始化程序设计流程图。

图 5 以太网控制器初始化流程

以太网控制器发包过程为:发送一个帧,就使用数据寄存器 MACDATA将该帧写入缓存 TX FIFO;然后置位发送请求寄存器 MACTR的NEWTX位启动发送过程;当 NEWTX位被清零后,TX FIFO就可用于下个帧的发送。

以太网控制器收包过程为:接收一个帧,就必须等到帧包数目寄存器MACNP的NPR域为非零值;然后使用 MACDATA寄存器开始将帧从缓存RX FIFO中读出;当帧被读取后,NPR域的值减 1;当RX FIFO中没有帧时,NPR将读出为零。

以太网控制器接收发送数据包流程如图 6、图 7所示。

图6 以太网控制器接收数据包

3.2 uIP协议栈的数据包处理

图 8详细地描述了uIP是如何处理数据包。其中,宏定义UIP_CONNS表示同时开通的 TCP连接最大值;函数 uip_arp_ipin()表示对即将到来的 IP包的 ARP处理;函数 uip_arp_out()表示向外发送的 IP包的伪以太网报头并确认是否需要发送 ARP请求[4];函数 EthernetPacketPut()表示通过 Ethernet MAC方式发送数据包。

图8 uIP数据处理流程

3.3 应用程序的设计

通信路由控制器作为客户端与综合通信系统服务器实现Internet无缝连接,基于 uIP协议,以IP数据包的格式与通信主机按照规定协议进行定向网络通信,所涉及的网络数据主要分为服务器通信模块各端口的状态与流量信息,以及网络路由控制器发送给服务器各通信端口的路由控制字。

通信路由控制器功能流程如图 9、图 10和图 11所示。

图 9 状态监控流程

图10 手动控制路由流程

图 11 自动分配路由流程

应用程序将uIP协议栈作为一个主程序运行在一个单系统任务中,主控制循环重复做两件事,一是检查从网络中发过来的数据包,二是检查周期计时是否发生。当有网络事件或计时事件发生时,uIP会调用 UIP_APPCALL()对事件进行处理[5]。为了将用户的应用程序挂接到uIP中,程序设计中将宏 UIP_APPCALL()定义成实际的应用程序函数名 tcp_appcall()。

当客户端需要监测服务器各端口状态流量时,必须先根据双方规定协议调用 uip_send()接口函数定时发送请求命令字给服务器端,当服务器收到请求后再以规定IP包格式返回包含流量信息数据,应用程序在 main函数对数据处理;当网络路由控制器需要对服务器各端口通信路由进行手动控制分配时,同样根据协议,结合按键发送相关控制字,通信主机根据控制字分配路由。

4 结语

通信路由控制器特点是直接利用LM3S6965内置以太网控制器模块,成功移植了精简TCP/IP协议uIP,并在此基础上编写控制通信路由的用户应用程序,使其构成符合 TCP/IP通讯协议规范的4级层次结构,使嵌入式系统自己实现网络通信的功能,从而能进一步实现对网络通信的控制。不仅为基于uIP协议栈的嵌入式网络通信控制提供了一个切实可行的廉价解决方案,而且同样适用于远程监测,如列车报站、报警装置。

[1]彭少熙,孙政顺,杜继宏.家庭网络中的嵌入式 Internet方案[J].电子技术应用,2001,27(10):47-50.

[2]周立功.ARM Cortex-M3开发指南[M].广州:广州致远电子有限公司,2008.

[3]张永涛,黄丹丹,李欧.uIP协议分析及其应用[J].信息工程大学学报,2006,7(02):147-149.

[4]宋素萍,邵明省.基于AVR的VoIP数据传递设计[J].通信技术,2008,41(09):218-220.

[5]吴志华,申功勋,唐李征,等.嵌入式GPS由GPRS接入Internet的实现[J].微计算机信息,2007,23(03):256-258.

猜你喜欢
寄存器以太网数据包
二维隐蔽时间信道构建的研究*
STM32和51单片机寄存器映射原理异同分析
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
Lite寄存器模型的设计与实现
SmartSniff
谈实时以太网EtherCAT技术在变电站自动化中的应用
浅谈EPON与工业以太网在贵遵高速公路中的应用
万兆以太网在连徐高速公路通信系统改造中的应用
Lx5280模拟器移植设计及实施