位置:51电子网 » 技术资料 » 通信网络

轻量级TCP/IP协议栈OpenTCP的移植与应用

发布时间:2008/8/18 0:00:00 访问次数:731

  引言

  随着工业控制和计算机技术的发展,对数据的传输提出了更高的要求,各种总线技术的发展日新月异。

  其中,采用以太网技术完成数据的远程通信并连入internet,已经成为工业和家用领域的重要发展方向,将来几乎所有上业设备和家电均需要具有internet连接能力。目前,以mcu等构成的嵌入式系统已广泛应用于工业、家电等各个领域,嵌入式系统对网络应用的要求也越来越高,因此在嵌入式系统中实现tcp/ip协议,已经成为嵌入式系统领域的研究热点。

  传统的tcp/ip协议在资源有限的嵌入式系统中实现起来很困难,必须把大量的资源花在保证数据传送的可靠性以及数据流量的控制上,因而在实时性要求比较高的嵌入式领域中,不能满足实时要求。因此,研究并改进嵌入式tcp/ip协议栈以满足嵌入式系统的高性能要求,具有重要的现实意义。

  1硬件平台和opentcp简介

  1.1硬件平台

  该系统硬件部分由ade7758高性能电能计量芯片、arm处理器、2mbnorflash、64mbsdram和以太网接口等组成。ade7758内部集成了6路16位△-∑adc、高性能dsp、电压基准及温度传感器等电路,在1000:1动态范围内误差小于0.1%;提供有功、无功及视在电能,电压、电流有效值及波形采样等数据;三相三线/三相四线兼容;dsp内部对无功电能进行了补偿;提供独立的有功电能及无功电能脉冲输出,非常适合三相电能计量。被测三相电压、电流经传感器和调理电路后,送入ade7758的a相、b相、c相电压和电流输入端;经ade7758计算后,转换为有功功率、无功功率、视在功率、复功率等电能信息,数据通过ade7758的spi接口输出。mcu读出电能数据信息并处理后,送lcd显示和网络接口。硬件原理框图如图1所示。

  为了通过计算机远程监控电能数据,软件部分采用了opentcp作为协议栈完成数据通信。opentcp是英国vi-ola公司开发的用于8/16位mcu的源码开放的tcp/ip协议栈。与通用的嵌入式tcp/ip协议栈(如lwip、uip)相比,其代码更为精简,不需要操作系统的支持,可以根据需要进行裁剪,全部用ansic编写,支持ethernet、slip、arp、rarp、icmp、tcp、udp;应用层支持tftp、tel-net、http、smtp、pop3、dns等,对于应用层协议都提供callback接口,可方便用户的应用程序设计。

  1.2协议栈的特点

  通用计算机上运行的tcp/ip协议栈过于复杂,需占用大量系统资源,而嵌入式应用系统的资源往往都非常有限。因此,需要将传统的tcp/ip协议栈加以简化。在设计中opentcp为提高协议栈的运行效率,在保持高性能的同时,针对嵌入式系统的要求对tcp/ip进行了部分精简和优化,使其能在各种mcu体系结构上实现,减少对资源的消耗,以满足嵌入式应用的要求。具体特点如下:

  ①由于嵌入式系统对网络功能的要求各有不同,opentcp可以根据应用的要求选择必要的协议,缩减程序代码的大小和对数据存储器的占用。

  ②根据嵌入式系统应用环境的特点,一般其作为服务器端,与之通信的都是实现了完整tcp/ip的设备,通信较为可靠,不需要复杂的路由选择、ip分片、重装、tcp流量控制、拥塞控制等。因此,在opentcp中简化了tcp、ip等协议的实现,取消了所有的ip选项和tcp选项(包括ip的分段);tcp的流量控制窗口长度为1,即报文传输是基于停止一等待方式。避免了复杂的流量控制和分段处理,可以满足嵌人式网络应用的要求。tcp状态机也进行了一定的简化处理。

  ③opentcp针对tcp/ip协议中对性能影响最大的部分——缓冲区的管理进行了优化,采用零拷贝技术,即在网卡驱动程序和协议之间没有数据拷贝的过程,以减少对系统资源的占用,简化缓冲区的管理,提高实时性。

  tcp/ip具有层次性,每一层都有自己的数据格式。数据在各层之间传送时需要不断地进行打包和解包处理,以及数据的拷贝,会大大增加系统对存储器和运算能力的开销,降低系统的性能。在opentcp协议栈中,每一层都没有用于数据传输的缓冲区,协议栈之间传递的是数据指针。接收数据时,每一层将本层的数据处理完毕后,将处理过的数据指针指向上一层的数据的头部;发送数据时,也是以类似的过程来实现。

  为了减小网络对系统存储器的需求,采用静态分配技术,在网络初始化时静态分配数据缓冲区,设置专门的发送和接收缓冲区,大小一般大于网络的mtu值。该值可根据网络环境调整,在本系统中采用的底层网络接口为以太网,设置接收缓冲区大小为1500字节。当一个数据包来到时,网络设备驱动将其放在接收缓冲区里,调用tcp/ip协议栈。如果数据包里有数据,tcp/ip协议就会通知相应的应用程序。如果应用程序需要发送数据,opentcp的每一层协议都有自己的数据结构用于本层报文头部处理,发送缓冲区的只用来存放发送的数据。发送数据时,应用程序把数据写入缓冲区,设备驱动程序立即发送报文头部和数据到网络上。

  ④opentcp协议栈可

  引言

  随着工业控制和计算机技术的发展,对数据的传输提出了更高的要求,各种总线技术的发展日新月异。

  其中,采用以太网技术完成数据的远程通信并连入internet,已经成为工业和家用领域的重要发展方向,将来几乎所有上业设备和家电均需要具有internet连接能力。目前,以mcu等构成的嵌入式系统已广泛应用于工业、家电等各个领域,嵌入式系统对网络应用的要求也越来越高,因此在嵌入式系统中实现tcp/ip协议,已经成为嵌入式系统领域的研究热点。

  传统的tcp/ip协议在资源有限的嵌入式系统中实现起来很困难,必须把大量的资源花在保证数据传送的可靠性以及数据流量的控制上,因而在实时性要求比较高的嵌入式领域中,不能满足实时要求。因此,研究并改进嵌入式tcp/ip协议栈以满足嵌入式系统的高性能要求,具有重要的现实意义。

  1硬件平台和opentcp简介

  1.1硬件平台

  该系统硬件部分由ade7758高性能电能计量芯片、arm处理器、2mbnorflash、64mbsdram和以太网接口等组成。ade7758内部集成了6路16位△-∑adc、高性能dsp、电压基准及温度传感器等电路,在1000:1动态范围内误差小于0.1%;提供有功、无功及视在电能,电压、电流有效值及波形采样等数据;三相三线/三相四线兼容;dsp内部对无功电能进行了补偿;提供独立的有功电能及无功电能脉冲输出,非常适合三相电能计量。被测三相电压、电流经传感器和调理电路后,送入ade7758的a相、b相、c相电压和电流输入端;经ade7758计算后,转换为有功功率、无功功率、视在功率、复功率等电能信息,数据通过ade7758的spi接口输出。mcu读出电能数据信息并处理后,送lcd显示和网络接口。硬件原理框图如图1所示。

  为了通过计算机远程监控电能数据,软件部分采用了opentcp作为协议栈完成数据通信。opentcp是英国vi-ola公司开发的用于8/16位mcu的源码开放的tcp/ip协议栈。与通用的嵌入式tcp/ip协议栈(如lwip、uip)相比,其代码更为精简,不需要操作系统的支持,可以根据需要进行裁剪,全部用ansic编写,支持ethernet、slip、arp、rarp、icmp、tcp、udp;应用层支持tftp、tel-net、http、smtp、pop3、dns等,对于应用层协议都提供callback接口,可方便用户的应用程序设计。

  1.2协议栈的特点

  通用计算机上运行的tcp/ip协议栈过于复杂,需占用大量系统资源,而嵌入式应用系统的资源往往都非常有限。因此,需要将传统的tcp/ip协议栈加以简化。在设计中opentcp为提高协议栈的运行效率,在保持高性能的同时,针对嵌入式系统的要求对tcp/ip进行了部分精简和优化,使其能在各种mcu体系结构上实现,减少对资源的消耗,以满足嵌入式应用的要求。具体特点如下:

  ①由于嵌入式系统对网络功能的要求各有不同,opentcp可以根据应用的要求选择必要的协议,缩减程序代码的大小和对数据存储器的占用。

  ②根据嵌入式系统应用环境的特点,一般其作为服务器端,与之通信的都是实现了完整tcp/ip的设备,通信较为可靠,不需要复杂的路由选择、ip分片、重装、tcp流量控制、拥塞控制等。因此,在opentcp中简化了tcp、ip等协议的实现,取消了所有的ip选项和tcp选项(包括ip的分段);tcp的流量控制窗口长度为1,即报文传输是基于停止一等待方式。避免了复杂的流量控制和分段处理,可以满足嵌人式网络应用的要求。tcp状态机也进行了一定的简化处理。

  ③opentcp针对tcp/ip协议中对性能影响最大的部分——缓冲区的管理进行了优化,采用零拷贝技术,即在网卡驱动程序和协议之间没有数据拷贝的过程,以减少对系统资源的占用,简化缓冲区的管理,提高实时性。

  tcp/ip具有层次性,每一层都有自己的数据格式。数据在各层之间传送时需要不断地进行打包和解包处理,以及数据的拷贝,会大大增加系统对存储器和运算能力的开销,降低系统的性能。在opentcp协议栈中,每一层都没有用于数据传输的缓冲区,协议栈之间传递的是数据指针。接收数据时,每一层将本层的数据处理完毕后,将处理过的数据指针指向上一层的数据的头部;发送数据时,也是以类似的过程来实现。

  为了减小网络对系统存储器的需求,采用静态分配技术,在网络初始化时静态分配数据缓冲区,设置专门的发送和接收缓冲区,大小一般大于网络的mtu值。该值可根据网络环境调整,在本系统中采用的底层网络接口为以太网,设置接收缓冲区大小为1500字节。当一个数据包来到时,网络设备驱动将其放在接收缓冲区里,调用tcp/ip协议栈。如果数据包里有数据,tcp/ip协议就会通知相应的应用程序。如果应用程序需要发送数据,opentcp的每一层协议都有自己的数据结构用于本层报文头部处理,发送缓冲区的只用来存放发送的数据。发送数据时,应用程序把数据写入缓冲区,设备驱动程序立即发送报文头部和数据到网络上。

  ④opentcp协议栈可

相关IC型号

热门点击

 

推荐技术资料

耳机的焊接
    整机电路简单,用洞洞板搭线比较方便。EM8621实际采... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!