APP下载

基于TI 28335平台上的TCP/IP协议

2012-03-15

电子世界 2012年11期
关键词:应用层服务器端网卡

北汽福田股份有限公司诸城奥铃汽车厂 张育红

一、引言

在许多工业设备中,由于考虑的数据传输速度的问题及其现在以太网的网速越来越高,技术越来越成熟,很多工业设备已经考虑用以太网通信协议,从而代替串口通信。在以太网通信中,由于TCP/IP协议具有可重传和应答机制,UDP协议不需要应答。所以TCP/IP协议的应用更加受人们的青睐。

二、TCP/IP通信协议的结构

1、表1是TCP/IP在网络7层结构中的位置。

表1 TCP/IP在网络7层结构中的位置

TCP/IP协议在上面的7层中用到了其中的五层。

1)应用层,可以根据自己的需要进行设计,不一定是Telnet,FTP,email。在工业应用中可以是MODBUS协议或者其他的协议,根据需要来决定。应用数据在TCP/IP数据包中在链路上传输,通信双方需要进行数据解析和数据打包的工作。

2)运输层,主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。

TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。其他层是保证数据传输正确的一个通道传输。

而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种运输层协议分别在不同的应用程序中有不同的用途。

3)网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。

ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。尽管ICMP主要被IP使用,但应用程序也有可能访问它。我们在通信建立连接后通常会用到ping指令来访问另一台主机是否建立连接,ping就是用了ICMP协议。

ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。通信双方,客户端知道服务器端的IP地址,但是不知道对应的物理地址(MAC地址),就发送一条ARP请求协议,服务器端看到是自己的IP地址,就发ARP应答数据给客户端,至此,双方的IP地址和MAC地址都是互知的。

2、具体到实际应用中TCP/IP协议在嵌入式系统中如何封装和分用。

A、数据封装。

图1的1-5数据进行层层封装最后通过链路发送。下面具体解释。

图1

图2 硬件框图

1)在一个嵌入式产品中,比如仪表型产品,需要把仪表的测量信息通过TCP/IP协议送到后台的控制软件那里进行汇总,仪表本身测量到一些基本信息,比如电流,电压等这些就是属于用户数据。

2)用户数据直接发送到服务器端,服务器是不知道什么意思的,一堆数字无法解析。在仪表通信中常用的MODBUS协议将数据进行一次封装。这样数据发送到服务器端,服务器根据MODBUS协议可以知道是那些具体信息。这就是应用层数据的首部信息。

3)应用数据准备OK后,当应用程序用TCP传送数据,数据被送入协议栈中,首先到得是传输层,TCP协议会给应用数据增加自己的TCP首部。形成TCP段。TCP首部有20个字节。

4)形成TCP段传输到网络层,IP协议会给数据增加IP首部,IP首部也是20个字节。形成IP段。

5)IP段数据传输到数据链路层,数据链路层将自己的以太网首尾部信息增加到数据上,就完成了数据的全部封装。数据发送到链路上进行传输。

B、数据分用。

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用。直到应用层数提取出来。

图3

三、硬件环境

我们现在用TI公司的TMS28335与亚信公司的AX88796B来设计。由于TI的DSP技术比较成熟,运算速度快可以达到150MHz,支持浮点运算,外设比较丰富几乎包括所有的外设接口。目前很多工控产品用这款芯片。同时由于现在很多工控产品已经倾向于用以太网进行数据的快速交换。AX88796B性价比高,支持全双工,100M流量,完全满足我们的设计需求。

如硬件框图图2。对XZCS0和PWMA6信号线进行分析。

XZCS0作为片选信号。由于AX88796B是映射到TMS28335的某个外设地址(External Memory)的,可以在XZCS0,XZCS6,XZCS7之间任意选择一个位置来映射。

PWMA6是TMS28335做外部中断的一个脚。与AX88796B的外部中断输出脚相连。网卡芯片接收到外部数据后存放在网卡芯片缓冲环中,会产生一个外部中断信号。TMS28335接收到这个中断信号以后就接收数据,从网卡芯片缓冲环中将数据读取到TMS28335中,进行TCP/IP协议处理。AX88796B就是七层结构中的物理层。

四、以太网移植UIP协议的过程

uip是专为8位和16位的嵌入式微控制器设计的微型TCP/IP协议栈,uIP提供了网络通信所必须的协议,本身代码和占用的内存数都非常少-uIP的源代码只有几KB,RAM占用仅几百字节。总的内存占用将依赖:分配了多少个TCP链接数,分配了多少个ARP表项,分配了多大的包缓冲。这些在编译时候可以设置。每一个正在监听的TCP端口增加额外的2个字节内存。

1、下面是我们项目的配置

#define UIP_ARPTAB_SIZE 10

(分配了10个ARP表项)

#define UIP_BUFSIZE 297

(一个297字节大小的包缓冲)

#define UIP_CONNS 10

(10个TCP连接数)

#define UIP_TIME_WAIT_TIMEOUT 60

(定义超时时间为60个时钟节拍)

2、软件处理流程

在硬件设计的时候配置了一个外部中断IO口,所在如果网卡收到数据会触发一个中断,TMS28335通过执行interrupt void XINT1_ISR(void)这样的外部中断来处理数据包。代码示例。考虑到中断不可能处理太多东西,要不占用资源太多,影响CPU的正常工作,所以在中断里面只进行读网卡芯片数据的过程。在这个中断里面再使能另一个中断,当读网卡芯片的中断退出来后通过中断优先级的分配,进入到PieCtrlRegs.PIEIFR10.bit.INTx1=1所使能的中断中执行TCP/IP的数据处理,这个中断的优先级比较低。

在新开的这个低优先级的中断里面进行协议处理,代码如下:

另外还有一个定时中断处理,每隔500毫秒秒调用一次。这个中断中主要做2件事情。第一是轮训UIP_CONNS定义的连接,判断是否有连接超时时间到,如果到就关闭连接,该连接的资源空出来。第二件事情就是每隔10秒钟将UIP_ARPTAB_SIZE个长度的ARP缓冲表的数据清空。然后在正常收到TCP/IP协议数据的时候再进行数据更新。

3、UIP下载包各个文件功能描述

Uip.c——是主要的处理TCP/IP协议的文件。

其中函数Void uip_process(Uint16 flag)是协议处理程序的入口处。

Uip_arch.c是IP数据包进行校验和计算

Uip_arp.c是ARP请求处理的函数

Uipopt.h是TCP/IP协议配置的宏定义

由于协议包里面的内容基本不用怎么改变,只要把外部的配置调整好,写好网卡驱动程序,编译就可以调试了。通过PING指令可以PING到局域网内的其他主机。或者是与应用程序配套的TCP/IP协议都是可以通信正常的。

五、结束语

UIP协议栈的成功移植,再配合MODBUS TCP/IP协议的应用,我们的工控产品可以快速的和其他设备进行快速的通信。比之485通信速度高了很多,优势明显。

猜你喜欢

应用层服务器端网卡
Linux环境下基于Socket的数据传输软件设计
Server 2016网卡组合模式
浅析异步通信层的架构在ASP.NET 程序中的应用
基于分级保护的OA系统应用层访问控制研究
基于Qt的安全即时通讯软件服务器端设计
新一代双向互动电力线通信技术的应用层协议研究
物联网技术在信息机房制冷系统中的应用
挑战Killer网卡Realtek网游专用Dragon网卡
RHEL7 Network Teaming(网卡绑定)配置与测试
Current advances in neurotrauma research: diagnosis, neuroprotection, and neurorepair