您好,欢迎来到华拓网。
搜索
您的当前位置:首页串口转以太网,TCP转RS232

串口转以太网,TCP转RS232

来源:华拓网
哈尔滨工业大学(威海)本科毕业设计(论文)

摘要

本论文主要研究了以嵌入式系统为核心的多协议通信的实现,利用其串口或I2C总线与底层I/O节点相连,上层则直接联入Internet,解决了不同协议(如RS232、I2C、TCP/IP)之间的数据通信。

论文介绍了利用ATC51单片机和RTL8019AS网卡驱动芯片开发的RS-232、I2C转以太网通信协议的嵌入式以太网通信模块,利用该模块可实现将现场设备的RS-232、I2C通信转换为以太网通信,也可以直接将该模块嵌入单片机控制设备使用。然后,论文对嵌入式以太网通信模块的硬件电路设计和驱动程序编写作了详细的介绍,并在不改变以太网TCP/IP协议主体结构的基础上,对TCP/IP协议作了精简处理,以满足现场通信的实时性和可靠性要求。最后论文分析了嵌入式TCP/IP协议的总体框架设计、帧的封装过程及数据包的发送和接收流程。

本课题完成了对嵌入式以太网通信模块的设计,实现了RS-232、I2C协议和以太网通信协议的相互转换功能,并在利用C语言模块化的编程思想的基础上,用单片机实现了嵌入式TCP/IP协议的设计。测试结果表明该嵌入式以太网通信模块具有可靠性高和成本低等特点,能够充分保证不同协议之间通信的准确性。

关键词:TCP/IP协议栈;嵌入式Internet;串行通讯;协议转换

- I -

哈尔滨工业大学(威海)本科毕业设计(论文)

Abstract

This dissertation mainly research the implementation of a multi-protocol communication with the core of embedded systems, and uses the serial port or the I2C bus connecting the underlying I/O nodes. The upper is directly linked to the Internet,to solve the different protocols(such as RS232, I2C, the TCP/IP) data communications.

This dissertation reports the design for an embedded Ethernet module for data exchange among RS-232, I2C and Ethernet communication with a micro-controller ATC51 and a network card driver chip RTL8019AS. This Ethernet module can be directly used to convert the RS-232 or I2C information mode to Ethernet information mode or be embedded in the equipments controlled by microprocessors. Afterwards, this dissertation introduces the designing of hardware circuit and compiling of corresponding driving program in detail. This design simplified the TCP/IP without changing its main structure to meet the demand for real-time and reliability in field communication. In the end of this dissertation, the general frame for embedded TCP/IP, process of frame packing, and the procedure in sending and receiving data are comprehensively analyzed.

In this project, an embedded Ethernet module was designed and the data exchange among RS-232, I2C protocol and Ethernet protocol was fulfilled with this module. At the same time, based on the modular programming method provided by C language, an embedded TCP/IP was realized with MCU. After debugging, it turns out that the designed embedded Ethernet module is of the high reliability and low cost and can be able to fully assurance the accuracy of communication among different protocols.

Key words: TCP/IP state; Embedded Internet; Serial Communication; protocol exchange

- II -

哈尔滨工业大学(威海)本科毕业设计(论文)

目录

摘要 ......................................................................................................................... I Abstract .................................................................................................................. II

第1章 绪论 ........................................................................................................ - 5 - 1.1 课题背景 ................................................................................................. - 5 - 1.2 课题目的和意义 ..................................................................................... - 5 - 1.3 主要研究内容 ......................................................................................... - 6 - 1.4 本文结构 企鹅182090931 ................................................................... - 6 - 第2章 系统总体架构 ........................................................................................ - 8 - 2.1 硬件方案 ................................................................................................. - 8 - 2.2 软件方案 ................................................................................................. - 9 - 2.2.1 系统模块划分 .................................................................................. - 9 - 2.2.2 层次协议模型 .................................................................................. - 9 - 2.2.3 TCP/IP协议栈的实现方案 ............................................................. - 10 - 2.3 开发环境 ............................................................................................... - 11 - 第3章 系统硬件实现 ...................................................................................... - 12 - 3.1 嵌入式微控制器ATC51 .................................................................... - 12 - 3.2 RS-232模块 ............................................................................................ - 12 - 3.3 I2C模块 ................................................................................................... - 13 - 3.3.1 I2C数据传输 .................................................................................... - 13 - 3.3.2 通用I/O端口作为I2C总线接口 ..................................................... - 13 - 3.4 以太网模块 ........................................................................................... - 14 - 3.4.1 RTL8019AS的寄存器介绍 ............................................................. - 14 - 3.4.2 RTL8019AS的物理连接 ................................................................. - 17 - 第4章 系统软件实现 ...................................................................................... - 19 - 4.1 数据链路层的实现 ............................................................................... - 19 - 4.1.1 RTL8019AS的初始化 ..................................................................... - 19 - 4.1.2 以太网帧格式 ................................................................................ - 20 - 4.1.3 RTL8019AS的帧接收 ..................................................................... - 20 - 4.1.4 RTL8019AS的帧发送 ..................................................................... - 21 -

- III -

哈尔滨工业大学(威海)本科毕业设计(论文)

4.2 网络层的实现 ....................................................................................... - 22 - 4.2.1 地址解析协议ARP ........................................................................ - 22 - 4.2.2 网际协议IP .................................................................................... - 23 - 4.2.3 Internet控制报文协议ICMP ........................................................... - 26 - 4.3 传输层的实现 ....................................................................................... - 27 - 4.4 TCP/IP、RS-232协议、I2C总线协议之间的数据通信 ....................... - 33 - 第5章 系统测试结果 ...................................................................................... - 36 - 5.1 PING测试 ...................................................................... 错误!未定义书签。 5.2 TCP与RS232串口之间的通信 ..................................... 错误!未定义书签。 5.3 TCP与I2C总线之间的通信 .......................................... 错误!未定义书签。 5.4 嵌入式网页 .................................................................. 错误!未定义书签。 结论 .................................................................................................................. - 37 - 致谢 ......................................................................................... 错误!未定义书签。 参考文献 .......................................................................................................... - 38 -

- IV -

哈尔滨工业大学(威海)本科毕业设计(论文)

第1章 绪论

1.1 课题背景

20多年来,计算机网络技术迅猛发展,建立了多种多样的网络系统,这就带来一个各种网络之间如何进行互连的问题。一个办法就是推行国际标准。OSI网络体系结构和通信协议的国际标准已经越来越成熟。但是,要把大量的已存在非OSI体系的网络都改造成OSI体系,让它们都采用标准协议,那是非常困难的。而且网络技术在不断的发展,在进行标准化的同时,网络技术将随时产生多样化,因此,考虑异构网络的互连通信将永远不可避免。

在网络技术广泛普及的今天,网络已成为重要的信息流通渠道。全球各个领域不同的企业已经对“让设备联网”达成共识。但在工业控制和通信设备中,更多却是符合RS232/RS485标准的串行口设备和CAN/I2C类型的总线型设备[1]。如何将串行口设备、总线型设备以及以太网口设备联网,实现数据的远程传输、设备的远程控制便成了一个亟待解决的问题。

1.2 课题目的和意义

目前国内外工业控制中有以太网接口的嵌入式系统较少,且价格普遍较高,如GE公司90-30系列PLC的以太网接口模块的报价高达万元左右,而带以太网接口的单片机或DSP芯片的推出还需要一定的时间。现在很多已建成的工业控制网络基本上是利用CAN、RS-232和I2C等总线或通信接口将嵌入式系统组网,它们没有接入Internet的功能,不能实现远距离控制,这已不符合当今现场总线的发展趋势。为了将嵌入式设备接入Internet,需要大量的RS-232/I2C/CAN转以太网的接口模块。因此本课题可以降低以太网接口的成本,使以太网在工业控制网络中的应用得到普及。

目前大多数嵌入式系统还处于单独应用阶段,以微控制器(MCU)为核心,与一些监测、伺服、指示设备配合实现一定的功能。在一些工业和汽车应用中,为了实现多个MCU之间的信息交换,利用CAN、RS-232、I2C等现场总线和通信接口将MCU组网,但这种网络的有效半径比较有

- V -

哈尔滨工业大学(威海)本科毕业设计(论文)

限,有关的通信协议也较少,而且一般是孤立于Internet以外的。如今Internet已成为社会重要的基础信息设施之一,是信息流通的重要渠道,如嵌入式系统能够直接与Internet相连,则可以方便快速地将信息传送到世界上几乎任何一个地方。专家预言,嵌入式设备与Internet的结合代表着嵌入式系统和网络技术的真正未来[2-4]。这就为本课题的研究提供了机遇,以太网在工业控制网络中的应用研究具有的现实意义。

1.3 主要研究内容

考虑到多协议通信处理机是充分利用以太网技术和嵌入式系统的特点,搭建的应用于工业控制和数据采集领域的数据传输系统。因此论文包括以下几方面内容:

(1) 针对RS-232、I2C、TCP/IP协议各自的特点,对多协议通信处理机的可行性和需要达到的要求进行分析和论证,对传统TCP/IP协议中的各层作一些简化,只保留最基本的东西,以提供能满足要求的最精简的嵌入式TCP/IP协议栈。经过对代码的高度优化,将TCP/IP协议栈尽可能地做到最小,重点考虑其实时性和可靠性,使其既能满足工业控制中的通信要求,又能使底层控制器有足够的处理能力。

(2) 设计嵌入式以太网通信模块的硬件和驱动程序,将嵌入式TCP/IP协议栈移植到单片机中。

(3) 在深刻理解TCP/IP协议的基础上,对嵌入式TCP/IP协议的程序实现作总体的框架设计,并重点分析几个主要协议(如地址解析协议、网际协议和传输控制协议)的原理和具体的程序设计。

(4) 设计基于传输层的应用接口,屏蔽TCP/IP协议的所有细节,实现串口、I2C总线与TCP/IP的无缝连接。

1.4 本文结构

本文主要内容如下:

第2章介绍了系统总体架构。 第3章介绍了系统硬件的实现。

第4章介绍系统软件的实现,详细叙述了精简的TCP/IP协议栈的具体实现过程。

- VI -

哈尔滨工业大学(威海)本科毕业设计(论文)

第5章介绍了对系统软件进行测试的结果及分析。

- VII -

哈尔滨工业大学(威海)本科毕业设计(论文)

第2章 系统总体架构

2.1 硬件方案

由于大多数采用串行通讯的设备通讯速率不是很高,多数采用9600bit/s,所以接入以太网可以采用10Mb/S的速率,基于低成本及应用需求的考虑,系统硬件的设计方案如下[5]。

(l) 处理器选用51系列8位单片机C51,外扩32K的RAM(62256)。

(2) 与以太网接口的芯片采用RealTek公司的RTL8019AS,RTL8019AS是10Mb/s以太网接口芯片,ISA接口。

(3) 与外界的串行通讯通过RS-232和I2C总线,RS-232采用MAX232实现。

硬件系统结构示意如图2-1[6]所示。

I22C总线串口RS-232TCP/IP协议栈微控制器C51外设、存储器以太网控制器RTL8019ASRJ45转换

图2-1 硬件系统结构示意图

- VIII -

哈尔滨工业大学(威海)本科毕业设计(论文)

2.2 软件方案

2.2.1 系统模块划分

系统软件功能模块划分如图2-2所示[7]。

系统初始化模块I22C总线时序模块串口驱动模块任务调度管理模块TCP/IP协议栈

图2-2 系统软件功能模块划分

各模块功能如下:

(l) 初始化模块用于初始化控制器、初始化用户数据、初始化系统模块。

(2) I2C总线时序模块用于模拟I2C总线时序。

(3) 串口驱动模块与用户交换串行数据,调试过程中可以通过超级终端通过命令行方式设置参数和运行命令。

(4) 任务调度管理模块负责管理任务的调度流程。 (5) TCP/IP协议栈,实现了简单的TCP/IP协议栈[8]。

2.2.2 层次协议模型

网络中的数据在通信中可能出现硬件失效、网络拥塞、分组时延及丢失、数据损伤、数据重复及乱序等现象。所以数据通信系统不会使用单一的协议来处理所有的传输任务,可以把通讯问题划分为子问题,把协议软件分成多个模块,每个模块处理一个子问题。这就导致协议软件模块具有成为层

- IX -

哈尔滨工业大学(威海)本科毕业设计(论文)

的垂直型栈结构,每一层负责处理问题的一个部分。

关于协议分层,两个思想占据了主导地位。第一个思想是基于国际标准化组织ISO早期所做的工作,成为ISO的开放系统互联参考模型,通常称为OSI模型,OSI模型有七个概念性层次。OSI七层模型的设计初衷是提供概念性模型,但它也成为了若干协议实现的参考,例如X.25[9]。

第二个重要的分层模型是来自一些对TCP/IP协议栈的研究。TCP/IP软件分成五个概念层次,建立在第五层(即硬件层)上的四个软件层次。TCP/IP的层次协议模型如图2-3所示。

概念性层次应用层应用层报文或数据流传输层传输层传输协议分组网络层网络层IP数据报数据链路层数据链路层特定于网络的帧物理硬件连接物理硬件连接通过层次的对象

图2-3 TCP/IP概念层次模型

2.2.3 TCP/IP协议栈的实现方案

单片机中TCP/IP的实现与PC机不同,在PC里可支持比较完整的TCP/IP协议组,但在单片机里,由于其代码空间的有限性以及其应用的多

元性无需支持完整协议,而只在单片机里实现与需要有关的部分,而不使用的协议则可不支持。一般在单片机中实现:ARP、IP、ICMP、TCP/UDP这些协议,而更高层的协议:HTTP、SMTP、FTP一般是不需要支持的,因为单片机应用的TCP/IP协议大多是为了完成数据采集和数据传输,而不是

- X -

哈尔滨工业大学(威海)本科毕业设计(论文)

网页浏览、文件传输这些功能。另外由于单片机资源的有限性,对某一协议而言,也有可能要作简化。系统设计的精简TCP/IP协议栈的体系结构如图2-4所示。

应用程序 应用层应用程序 应用层TCP 传输层TCP协议协议 传输层ICMPIPARP 网络层ICMP协议协议IP协议协议ARP协议协议 网络层以太网协议 链路层以太网协议 链路层 物理层物理层 图2-4 精简TCP/IP协议栈

2.3 开发环境

系统采用proteus仿真软件对硬件进行仿真,选用的调试器是KeilC,

支持8位机的汇编语言和C语言,基于友好的图形用户界面(GUI),支持用户观察或修改嵌入式处理器的寄存器和存储器配置、数据变量的类型和数值,堆栈和寄存器的使用,支持程序断点设置,单步、断点或者全速运行等特性。

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件,它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件,是目前最好的仿真单片机及外围器件的工具,从原理图设计、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

- XI -

哈尔滨工业大学(威海)本科毕业设计(论文)

第3章 系统硬件实现

系统的设计目的就是使现有的一些采用串行通讯方式的设备能够接入以太网,实现远程监视和控制。需接入以太网的设备可以采用RS-232或I2C总线方式与协议转换设备连接,用户可以通过自定义的基于TCP的应用与设备通讯。

3.1 嵌入式微控制器ATC51

本系统硬件设计采用51系列单片机与RTL8019AS的接口电路,具体的网络物理接口采用UTP(无屏蔽双绞线)RJ-45接口。用到的主要芯片有ATC51、RTL8019AS、74HC373(8位锁存)、62256(32K字节的RAM)。ATC51是一个低功耗、高性能的CMOS 8位微处理器,有4K字节的可编程、可擦写只读存储器。该芯片采用了Atmel的高密度、非易失性存储器技术,与标准的MCS-51指令集和输出管脚相兼容。

ATC51提供如下标准:4K字节的Flash,128字节的RAM,32根I/O线,两个16位的定时器/计数器,一个全双工串行口,片内晶振和时钟电路。

3.2 RS-232模块

系统的主要功能就是实现串口和以太网的通讯,串口可以实现RS-232,RS-232选用MAX232CPE来实现,串行接口连接如图3-1所示。

图3-1 串行接口连接图

- XII -

哈尔滨工业大学(威海)本科毕业设计(论文)

3.3 I2C模块

I2C即Inter-Integrated Circuit,这种总线类型是由菲利普半导体公司在八十年代初设计出来的,是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源,是简化了信号传输方式的总线。

3.3.1 I2C数据传输

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

在I2C总线传输过程中,将两种特定的情况定义为开始和停止条件,当SCL保持“高”时,SDA由“高”变为“低”为开始条件;当SCL保持“高”且SDA由“低”变为“高”时为停止条件。开始和停止条件均由主控制器产生。使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。

SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,每次传输的字节不受,但每个字节必须要有一个应答ACK。当某一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接收数据的其它字节并释放时钟SCL后,数据传输继续进行。

3.3.2 通用I/O端口作为I2C总线接口

目前,51、96系列的单片机应用很广,但是由于它们都没有I2C总线接口,从而了在这些系统中使用具有I2C总线接口的器件。通过对I2C总线时序的分析,可以用51单片机的两根I/O线来实现I2C总线的功能。接I2C总线规定:SCL线和SDA线是各设备对应输出状态相“与”的结果,任一设备都可以用输出低电平的方法来延长SCL的低电平时间,以迫使高速设备进入等待状态,从而实现不同速度设备间的时钟同步。因此,即使时钟脉冲的高、低电平时间长短不一,也能实现数据的可靠传送,可以用

- XIII -

哈尔滨工业大学(威海)本科毕业设计(论文)

软件控制I/O口做I2C接口。

在单主控器的系统中,时钟线仅由主控器驱动,因此可以用51系列的一根I/O线作为SCL的信号线,将其设置为输出方式,并由软件控制产生串行时钟信号。在实际系统中使用了P1.0端口。另一根I/O线P1.1作为I2C总线的串行数据线,可在软件控制下在时钟的低电平期间读取或输出数据。系统传输数据的过程如下:先由单片机发出一个起始数据信号,接着送出要访问器件的7位地址数据,并等待被控器件的应答信号。当收以应答信号后,根据访问要求进行相应的操作。如果是读入数据,则数据线可一直设为输入方式,中间不需要改变SDA线的工作方式,每读入一个字节均应依次检测应答信号;如果是输出数据,则首先将SDA设置为输出方式,当发送完一个字节后,需要改变SDA线为输入方式,此时读入被控器件的应答信号就完成了一个字节的传送。当所有数据传输完毕后,应向SDA发出一个停止信号,以结束该次数据传输。

3.4 以太网模块

本系统选用由Realtek公司生产的RTL8019AS以太网控制器,由于其优良的性能、低兼的价格,使其在市场上10Mbps网卡中占有相当的比例。

3.4.1 RTL8019AS的寄存器介绍

RTL8019AS是与NE2000(由Novell公司所创立并且高度成功的ISA网路卡的标准)兼容的10Mb/S、ISA总线形式的网络接口芯片。RTL8019AS的寄存器共有4页,其中前三页与NE-2000兼容,每页有16个寄存器,寄存器页的选择是通过CR寄存器的PS0和PS1的值确定的[11]。在本设计中主要也是用前三页寄存器。

网卡要正常工作,就必须给其配置正确的驱动程序,驱动程序就是给网卡配置正确的运行参数,对于RTL8019AS来说就是要往寄存器里填入正确的参数。下面简要介绍本系统设计中所需要设置的几个主要寄存器:命令寄存器CR,中断屏蔽寄存器IMR,数据配置寄存器DCR等。

(1) CR:命令寄存器

命令寄存器的位格式如表3-1所示。

- XIV -

哈尔滨工业大学(威海)本科毕业设计(论文)

表3-1 命令寄存器的位格式

位 名称 7 PS1 6 PS0 5 RD2 4 RD1 3 RD0 2 TXP 1 STA 0 STP 各位说明如下:

1) PSI-PSO:当前操作的寄存器的页面设置,00为第一页,01为第二页,10为第三页,11为第四页。

2) RD2-RD0:DMA命令设置,000为不允许DMA,001为远程DMA读命令,010为远程DMA写命令,011为发送数据报文命令,1XX为中止/完成DMA操作。

3) TXP:发送数据报文命令。

4) STA:设备开始命令,当对命令寄存器进行设置后要设置此位,以开始命令执行。

5) STR:设备停止命令。 (2) IMR:中断屏蔽寄存器

所有的都是相应的IST寄存器位。POWER UP=0。设置某一位会使相应的中断打开。

(3) DCR:数据配置寄存器

数据配置寄存器位格式如表3-2所示。

表3-2 数据配置寄存器位格式

位 名称 7 -- 6 FT1 5 FT0 4 ARM 3 LS 2 LAS 1 BOS 0 WTS 数据配置寄存器各位内容如下: 1) FTI-FTO:FIFO缓存使用标志。 2) ARM:远程发包命令执行标志。

3) LS:回环方式选择标志,设置成回环模式主要用于调试芯片。正常使用时应设为普通模式。

4) LAS:置为0。

5) BOS:高低位发送顺序标志。 6) WTS:8位/6位DMA操作标志。 (4) TCR:发送配置寄存器

发送配置寄存器用来确定RTL8019AS在发送帧时的行为方式,如是否在发送的帧后添加CRC校验码等。寄存器位格式如表3-3所示。

- XV -

哈尔滨工业大学(威海)本科毕业设计(论文)

表3-3 发送配置寄存器位格式

位 名称 7 -- 6 -- 5 -- 4 OFST 3 ATD 2 LB1 1 LB0 0 CRC 发送配置寄存器各位内容如下: 1) OFST:使能够冲突补偿。 2) ATD:自动发送屏蔽

3) LBI-LB0:回环设置,一般用于故障检测和错误恢复。当其值为00时,为正常工作方式;为01时为内部回环方式;为1X时为外部回环方式。

4) CRC:允许芯片在报文发送时进行CRC运算。 (5) RCR:接收配置寄存器

接收配置寄存器RCR用于配置接收的策略,决定是否接收广播报文,是否接收多播报文,当前接收模式是否为混杂模式,是否接收出错报文,是否接收过小报文等。寄存器位格式如表3-4所示。

表3-4 接收配置寄存器位格式

位 名称 7 -- 6 -- 5 MON 4 PRO 3 AM 2 AB 1 AR 0 SEP 接收配置寄存器各位内容如下:

1) MON:监视模式。

2) PRO:混杂模式,用于接收所有报文。 3) AM:接收多播地址报文。 4) ABP:接收广播地址报文。 5) ARP:接收短小报文。 6) SEP:保存出错报文。

(6) CLDA0,1:当前局部DMA寄存器,通过读这两个寄存器来得到当前DMA地址。

(7) PSTART:页面开始寄存器,该寄存器用来设置接收缓冲器的开始页面地址。

(8) PSTOP:页面停止寄存器,该寄存器设置接收缓冲器停止页面寄存器地址。在8位方式下PSTOP寄存器不应该超过0X60,在6位方式下PSTOP寄存器应该不超过0x80。

(9) BNRY:边界寄存器,这个寄存器是用来放置接收缓冲器的重写。它代表性的作用是作为接收缓冲器最后页面的指针。

- XVI -

哈尔滨工业大学(威海)本科毕业设计(论文)

(10) TPSR:传送页面开始寄存器,用来设置传送数据包开始页面地址。

(11) TBCR0,1:传输字节计算寄存器,用来设置传输数据包的字节计数。

(12) NCR:冲突数寄存器,记录在数据包传送过程重的冲突节点数。 (13) FIFO:先进先出寄存器,这个寄存器允许主机检查在loopback后的FIFO内容。

(14) CRDA0,1:当前远程 DMA寄存器,这个两个寄存器包括当前远程DMA地址。

(15) RSAR0,1:远程起始地址寄存器,这两个寄存器设置远程DMA起始地址。

(16) RBCR0,1:远程字节数寄存器,设置远程DMA数据字节数。 (17) CNTR0:帧同步错误计数寄存器。 (18) CNTR1:CRC错误数记录寄存器。 (19) CNTR2:遗失数据包数记录寄存器。

(20) PAR0-5:实际地址寄存器,这些寄存器包括以太网节点地址且用来对目标地址数据包进行比较来确定接收或者拒绝接收。

(21) CURR:当前页面寄存器,这个寄存器指出首先接收缓冲器页面地址,这个页面用来对数据包进行接收。

3.4.2 RTL8019AS的物理连接

RTL8019AS具有32位输入输出地址,地址偏移量为00H~1FH。其中00H~0FH共16个地址,为寄存器地址。寄存器分为4页:PAGE0、PAGE1、PAGE2、PAGE3,由RTL8019AS的CR(Command Register命令寄存器)中的PS1、PS0位来决定要访问哪一页的16个寄存器。远程DMA地址包括10H~17H,都可以用来做远程DMA端口,只要用其中的一个就可以了。复位端口包括18H~1FH共8个地址,功能一样,用于RTL8019AS复位[10]。

配置寄存器CONFIG1的默认值为00H,CONFIG1的低4位IOS3~0用于选择I/O基地址。IOS3~0值均为0时,RTL8019AS选择的端口I/O基地址为300H。RTL8019AS的地址为20位,那么用到RTL8019AS的地址空间为00300H~0031FH,用二进制表示00300H~0031FH,可以发现第19位

- XVII -

哈尔滨工业大学(威海)本科毕业设计(论文)

到第5位是固定的:000000000011000。根据上述分配原则,RTL8019AS的20根地址线SA0~SA19的物理连接方法如下:

SA19~SA10接地;SA9~SA8接单片机P2口的P2.7,即地址总线ADDR15;SA7~SA5接地;SA4~SA0对应为地址总线的ADDR0~ADDR4。

通过ADDR15、I/OW、I/OR来划分RTL8019AS和62256的地址空间。ADDR15接62256的CE脚,低电平时选择62256;高电平时选择RTL8019AS的地址空间。C51单片机的地址为16位,在程序里则通过使用8000H~801FH来选中RTL8019AS的地址空间。图3-2为ATC51和RTL8019AS之间连接电路图: U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728A8A9A10A11A12A13A14A15D0D1D2D3D4D5D6D7347813141718111U2D0D1D2D3D4D5D6D7OELE74LS373Q0Q1Q2Q3Q4Q5Q6Q7256912151619A0A1A2A3A4A5A6A7A8A9A10A11A12A13A141098763252421232261U3A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14CEWEOE62256D0D1D2D3D4D5D6D71112131516171819D0D1D2D3D4D5D6D718XTAL29RSTALE293031ALE12345678PSENALEEAP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATC5110111213141516WR17RDD1A05A17A28A39A410111213A15151618192021222324252627A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15A16A17A18A19D0D1D2D3D4D5D6D7D8D9D10D11D12D13D14D15INT0INT1INT2INT3INT4INT5INT6INT7AENIOCHRDYIOCS16BIORBIOWBRSTDRVSMEMRBSMEMWBA1520WR27RD22D036D137D238D339D440D1D2D743959493929190888743211009997343596RD29WR3033313260616263LEDBNCLED0LED1LED2RTL8019AS 图3-2 ATC51和RTL8019AS之间连接电路图 - XVIII -

哈尔滨工业大学(威海)本科毕业设计(论文)

第4章 系统软件实现

4.1 数据链路层的实现

本系统中数据链路层要完成的功能如下:

(1) 设计驱动程序对以太网控制器RTL8019AS进行初始化,使其正常工作。

(2) 当接收到以太网帧时,通过帧中的协议字段判断其协议类型,再进行帧分用。

(3) 将从上层传下来的要发送的IP、ARP数据报封装成以太网帧。 (4) 以太网帧的发送。

4.1.1 RTL8019AS的初始化

为了启动以太网控制器RTL8019AS,并使之处于准备接收或准备发送的状态,必须对其进行初始化[12]。

初始化步骤如下: (1) 初始化命令寄存器CR:CR=21,选择页0的寄存器。

(2) 初始化数据配置寄存器DCR:DCR=0xc8,使用FIFO缓存,普通模式,8位数据DMA。

(3) 初始化远程字节计数寄存器RBCR:指定远程DMA操作时传输数据的字节数,RBCR1=0,要读取的字节数的计数(高8位);RBCR0=12,要读取的字节数的计数(低8位)共要读取12个字节。

(4) 初始化接收配置寄存器RCR:RCR=0xcc,使用接收缓冲区,仅接收自己地址的数据包(以及广播地址数据包)和多点播送地址包,小于字节的包丢弃,校验错的数据包不接收。

(5) 初始化发送配置寄存器TCR:TCR=0xe0,启用CRC自动生成和自动校验,工作在正常模式。

(6) 初始化接收缓冲环:PSTART=0x4c,PSTOP=0x80,构造缓冲环:0x4c~0x80。BNRY=0x4c。

(7) 初始化中断状态寄存器ISR:ISR=0xff,初始化时,将各位值设置为1,表示在初始化状态下,无中断发生。

- XIX -

哈尔滨工业大学(威海)本科毕业设计(论文)

(8) 初始化中断屏蔽寄存器IMR:IMR=0x00,屏蔽所有中断。 (9) 重置命令寄存器CR,使其选择页1。 (10) 初始化物理地址寄存器PAR0-PAR5。

(11) 初始化多址寄存器MAR0-MAR7:均设置为0x00。

(12) 初始化当前页寄存器CURR:CURR=0x4d,CURR是RTL8019AS写内存的指针,指向当前正在写的页的下一页。

(13) 重置命令寄存器的值,将RTL8019AS置于开始模式,即CR=22H。

4.1.2 以太网帧格式

以太网的帧有最小长度要求,即要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。表4-1显示了以太网帧的封装格式。

表4-1 以太网帧的封装格式

组成 字节长度 目的地址 6 源地址 6 类型 2 数据 46-1500 CRC 4 (1) 以太网的源地址和目的地址

以太网报头中的前两个字段是以太网的源地址和目的地址,目的地址和源地址均为6个字节。

(2) 类型

两个字节长的以太网帧类型表示后面数据的类型。对于IP数据包,该字段的值为0x0800;而对于ARP请求或应答来说,该字段的值为0x0806。

(3) 数据

在以太网帧格式中,类型字段之后就是数据。 (4) CRC字段

CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)(它也被称为FCS或帧检验序列)。

4.1.3 RTL8019AS的帧接收

帧接收是指将网络上的数据帧接收并存于以太网控制器的接收缓冲环中,而后由主控器程序将缓存于接收缓冲环的帧读走,并存入系统数据存储器供其它程序使用。因此,帧接收实际上是由帧接收和帧读入两个部分组

- XX -

哈尔滨工业大学(威海)本科毕业设计(论文)

成。在本系统中,以太网帧的分用和帧的接收是在同一函数rec_data()中实现的,当一个数据帧接收完后,根据其协议选项的值做相应的处理。帧接收的具体步骤如下:

(1) 帧接收

RTL8019AS通过本地DMA自动将帧存入接收缓冲环,当条件:CURR-BNRY!=1成立时,表示接收缓冲区中有数据,则进行下一步。

(2) 帧读入

远程DMA在主控器的控制下将接收缓冲环中的帧读入系统数据存储器。

具体函数实现步骤如下:

1) 设置命令寄存器CR:CR=0x22,选择页0的寄存器。

2) 设置地址寄存器RSAR:RSAR0=0,读取数据块的缓存起始地址(低8位);RSAR1=BNRY,读取数据块的缓存起始地址(高8位)。

3) 设置远程字节计数寄存器RBCR:指定远程DMA操作时传输数据的字节数,RBCR1=0,要读取的字节数的计数(高8位);RBCR0=4,要读取的字节数的计数(低8位)共要读取4个字节。

4) 设置命令寄存器CR:CR=0x0a,远程读DMA。

5) 读数据端口,读出4个字节:第1个字节表示接收状态,第2个字节为下一包开始地址指针,第3~4个字节为本数据包的长度(高位字节在前)。

6) 根据接收状态,判断数据包是否接收正确。

7) 如果接收正确,启动远程DMA,收取该数据包并进行处理。

8) 协议字段为0x0800,为IP报文,进入函数ippro()对IP包进行处理;协议字段为0x0806,为ARP报文,进入函数arppro()对ARP包进行处理。

9) 结束远程DMA:CR=0x22。

10) 重新设置读指针BNRY,满足条件BNRY=CURR-1,为下一次帧接收作准备。

4.1.4 RTL8019AS的帧发送

帧的发送是指将待发送的数据以帧的形式发送到网络传输线上的过程,因此,帧的发送过程应包括以下步骤[13]:

- XXI -

哈尔滨工业大学(威海)本科毕业设计(论文)

(1) 装帧:数据包在发送前应该按规定的格式封装好。 (2) 将帧送入以太网控制器的发送缓冲区:

1) 设置地址寄存器RSAR:RSAR0=0,发送数据帧的缓存起始地址(低8位);RSAR1=40, 发送数据块的缓存起始地址(高8位)。

2) 设置远程字节计数寄存器RBCR:设置为发送数据帧的长度。 3) 设置命令寄存器CR:CR=12,远程DMA写。 4) 往数据端口写入发送数据。

(3) 初始化发送的字节数寄存器TBCR:设置为发送数据帧的长度。 (4) 初始化发送页面地址寄存器TPSR:TPSR=0x40。

(5) 启动以太网控制器将该帧发送到网络传输线上:CR=0x26,启动发送。在本系统中,帧的发送由函数send_package()来具体实现。

4.2 网络层的实现

4.2.1 地址解析协议ARP

系统中在数据链路层还实现了ARP协议。本质是完成网络地址到物理地址的映射。从概念上讲就是找到一个映射方法f,使得“物理地址=f(网络地址)”。物理地址有两种基本类型:以太网类型和proNET令牌环网类型,前者有大型的固定的物理地址,后者有小型的易于配置的物理地址,网络地址特指正地址。对映射方法的要求就是高效。以太网中的地址转换使用的是通过动态绑定进行转换的方法。为什么不直接使用同一种地址,而要这么麻烦呢?因为TCP/IP网络就是为将不同种类计算机互联而发明的,它的体系结构是分层的,层和层之间相互,改变物理层的实现不会影响到网络层。

ARP协议把32位IP地址映射到以太网48位物理地址,ARP报文结构如表4-2所示。

(l) 硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。

(2) 协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。

(3) 硬件地址长度和协议长度字段分别指出硬件地址和协议地址的长度,IP地址以字节为单位。对于以太网上IP地址的ARP请求或应答来说,

- XXII -

哈尔滨工业大学(威海)本科毕业设计(论文)

它们的值分别为6和4。

(4) 操作字段指出四种操作类型,它们是ARP请求(值为l)、A即应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。

(5) 接下来的四个字段是发送端的硬件地址(在本系统中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。

表4-2 ARP报文结构

硬件类型(16比特) 协议类型(16比特) 硬件长度(8比协议长度(8比操作:请求1,应答2(16比特) 特) 特) 发送站硬件地址 发送站IP地址 目标硬件地址 目标IP地址

整个ARP处理过程,ARP包函数处理流程如图4-1:

开始开始N合法的合法的ARPARP报文段报文段YNARPARP请求请求YARPARP应答处理应答处理NARPARP应答应答Y更新更新ARPARP表表唤醒唤醒IPIP发送函数发送函数结束结束

图4-1 ARP包函数处理流程

4.2.2 网际协议IP

网际协议IP存在于TCP/IP参考模型的网络层中。IP可以被认为是将

- XXIII -

哈尔滨工业大学(威海)本科毕业设计(论文)

数据包从一个主机移动到另一个主机的传递机制。因为它处理传递,它也提供寻址[14]。

本系统中,IP协议完成如下功能:

(1) 将上层传下来的TCP包加上IP包的包头,并封装成以太网帧。 (2) 对接收到的IP包进行处理。 1. IP报文格式

IP数据报的格式如表4-3所示。普通的IP首为20个字节,除非含有选项字段[15]。

表4-3 IP数据报的格式

版本(4比特) 首度服务类型(8比(4比总长度(16比特) 特) 特) 标识(16比特) 标志 片偏移量(13比特) 寿命(8比特) 协议(8比特) 首部校验和(16比特) 源IP地址(32比特) 目的IP地址(32比特) IP选项(若有) 填充 数据 ......

2. 发送IP数据包

对IP数据包进行发送时,首先填写IP报文的首部,然后将其封装成以太网数据帧,最后调用数据链路层的发送函数进行发送。函数流程图如图4-2所示。

其中填写以太网帧头与填写IP报文首部应包括: (1) 填写以太网帧头:

1) 填写以太网源地址为本机地址。

2) 以太网协议为0x0800(0800为IP报文,0806为ARP报文)。 (2) 填写IP报文首部: 1) 首度值为0x45。 2) 服务类型设置成0x00。

3) 总长度值为TCP包长度加IP包头度。 4) 设置IP标记为本机IP标记。 5) 分片偏移量设为0x0000。

6) 生存时间设为0x80(生存时间为128)。 7) 设置上层协议类型。

- XXIV -

哈尔滨工业大学(威海)本科毕业设计(论文)

开始开始填写以太网帧头填写以太网帧头填写填写IPIP报文首部报文首部填充报文满足是最小以太网帧为填充报文满足是最小以太网帧为6060字节字节调用函数发送报文调用函数发送报文结束结束 图4-2 发送IP数据包

3. 处理接收的IP数据包

对IP包进行处理,函数流程图如图4-3所示。

开始开始NIPIP首部校验和是否正确首部校验和是否正确Y接收报文的目的接收报文的目的IPIP地址为系统地址为系统IPIP地址地址YIPIP数据报是否分片数据报是否分片YNN如果首度大于如果首度大于2020,将首度重新调整为,将首度重新调整为2020针对不同类型协议进行处理针对不同类型协议进行处理结束结束

图4-3 处理接收到的IP数据包

- XXV -

哈尔滨工业大学(威海)本科毕业设计(论文)

4.2.3 Internet控制报文协议ICMP

ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议TCP使用。一些ICMP报文把差错报文返回给用户进程。ICMP报文是在IP数据报内部被传输的。

1. ICMP报文格式,PING应答,PING回显报文格式

ICMP报文的格式如表4-4所示。所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICMP报文还使用代码字段的值来进一步描述不同的条件。检验和字段覆盖整个ICMP报文。使用的算法与我们介绍的IP首部检验和算法相同。ICMP的检验和是必需的[16]。

表4-4 ICMP报文结构

类型(8比特) 代码(8比特) 标识符 可选数据 ......

校验和(16比特) 序号 应用最广泛的ICMP报文类型是回显应答和请求回显,即PING应答和 PING回显。

ICMP包处理函数处理接收到的ICMP报文,若该报文为Ping请求则调用Ping应答函数;若为Ping应答则做相应的应答处理。PING应答处理流程如图4-4所示。

2. Ping工具需要采用以下步骤: (l) 解析IP地址。 (2) 发送ARP请求。 (3) 等待ARP应答。

(4) 发送带有一些数据的ICMP应答。 (5) 等待ICMP应答。 在等待应答的同时,该工具也有可能应答它所接收到的任何ICMP或ARP请求,这就允许存在两个节点互相Ping。

- XXVI -

哈尔滨工业大学(威海)本科毕业设计(论文)

开始开始接收到的接收到的ICMPICMP包为包为PINGPING请求请求Y填写以太网帧头填写以太网帧头N填写填写IPIP报文首部报文首部填写填写ICMPICMP报文首部报文首部调用调用send_package()send_package()函数发送报文函数发送报文结束结束

图4-4 PING应答流程

4.3 传输层的实现

传输控制协议TCP提供一种面向连接的、可靠的字节流服务。面向连

接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接,数据传送完毕必须有一方关闭这个连接的。在一个TCP连接中,仅有两方进行彼此通信。

TCP通过下列方式来提供可靠性: (l) 应用数据被分割成TCP认为最适合发送的数据块。

(2) 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

(3) 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。 (4) TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目

- XXVII -

哈尔滨工业大学(威海)本科毕业设计(论文)

的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段,发端在超时情况下就会重发此报文。

(5) 由于TCP报文段作为IP数据报来传输,IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

(6) 如果IP数据报发生重复,TCP的接收端丢弃重复的数据。

(7) TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这可以防止较快主机致使较慢主机的缓冲区溢出[17]。

1. TCP报文格式

TCP报文格式如表4-5所示,

表4-5 TCP报文结构

源端口(16比特) 序号(32比特) 确认序号(32比特) 码元比特(6比特) 选项(若有) 数据 ......

目的端口(16比特) 首度(4比特) 保留未用(6比特) 校验和 窗口(16比特) 紧急指针 填充 2. TCP连接的建立与中止

因为TCP是基于连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条链接。

为了建立一条TCP连接,需要以下步骤:

(l) 请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。

(2) 服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。

(3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认。这三个报文段完成连接的建立。这个过程也称为三次握手,TCP连接的建立过程见图4-5。

- XXVIII -

哈尔滨工业大学(威海)本科毕业设计(论文)

网点1的事件发送SYN seq=x网络报文网点2的事件接收SYN报文段 发送 SYN seq=y ACKx+1接收SYN+ACK报文段发送ACKy+1接收ACK报文段

图4-5 三次握手的报文序列

发送第一个SYN的一端将执行主动打开。接收这个SYN并发回下一个SYN的另一端执行被动打开。当一端为建立连接而发送它的SYN时,它为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。系统中采用系统的时钟计数器作为初始的ISN,由于系统时钟是一个32比特的计数器,每2ms加1,这样选择序号就可以防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它作错误的解释。

建立一个连接需要三次握手,而终止一个连接要经过4次握手,具体过程如图4-6。关闭连接需要几个步骤:

网点1的事件(应用程序关闭连接)发送 FIN seq=x网络报文网点2的事件接收FIN报文段发送ACKx+1(通知应用程序)(应用程序关闭连接)发送 FINseq=y ACKx+1接收ACK报文段接收FIN+ACK报文段发送ACKy+1接收ACK报文段

图4-6 用于关闭连接的改进的四次握手操作

(1) 首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这个FIN)执行被动关闭。

(2) 当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。同时TCP服务器还向应用

- XXIX -

哈尔滨工业大学(威海)本科毕业设计(论文)

程序传送一个文件结束符。

(3) 接着这个服务器程序就关闭它的连接,导致它的TCP端发送一个FIN。

(4) 客户必须发回一个确认,并将确认序号设置为收到序号加1。 3. 套接字定义

查看TCP头部数据的源端口号和目的端口号。源端口号和目的端口号是不能简化的,因为一个TCP连接是由源IP地址、源端口号、目的IP地址、目的端口号唯一确定的。所以每次服务器端在侦听状态时,当接收到一个TCP的连接请求,发送SYNACK后,或作为客户端在申请建立TCP连接时,要记录两端的IP地址、使用的端口号等关于该连接的相关信息,以便对后面到达的数据报进行判断,看是否属于某个已建立的连接。如果支持多个连接,就要记录大量与连接相关的数据,并且在每个数据报到达时,都要判断该数据报所属连接,然后在不同连接间切换。而且如果支持多个连接,对其他一些对应于某个连接的相关信息,如序列号、确认号、所处状态等,都要分别进行存储并作相应处理。基于此,系统定义了套接字来存储TCP的连接信息。

基于套接字的函数定义如下:

TCPSocket()。函数原型:socket xdata * TCPSocket(IP_ADDR ScrIP)。功能:申请一个套接字。ScrIP是这个套接字的本地IP地址。

TCPConnect()。函数原型:BOOL TCPConnect(socket xdata*pTCB, IP_ADDR DestIP, WORD DestPort, void (code*recv)(void xdata*buf, WORD size), void (ode*close)(socket xdata*pSocket))。功能:向IP地址为DestIP的服务器的DestPort端口发起连接。参数recv和close用于设置当接收到数据包和对方要求关闭TCP连接时应该调用的回调函数指针。

TCPSend()。函数原型:BOOL TCPSend(socket xdata*pTCB, void xdata*buf, WORD DataSize)。功能:发送数据。发送数据的TCP连接是套接字指针pTCB对应的连接,发送的数据的起始地址为buf,大小为DataSize。

TCPListen()。函数原型:BOOL TCPListen(socket xdata*pTCB, WORD ScrPort, void(code*accept)(socket xdata*pNewTCB))。功能:使用套接字pTCB在ScrPort端口监听。参数accept是当有客户端向这个监听端口连接成功时调用的回调函数指针。

TCPClose()。函数原型:void TCPClose(socket xdata*pTCB)。功能:主

- XXX -

哈尔滨工业大学(威海)本科毕业设计(论文)

动关闭连接时调用TCPClose函数,它将要求关闭套接字pTCB对应的连接。

TCPAbort().函数原型:void TCPAbort(socket xdata*pTCB)。功能:当使用完这个套接字以后,调用TCPAbort,将这个套接字释放,还给系统。

4. 简化的窗口机制

标准的TCP协议使用慢启动的滑动窗口机制。滑动窗口是一种在流控制和网络传输效率之间取得折中的方案,它允许发送方在等待一个确认之前发送多个窗口。对于使用了滑动窗口的TCP连接,其确认是一种批量的确认,处理器要对多个数据报连续传输进行维护和处理,困难较大[18]。

而滑动窗口的一个极限情况,是只使用单个窗口,这就变成了一种简单确认的处理方法。使用该方法后,所有的处理只是对于单个数据报的发送和确认,虽然节约了系统的资源,也使维护更加方便,但是却降低了效率。

系统采用了折衷的方法,在定义最大报文段长度(MSS)时,取一个相对较小的值,因为系统应用于用串行通讯方式进行信息交流的嵌入式系统,通常传输的数据量不是很大,选取的MSS为512BYTE,窗口大小选定为1024BYTE,这样虽然在数据量很大时效率较低,但在数据量不是很大时显示出了相对的优势。

5. 简化的超时与重传机制 系统中采用简化的超时与重传机制。由于系统资源有限,在报文丢失是采取了比较简单的解决办法,如果在每个套接字里保存一个最近发送段的副本,在报文丢失时重新传输,将会占用有限的存储空间,本系统采用了比较经济的方法,就是在套接字中保存最近一个报文的必要信息,使得最近的传输可以被重新生成出来,报文丢失时,循环缓冲区的试验指针移回到发送指针的位置、数据、标志或者这两者就都可以重新发送[19]。

报文被发送出后,系统将启动一个定时器,记录发送的时间,在套接字定义中为time字段,同时初始化一个超时时间字段timeout,当超时时间到而并没有收到该报文段的确认时,即认为此报文段丢失,重传该报文,并将超时时间字段增倍,若在超时时间内收到确认ACK,则复位发送时间及超时时间字段,若超时时间到达后仍没有收到该报文段的确认,再次重发此报文,并且超时时间再加倍,如此重发三次后若超时时间到达仍旧没有收到确认,即认为该TCP连接己断开,初始化套接字。剩余发送次数保存在retries字段中。

- XXXI -

哈尔滨工业大学(威海)本科毕业设计(论文)

6. TCP报文处理

系统处理接收的TCP段由TCP报文处理函数实现,数据存放在TCP缓冲区中,并置位相应标志。TCP报文处理流程如图4-7所示。

开始开始正确的正确的TCPTCP报文报文Y校验和正确否?校验和正确否?Y读入读入TCPTCP选项(若有)选项(若有)NN有匹配的有匹配的SOCKETSOCKET??N有空闲的有空闲的SOCKETSOCKET??N读入读入TCPTCP报文报文YY读入读入TCPTCP报文报文复位连接复位连接结束结束

图4-7 TCP报文处理流程

7. 发送TCP报文

系统的TCP/IP协议栈实现了模块化的机制,在发送TCP报文时,TCP层把数据报文封装好之后,交给IP层,即认为报文已发送,至于报文的发送任务就由IP层处理。TCP报文发送流程如图4-8所示。

- XXXII -

哈尔滨工业大学(威海)本科毕业设计(论文)

开始开始N有空闲的有空闲的IPIP缓冲区?缓冲区?Y封装封装TCPTCP报文头报文头N有无数据?有无数据?Y复制数据复制数据时起始连接帧?时起始连接帧?Y设置选项(设置选项(MSSMSS))计算校验和计算校验和清标志清标志发送数据到发送数据到IPIP层层结束结束

图4-8 TCP报文发送过程

4.4 TCP/IP、RS-232协议、I2C总线协议之间的数据通信

如果按照OSI的7层模型(物理层、数据链路层、网络层、传输层、

会话层、表示层、应用层)来分的话,RS-232串口和I2C总线实际上只包含了物理层、数据链路层。而TCP/IP协议应该属于网络层和传输层。RS-232、I2C和TCP/IP之间的通信,并不是简单物理层和数据链路层的转化[20]

由于串口和I2C协议本身不具有网络层和传输层,串口和I2C和以太网之间的数据通信,实际是将串口的数据作为TCP/IP的应用层数据,用

- XXXIII -

哈尔滨工业大学(威海)本科毕业设计(论文)

TCP/IP封装传输的方式。TCP/IP的应用层数据是TCP/IP所要传送的真正有效的数据。通过socket的recv()和TCPSend()函数接收和发送的实际是应用层数据。这样通过串口转TCP/IP就可以用recv()和TCPSend()函数收发串口数据了,协议转换函数流程图如图4-9所示。

2RS232RS232、、II2CC的数据的数据SocketSocket应用程应用程序编程接口序编程接口TCPTCP协议模块协议模块TCP报文段IPIP协议模块协议模块IP数据包网络接口层网络接口层发送的数据网卡驱动程序网卡驱动程序以太网数据帧物理链路层物理链路层数据接收程序数据接收程序 图4-9 协议转换函数流程图

发送数据时,选择面向连接的TCP协议,则应用程序将用户数据交给

TCP协议模块处理,TCP协议模块在用户数据前面加上TCP首部信息后封装成TCP报文段。然后将封装好的TCP报文段交付给IP协议模块,IP协议模块在其上面添加IP首部,封装成IP数据包,然后将IP数据包发送到网络接口层,并利用ARP协议找到目的IP地址对应的物理地址,然后封装成以太网帧,由网卡驱动程序将以太网帧发送出去。

接收数据则由网卡驱动程序负责,然后由中断处理方式或查询方式唤醒数据接收程序,由数据接收程序将接收到的数据帧交给网络接口层;网络接口层取出帧头,判断接收数据的类型,如果是IP数据包,则将数据交给IP

- XXXIV -

哈尔滨工业大学(威海)本科毕业设计(论文)

协议模块处理,IP协议模块取出IP首部信息,然后根据IP首部协议的类型,将报文交给TCP协议模块处理;最后TCP协议模块收到报文后,取出首部进行处理,并将用户数据交给应用程序处理。

- XXXV -

哈尔滨工业大学(威海)本科毕业设计(论文)

第5章 系统测试结果

- XXXVI -

哈尔滨工业大学(威海)本科毕业设计(论文)

结论

- XXXVII -

哈尔滨工业大学(威海)本科毕业设计(论文)

参考文献

1 沈永春,姜宁.嵌入式多协议网关的设计与实现 自动化仪表. 2007:8-12 2 Jim Montague. What’s left to say about industrial Ethernet. Control

Engineering, 2001:7-17

3 Ellen Fussel. Striking up communications with factory-floor Ethernet. ISA:

InTech, 2001.7-17 4 Jonas Berge. Using ethernet is no-brainer. ISA. InTech, 2000.7: 12-18

5 Ken Amold.Embedded Controller Hardware Design[M],LLH Technology

Publishing,2000,23-93

6 卢虎,李勇,李志芳. 嵌入式webserver技术及其实现[J],单片机及嵌入式系

统应用,2003,5:71-74

7 Jonathan W.Valvano, Embedded Microcomputer Systems:Real Time

Interfacing[M],Brooks/Cole Publishing Co,2000

8 黄学雨,成锡岗. 基于AVR单片机的嵌入式“瘦服务器”系统设计思想[J],

计算机应用,2003,1: l-2

9 Andrew S.Tanenbaum. Computer Networks[M], Prentice Hall, 1998, 175-10 11 12 13

242

曹宇,魏丰,胡士毅. 用51单片机控制RTL8019AS实现以太网通信[J].计算机应用2003年第一期

张伟,徐烁.嵌入式系统前景无限—访美国WindRiVer公司中国区首席代表韩青先生[J].半导体技术,2002年第2期

邓龙军,梁志坤,王泽芳.单片机在以太网卡通信中的应用[M].广东工业大学学报,2001 (4):21-25

胡宾鑫,方方. 一种嵌入式以太网接口的设计与实现[J]. 汕头大学学报, 2003(2):52-56

14 Postel, J.B. and Reyonld, J.K. Standard for the Transmission of IP Datagrams

overIEEE 802 Networks. http://www.IETF.org/ RFC 1042. 199

15 I-Hai Lin, P.& H. L. Broberg, Internet-Based Monitoring and Controls for

HVAC Applications, IEEE Industry Applications Magazine, Jan-Feb 2002, Vol.8, Issue 1, 49-

16 RFC-792 ICMP (Internetwork Control Message Protocol),http://www.rfc-- XXXVIII -

哈尔滨工业大学(威海)本科毕业设计(论文)

editor. org

17 Labrosse Jean J.“ucos-ii源码公开的实时嵌入式操作系统[M],北京:中国电

力出版社,2001,116-163

18 王金廉,谢剑英,贾青.基于TCP/IP的多线程通信及其在远程监控系统中的

应用.电子技术应用,2000.1

19 陈学泉,关宇东.嵌入式TCP/IP协议单片机技术在网络通信中的应用.电子

技术应用,2002.3 20 吴誉,张卫东等.以太网与现场总线的互连方法.测控技术,2000,19(1):53-56

- XXXIX -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo3.cn 版权所有 湘ICP备2023017654号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务