基于ARM的嵌入式TCP/IP协议的实现

发布者:bluepion最新更新时间:2012-09-26 来源: 21IC 关键字:ARM  TCPIP协议  嵌入式 手机看文章 扫描二维码
随时随地手机看文章

在网络应用日益普遍的今天,越来越多的嵌入式设备实现Internet网络化。TCP/IP协议是一种目前被广泛采用的网络协议。嵌入式Internet的技术核心是在嵌入式系统中部分或完整地实现TCP/IP协议。由于TCP/IP协议比较复杂,而目前嵌入式系统中大量应用低速处理器,受内存和速度限制,有必要将TCP/IP协议简化。


1 TCP/IP协议的实现

嵌入式TCP/IP协议一般实现:ARP/RARP、IP、ICMP、TCP、UDP、HTTP、SMTP、FTP、TELNET等协议,协议处理的主要流程如图1所示。

1.1 TCP协议的实现

工业控制领域传输层采用TCP协议、不用UDP协议,是考虑到实时监控系统中传输量并不大,而可靠性要求较高。TCP协议是面向连接的、端对端的可靠通信协议。它采用了许多机制来保证可靠传输,应用于嵌入式系统显得过于复杂。

TCP协议数据传输可分为三个阶段:建立连接、传输数据和断开连接。它的实现过程可以用状态机来描述。建立连接有两种方法,即主动打开和被动打开。服务器端是一种被动打开,它一直在侦听连接请求;而客户端是一种主动打开,它发送连接请求以建立连接。研究发现,如果TCP层的上层实现服务器端的应用,可以将标准TCP状态机建立连接过程中客户端建立连接的状态机部分简化掉。同理,如果应用是基于客户端的,可以将服务器端建立连接的状态机部分简化掉。断开连接有两种方式:一是主动断开连接;另一是被动断开连接。被动断开连接的处理较为简单,但标准TCP协议的主动断开连接的状态机部分过于复杂。经过实验发现,在需要主动断开连接的时候,发送一个Fin数据报;接收到对Fin数据报的确认后,再发送一个Reset数据报,即可顺利完成一次主动断开连接。

标准的TCP协议使用慢启动的滑动窗口机制。滑动窗口是一种在流量控制和网络传输效率之间折中的方案。它允许发送方在等待一个确认之前发送多个窗口,其确认是一种批量的确认。研究滑动窗口协议发现,滑动窗口的一个极限情况,是只使用单个窗口,就变成了一种简单确认的处理方法。使用该方法后,所有的处理只是对单个数据报的发送和确认,节约了系统的资源,也使维护更加方便。为了协议的兼容性,需要通信的另一方也使用简单确认方法。因为如果对方使用较大的窗口,就可能造成处理器被淹没。这个问题可以通过设置待发送数据报的TCP头部的Windows字段的大小解决。

在上述基础上,简化实现TCP协议的流程图如图2所示。其中“不同状态的相应处理”指根据接收到的TCP报文准备待发送数据报并将其发送到以太网上。这部分根据TCP所处的不同状态,所做的处理是不一样的。

1.2 IP协议

IP协议是TCP/IP的基础,为不同网络的主机之间发送数据报的操作序列提供无连接服务。通过在数据报前添加IP协议头,使每个数据报具有寻址能力。嵌入式系统只把IP作为传输工具,进行简化以完成主要的操作。得到IP包后,检验IP头部的版本、目的地址、校验和正确否,解析出协议类型字段,由此交给相应的高层协议处理。发送IP包时,将缓冲区内的源地址与目的地址互换,设置校验和,然后交给下层协议处理。不符合要求,则将此包丢弃。IP包最大可以为65KB,可以分段传输,而在嵌入式系统里根本无法容纳如此大的数据包,因此一般不支持分段传输。所以限制MCU发送和接收数据包的方式以避免分段传输,从而减少程序复杂度。

[page]

    1.3 其它协议

ARP协议为32位IP地址到对应的48位以太网地址之间提供动态映射。嵌入式系统中仅响应ARP请求,发送ARP回答包。请求者广播出包含ARP请求的以太帧、目的以太网地址为全1的广播地址。本机收到后,由目的IP地址发现自己是目的主机,发送一个ARP回答。ICMP通过IP协议传输其报文。IP协议是无连接的,它无法将报文和错误信息传到最初的主机,ICMP将状态信息和错误信息发送到发报文的主机。

2 前端设备的系统设计

TCP/IP协议扩展到工业控制级,将企业内部计算机网络应用于工业现场实时信息的发布和显示,通过Internet浏览器对现场工业信息进行动态监视。下面是笔者在某公司一分布式监控系统中的应用实例。基于TCP/IP协议的前端设备系统软件结构如图3。前端嵌入式设备处理器是Samsung公司的S3C4510B(ARM核)。该芯片是用在基于以太网系统的高性价比、高性能的16/32位RISC微控制器。通信部分采用BNC接口方式,信号输出经耦合隔离变压器由RJ45接头联入集线器,此外还设计了液晶显示和键盘输入当地接口功能。

在TCP/IP协议中多处用到超时和重发机制。这种机制对于确保两个或多个彼此独立的通信结点从通信错误或故障状态自动恢复到正常状态是非常有效的,但也增加了软件结构的复杂性。因为对超时的处理通常独立于正常程序流程,也就是与正常的程序流程异步。要实现的TCP/IP协议软件中有四处要用到定时器:第一是在ARP高速缓存的维护中,被添加到ARP高速缓存中的表项在一段时间后要置为无效;第二是在等待对发出的ARP请求返回响应时,可能会在指定的超时时间内还未收到返回的响应;第三是在IP组装收到分片时,由于部分分片在一定时间内没有收到而丢弃整个IP包;第四是在TCP等待接收方对数据段的确认时。如果在指定时间内还未收到对某个数据段的确认,需重新发送。从上述可见,要实现的定时器具备以下特点:

·对定时的精度要求都不是很高,基本都是秒级的精度。这样,完全可以稍滞后一些来处理定时器超时,不把超时处理放在时钟中断处理程序中。

    ·对同一类超时处理可以由同一处理程序来完成,只是传入到相应的处理程序中的参数不同而已。例如一个ARP高速缓存中的表项超时时,需要将其置为无效,可以统一用一个处理程序,参数中放入相应的表项地址即可。

首先,定义一定时器的数据结构,如图4所示。每一类超时都是由一个超时控制块和其所属的一个由超时事件项组成的链表管理。整个链表按超时事件将要发生的时间顺序排列,先发生的超时事件排列在前。超时控制块中的head_ptr用以指向一个超时事件项链表的首项;timeout_process是超时事件发生时处理程序的入口地址。在每个超时事件项中,next_ptr指向链表中的下一项;relative_time是本表项的超时事件相对于上一表项的超时事件发生的相对时间。所以某个表项表示的超时事件距离当前的时间是它以前所有表项(包括自身)中的relative_time的和。relative_time的基本单位是granularity。

    定时器任务使用一个信号量作同步。信号量有两个变量:count和waiting_task。count对事件计数,当count大于0时,表示有count个事件发生并等待处理;当count小于0时,表示有某个任务在等待事件的发生,此时waitint_task保存相应任务控制块的地址。信号量有两个操作:sem_up和sem_down。sem_up首先使count加1,然后看count是否为0,若为0表示有任务在等待,通过waiting_task中记录的任务控制块的地址把等待任务的状态设为就绪,否则返回。sem_down首先使count减1然后看count是否小于0,若小于0会使当前任务成为等待状态并引发任务管理器对任务的调度,否则返回。

每当时钟中断服务程序计数到granularity个时钟中断,给定时器任务使用的信号灯作sem_up操作。当定时器任务被调度执行时,它遍历每一个超时控制块,对每一个超时控制块作如图5所示的处理,最后对信号灯调用sem_down。

关键字:ARM  TCPIP协议  嵌入式 引用地址:基于ARM的嵌入式TCP/IP协议的实现

上一篇:32位ARM内核微处理器W90N740及其应用
下一篇:32位ARM核微处理器芯片PUC2030A及其应用

推荐阅读最新更新时间:2024-03-16 13:09

基于ARM的车辆工况信息采集终端的设计
摘要:为能对野外作业的车辆实时定位并精确把握其工作状况,本文在深入研究GPS定位、CAN总线和GPRS数据无线传输等技术的基础上,设计了一款基于ARM处理器的车辆工况信息采集终端。该终端可实时获取车辆位置信息、定时读取车辆工况信息并实时上传至远程监控中心,同时具备人机交互界面和语音通话功能。试验测试表明,该车辆工况信息采集终端运行稳定,达到了预期效果。 近年来,随着国III标准的强制执行,为达到该标准对柴油机燃油经济性和排放效果的要求,电子控制技术在柴油机控制中得到快速应用和发展。为能实时监测以电控柴油机作为主要动力的机车的位置和运行状况数,本文应用GPS定位技术、CAN总线技术和GPRS数据无线传输技术,以基于ARM架构的
[单片机]
基于<font color='red'>ARM</font>的车辆工况信息采集终端的设计
Spansion采用CryptoFlash安全平台
  Spansion已获得了Discretix的CryptoFlash™安全平台的使用授权,用于集成到其MirrorBit® HD-SIM™解决方案。Spansion和Discretix正在设计一套全新的多芯片MirrorBit HD-SIM解决方案。   Discretix销售和业务开发部门执行副总裁Edo Ganot表示:“随着多媒体手机,新的无线应用和内容功能的迅速普及,安全性已经成为2008年手机市场最重要的需求之一。通过将CryptoFlash技术的先进性能与Spansion的MirrorBit HD-SIM产品系列相结合,我们能够凭借受保护的存储技术,为无线市场提供更多解决方案。”   除MirrorBit HD-
[新品]
ARM的存储器映射与存储器重映射
1.存储器映射:处理器产生的地址按其某种规则转移到具体的物理地址;用户可见的,开机后固定不变的。 2.存储器重映射:重新修改局部(64字节异常向量表);可选操作,稳定运行时由用户需要进行改变(用户程序)。 MEMMAP=0:开机默认值,Boot装载模式----向量表(0x00000000-0x0000003c)映射的是BootBlock中的0x7FFFE000-0x7FFFF03c中的值;芯片复位时,启动boot装载程序,boot装载程序检查P0.14口的状态和用户的异常向量,判断是进入ISP状态还是启动用户程序,若启动用户程序,则自动设置MEMMAP=1(片内flash启动)或3(片外程序存储器启动)。 MEM
[单片机]
基于DSP ARM的并联有源电力滤波器控制器
引言   近年来,随着电力电子设备及非线性、冲击性设备的广泛应用。在电网中产生的谐波对电网系统造成了严重的污染,因此消除电网中的谐波污染已成为电能质量研究的一个重要课题。目前普遍采用的并联型无源滤波器存在着滤波效果差,对电网参数敏感。元件体积庞大。严重时会导致串并联谐振事故等缺陷。采用现代电力电子技术、数字信号处理(DSP)技术和先进控制理论的有源电力滤波器(APF)技术㈣对电网谐波进行动态实时补偿。是目前解决谐波污染问题最有效和最具潜力的途径。   传统的并联型APF的控制方法大都基于瞬时无功理论、自适应理论等计算测量方法,首先计算出负载电流中的谐波成分,然后根据计算出的谐波电流值。分别进行补偿电流和直流侧电容电压的控制。这
[单片机]
快速学Arm(4)--ADS编译方法
看了一天书,琢磨怎么把一个可用的demo下载到LPC2400开发板中并运行起来,争取把环境调试通,这样就可以边学边练了.由于没有搞清楚ASD中的一些配置参数,始终没有做到.为了节约时间,还是请有经验的同事帮了个忙,把环境试验成功了. 那么我们要使用的软件工具有这样几个: 1. ASD1.2 2. H-JATG V0.7.0 BETA.EXE 或者 FlashMagic.exe 先将一下ASD1.2的编译: 1. 要使用 2400光盘中自带的Sample来试验,例如出厂演示目录中的Sample: 2.使用ASD打开项目文件:SmartARM2400_demo.mcp 在点击编译按钮时,我们可能会遇到报错
[单片机]
快速学<font color='red'>Arm</font>(4)--ADS编译方法
基于嵌入式Linux的LCD背光调节及驱动的实现
0 引言 在手持式设备中,液晶显示屏的使用越来越广泛。由于LCD自身是不能发光的,它需要一个强劲的光源来给它提供背光,以便清晰地显示信息。这样的光源是非常耗电的,通常液晶显示屏的功耗常常占到系统总功耗的60%以上。以群创的7寸屏为例,通常背光灯的功耗为2.5 W,而LCD的功耗只有0.825 W。由此可见,背光光源的功耗在整个电源中的比重是相当高的。如果系统在不用显示屏时,也全功率的运行,系统的电池能量将很快被耗光。所以,调节LCD的背光源,降低系统在不用显示屏时的能耗是十分必要的工作。另外,由于手持式设备工作环境的变化,也需要根据外界光线强度的变化,对背光的亮度做出相应的调节,以适合人眼观看的舒适度。 基于上述2种原因,考虑到设
[单片机]
基于<font color='red'>嵌入式</font>Linux的LCD背光调节及驱动的实现
基于USB的ARM仿真器的研究与设计
基于JTAG仿真器的调试是目前ARM开发中采用最多的一种方式。大多数ARM设计采用了片上 JTAG 接口,并将其作为测试、调试方法的重要组成。JTAG仿真器通过ARM芯片的JTAG边界扫描口与ARM CPU核通信,实现了完全非插入式调试,不使用片上资源,不需要目标存储器,不占用目标系统的任何端口。由于JTAG调试的目标程序是在目标板上执行,使得仿真更加接近于目标硬件 。 目前针对嵌入式系统开发的调试工具品种繁多,如ARM公司的AXD debugger软件与Mutil-ICE仿真器等。但是大部分嵌入式调试工具价格过高,因此设计实现一种速度快、性能稳定、价格低廉、易于实现的ARM调试工具是十分必要的。 1 ARM JTAG调试原
[单片机]
基于USB的<font color='red'>ARM</font>仿真器的研究与设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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