基于8位单片机的TCP通信速度研究
进行分析。对于发送100 B的数据,外界晶振为12M的51单片机,其一个机器周期为1μs。典型的打包代码(包括TCP包和IP包)的执行总周期约为2 200个机器周期(具体大小与编写软件所使用的语言和编译器有关),用时为2.2 ms。
其次是数据备份。TCP协议需要超时重发,因而备份已发出而未收到确认的数据分组是必要的。这里的耗时与数据量和主频以及数据本备份的存储器类型有关。对于100 B数据和40 B的头部(包括TCP包的20 B头部和IP包的20 B头部),总共140 B的数据备份,采用外部存储器,典型代码的执行周期为1 130个机器周期,用时为1.13 ms。
再次是发送数据分组。这里的耗时也与数据量和主频有关。典型发送分组代码的执行总周期为2 200个机器周期,耗时为2.2 ms。
最后确认分组。这里要做的工作有:检测接口芯片,判断分组类型,拆分IP包,拆分TCP包,典型代码的执行周期为4 130个机器周期,用时4.13 ms。
总共用时9.66 ms,其中接受确认分组耗时最多,占总用时的42.8%。
3 改进后的TCP通信方案
由上面分析可以看出,对于小分组来说,接收确认分组的过程比较复杂,因而耗时也最多。因而控制服务器确认分组的发送数量,成为提高效率的关键。
研究发现通过调整Nagle算法的延时时间(每个接口的延迟ACK定时器可通过设定注册表表项TCPDelAckTicks 的值 (HKLM \ SYSTEM \CurrentControlSet\Services\Tcpip\Parameters\Interface\)来调整,该注册表表项在MicrosoftWindows NT 4.0 Service Pack 4中首次引进)和采样单片机的发送流程来控制服务器发送确认的数量。
如图4所示,这里发送数据分组并没有等待确认分组这个过程。当有确认到达时,所做的工作正常情况下和图3所示的系统没什么区别,只是在当丢失了分组后的异常状态出现后,才在更新连接状态时处理了超时检测和出错重发等事件。之后在数据打包后也没有备份,这里是采用了大存储器数据偏移技术,也就是说在一个分组的确认未到达时,其原始数据是不会被覆盖的,新的分组打包在其后的内存单元中,这样就节省了数据备份所消耗的时间,不过无形中增大了对内存的需求。但本应用针对的是小分组情况,所以实际需求的内存并不大。实际工作中,为了使系统稳定工作,应建立2个TCP连接,一个用于服务器(上位机)发送控制命令和进行参数设定使用,一个用于客户机(下位机)上传采样数据使用。虽然TCP可以双向传送数据,可实际工作中,发现这样在高速通信下出错率比双连接单向数据通信要高出许多,主要是因为客户机(下位机)对TCP头部的确认号和序列号的调整容易出错所致。实际使用3~5个采样分组发送一个确认分组。因为延时太短体现不了效率的提高,但延时太长,如果出错,将产生大量重发分组的情况,影响网络性能,同时也增大了对内存的需求量。通过使用Snifferr软件进行监听比较,在同样的采样速率下,在改进前,发送包速率为500packet/s,接收确认包速率为500 packte/s,出错率5%,持续传输时间小于2 h;改进后,发送包速率为500 packet/s,接收确认包速率为183 packet/s,出错率小于0.1%,持续时间大于48 h。同时,同样的硬件条件下,理论上可以进一步提高采样速率。
4 典型应用
对于高速、低数据量的采集或测控系统,如石油管道的查漏和修复系统,要求高速采集对管壁的超声波扫描信号,通常结合温度、压力、深度和角度信号为一组采样信号,其总量不足20 B。这些系统要求高的采样速率,但每次采集的数据并不多,这就产生了大量小的数据分组,这些小分组将迅速降低系统性能和网络性能。采用本方案,可以较好地解决这些问题。
5 结 论
本文通过对TCP协议具体低层实现过程中各个环节对时间消耗的分析,找出了提高系统效率,提高通信速度的方法。实践证明这样的设计提高了系统的效率,提高数据传输率,降低了网络上传送冗余分组的数量,明显改善了系统性能。特别适用于高速、低数据量的采集或测控系统。
- 基于单片机的嵌入式系统网络设计方案(03-01)
- 一种基于CAN总线与以太网的嵌入式网关经典设计(09-10)
- 基于ARM LPC2210的以太网RTL8019AS驱动系统设计(11-11)
- 基于16位单片机的家电信息监测系统方案设计的(05-29)
- 基于51单片机RTL8019AS的网卡驱动程序(01-20)
- 基于PCE061A驱动以太控制芯片RTL8019AS的嵌入式设备解决方案(12-09)