基于MSP430 CS8900A的嵌入式以太网系统的设计与实现
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
1 绪论
1.1 课题背景
随着网络时代的到来,Internet已成为重要的基础信息设施,这方面的技术进步对于社会的各个方面都产生了积极影响,很多领域都在不断的探索、开发利用网络资源。同时后PC时代的来临,在某些应用领域,嵌入式设备在价格、体积以及实时性等方面,有着通用计算机无法比拟的优点。如果嵌入式设备能够连接到Internet上面,则可以方便、低廉地将信息传送到几乎世界上的任何一个地方。这不仅可以应用于日常生活中,还能应用于许多工业现场,特别是在那些分散共享数据或需要共享某些信息的工业现场,嵌入式网络终端的技术优势更加明显。传统的技术已经可以实现通过专用通信线路把远方采集的现场设备数据进行远程显示和远程控制。然而通信介质是要专用的,例如RS485、RS232、CAN、FieldBus等;而且这种网络的有效半径比较有限,通信的速度也不高,并且一般是孤立于Internet以外的。以太网作为当今最受欢迎的局域网之一,现已成为社会重要的基础信息设施,是信息流通的重要渠道。如果我们能充分利用现有的网络基础,将嵌入式设备连接到Internet上来,最大的意义就在于:不需要铺设专用的通信线路,通过Internet就可以将设备的监控延伸到全球的任何一个角落,而且每次的信息传输都可以
[1]按照客户端相应的需要给予显示和操作。
1.2 嵌入式系统的定义
嵌入式系统是将硬件和软件结合起来构成的一个专门的装置,这个装置可以完成一些特定的功能和任务,能够在没有人工干预的情况下独立地进行实时监测和控制。
另外,由于被嵌入对象的体系结构、应用环境不同,所以各个嵌入式系统也可以由各种不同的结构组成。
[2]目前嵌入式系统接入Internet通常有以下两种主要方式:
(1)采用高速的16/32Bit微控制器直接实现TCP/IP协议,这种方式可以使嵌入式系统直接与Internet相连,有很大的灵活性。缺点是占用的系统资源较多,对微控制器的要求也很高,无法在8/16Bit低速微控制器为核心的嵌入式系统上实现。
第 1 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 1.3 总体设计
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
及主要内容
本
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
研究的主要内容有:
(1)在分析和研究国内外嵌入式Internet技术解决方案的基础上,根据实际情况制定出采用低端MCU控制通用以太网芯片直接接入Internet的系统实现方案。
(2)完成嵌入式网络终端的硬件整体框架的规划,各器件的选型,硬件电路的接口设计以及系统硬件调试等。基于MSP430+CS8900A的嵌入式以太网系统的设计与实现。
(3)针对嵌入式系统的应用特点,完成基于低端MCU的嵌入式TCP/IP协议栈的设计,包括以太网芯片CS8900A的驱动程序以及TCP/IP协议栈各层协议的实现包括ARP协议、IP协议、ICMP协议和TCP协议等。
(4)在嵌入式TCP/IP协议栈基础上应用HTTP、SMTP协议完成嵌入式Web服务器、嵌入式SMTP客户机以及嵌入式微型网关的功能设计,为下一步研究专用的接入Internet的通信产品提供较好的开发平台,具有较好的研发延续性。
第 2 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
2 嵌入式TCP,IP协议介绍
2.1 TCP,IP协议综述
[3]TCP/IP的中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
。TCP/IP是一个四层的分层体系结构。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包表2-1给出了是TCP/IP协议结构和OSI结构的对比。
表2-1 OSI参考模型和TCP/IP网络模型的对比
OSI TCP/IP
应用层
表示层 应用层
会话层
传输层 传输层
网络层 网络层
数据链路层
网络接口层
物理层
[4]从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。
1(应用层
在这个最高层中,用户调用应用程序来访闯TCP/IP互联网络,与传输层协调工作,负责接收和发送原始应用数据。最常用的有Telnet(远程登录协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、SNMP(简单网络管理协议)、HTTP(超文本传输协议)等。本系统根据实际应用需求,只实现HTTP和SMTP协议。
2(传输层
传输层主要是为两台主机上的应用程序提供端到端的通信。传输层有两个互不相同
第 3 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块传给下面的网络层、确认接收到的分组、设置发送最后确认分组的超时时钟等。UDP是一种面向数据报,不可靠的传输协议。基于传输性能的考虑,本文没有对UDP进行设计。
3(网络层
负责相邻计算机之间的通信。其功能包括三方面:
(1)处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
(2)处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
(3)处理路径、流控、拥塞等问题。
网络层包括:IP协议、ICMP控制报文协议、ARP地址转换协议、RARP反向地址转换协议。
4(网络接口层
这是TCP/IP软件的最低层,负责接收IP数据报并通过网络发送,或者从网络上接收物理帧,抽出IP数据报,交给IP层。图2.2总结了TCP/IP协议组在分层结构中对应的位置。
用户程序 HTTP SMTP
UDP TCP
ICMP IP IGMP
ARP 硬件接口 RARP
图2.2 TCP/IP协议族中不同层次的协议
2.2 TCMP协议栈的工作流程
[5]要了解TCP/IP协议栈的工作流程,首先要清楚封装和分用两个概念。封装就是发
第 4 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 送数据时要对数据进行逐层封装,即加上相应的首部,作为经过每层的标识(而分用是相对接收数据而言的,接收到的数据是按一定结构封装好的,再根据前面的首部信息,判断数据应交给上层哪一协议,并将相应的首部信息去除,这样依次向上传,最后可以得到所传送的原始数据。
2.2.1 封装的具体过程
当应用程序使用TCP传送数据时,数据被送入TCP/IP协议栈中,然后逐个经过每一层直到成为一串比特流送入网络。其中每一层都对收到的数据都要增加一些首部信息(有时还要增加尾部信息)。TCP传给IP的数据单元称作TCP报文段或简称TCP段。UDP数据与TCP数据基本一致,唯一的不同是UDP传给IP的信息单元称作UDP数据报。IP传给网络接口层的数据单元称作IP数据报。通过以太网传输的比特流称作帧。以太网数据帧
--1500字节之间。 的物理特性是其长度必须在46
2.2.2 分用的具体过程
分用的过程是指当目的主机收到一个以太网数据帧时,数据就开始从TCP/IP协议栈中由底向上升。每层协议都要去检查报文首部中的协议标识,以确定接收数据的上层协议,同时去掉各层协议加上的报文首部。
2.3 TCP,IP协议栈的设计
将嵌入式系统与lnternet技术结合主要存在的困难是lnternet的通信协议对于MCU来讲要求比较苛刻,要在有限的资源下实现嵌入式系统功能的“无限”发展,在单片机中利用有限的空间实现TCP/IP协议栈(这个难度是可想而的(而嵌入式系统中除部分32位处理器以外,大量存在的是8位和l6位MCU,支持TCP/IP协议将占用大量系统资源(
Embedded Internet是一个不断发展的技术,有其自有的特点,所以TCP/IP协议栈的设计必须考虑它的特殊性:
(1)最大程度的满足客户请求的实时性和突发性;
(2)嵌入式设备与Internet的网络互联和通讯链路得到保证;
(3)提供有效的拥塞控制机制;
(4)保证协议分层体系明确各层的接口;
因此设计中对协议进行必要约简的同时应该尽量保证其应有的机制,用以更好的实
第 5 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 现TCP/IP协议栈,提高性能。TCP/IP协议栈的主要功能有:
1.实时响应多个客户的连接请求,并为每个客户建立链接;
2.为设备和Internet之间的连接提供链路;
3.保证设备和Internet的透明互联;
4.为设备提供安全机制;
TCP/IP协议栈是按照网络体系分层思想设计的,其中每一层都被设计成一个功能相对独立的模块,负责处理各自的数据,然后通过
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
调用把控制权交给上层或下层的模块(设计过程中,对TCP/IP协议栈的数据包采用了全新的字节处理方式。为了尽量少的使用内存空间作为发送或接收数据的缓冲区,在不影响协议功能的前提下,尽量在发送或接收一个或多个字节数据的同时对数据进行打包或解包处理,而不是等到所有的数据打包后再发送或等完整的数据包接收到再进行解包,这样可以降低协议对内存作为数据缓冲区的要求。
2.4 TCP,IP的通信过程
TCP/IP的通信过程,可以简单形象地描述为“自上而下,自下而上”的一种过程。
发送方的应用层将数据流传递给传输层。传输层将接收的数据流分解成以若干字节为一组的TCP段,并在每段增加一个带序号的控制包头,然后再传递给网络层。
网络层在TCP段的基础上,再增加一个含有发送方和接收方IP地址的数据包头,同时还要明确接收方的物理地址以及到达目的主机的路径,然后将此数据包和物理地址传递给数据链路层。
在数据链路层进行组帧,将数据包封装成数据链路层的帧格式,然后通过物理层以比特流的形式发送给接收方计算机。在接收方计算机中,数据链路层先把接收到的数据包舍掉数据控制信息,再把它传递给网络层。
在网络层,先检查包头的检验和,如果IP包头的检验和与网络层算出的检验和相匹配,那么就取消IP包头,把剩下的TCP段传递给传输层,否则丢弃此包。
在传输层,首先检查TCP段头和TCP数据的检验和,如果与传输层算出的检验和相匹配,那么就取消TCP包头,将真正的数据传递给应用层,同时发出“确认收到”的信息。此时,在接收方应用层收到的数据正好与发送方所发送数据完全一样。
第 6 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 2.5 嵌入式TCP,IP协议的特点
TCP/IP的主要特点有:
(1)很好的可裁剪性。由于嵌入式应用系统千差万别,要求也不尽相同,同时对产品的成本、价格比较敏感,存储器的容量也比较有限的。因此必须根据嵌入式网络产品的具体功能,对完整的TCP/IP协议进行裁剪,特别是对应用层协议提供可裁剪性,以满足用户的不同需求。
(2)很强的可移植性。嵌入式应用的多样性决定了嵌入式应用平台也是变化多端的。因此,在开发网络协议栈软件的过程中,保证软件的可移植性是非常重要的。这样,在对嵌入式网络产品进行软、硬件升级的过程中除了与硬件直接相关的部分代码需要重新编写以外,不必再对上层协议进行大的改动。
(3)代码精简。嵌入式TCP,IP协议是标准TCP,IP协议的子集,只需要实现基本的、必要的功能,使生成的代码尽量精简。这对嵌入式网络产品降低开发难度、提高系统处
[6]理能力、节省有限的ROM和RAM空间是有着重要意义的。
第 7 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
3 嵌入式网络终端硬件设计
嵌入式网络终端的硬件结构如图3.1所示:
LCD显示
时钟芯片
隔
离
MSP430F149CS8900A电源供电变RJ45接口
压
器
外部电路
JTAGRS232接口
图3.1 嵌入式网络终端硬件结构图
3.1 MSP430单片机介绍
MSP430是美国德州仪器公司生产的系列单片机,该系列单片机还具有丰富的外设,且功耗很低,有着非常广阔的应用范围,主要有以下特点:
(1)处理能力强
MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。这些特点保证了可编制出高效率的源程序。
(2)运算速度快
MSP430 系列单片机能在25MHz晶体的驱动下,实现40ns的指令周期。16位的数据宽度、40ns的指令周期以及多功能的硬件乘法器(能实现乘加运算)相配合,能实现数字信号处理的某些算法(如FFT等)。
第 8 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
(3)超低功耗
MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压和灵
[7]活而可控的运行时钟方面都有其独到之处。
首先,MSP430 系列单片机的电源电压采用的是1.8-3.6V电压。因而可使其在1MHz的时钟条件下运行时,芯片的电流最低会在165μA左右,RAM保持模式下的最低功耗只有0.1μA。
其次,独特的时钟系统设计。在MSP430系列中有两个不同的时钟系统:基本时钟系统、锁频环时钟系统和DCO数字振荡器时钟系统。可以只使用一个晶体振荡,也可以使用两个晶体振荡器。由系统时钟系统产生 CPU 和各功能所需的时钟。并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。
(4)片内资源丰富
MSP430 系列单片机的各系列都集成了较丰富的片内外设。它们分别是看门狗、模拟比较器A、定时器A0、定时器A1、定时器B0、UART、SPI、I2C、硬件乘法器、液晶驱动器、10位/12位ADC、16位Σ-Δ ADC、DMA、I/O端口、基本定时器、实时时钟和USB控制器等若干外围模块的不同组合。
(5)方便高效的开发环境
MSP430 系列有OPT型、FLASH型和ROM型三种类型的器件,这些器件的开发手段不同。对于OPT型和ROM型的器件是使用仿真器开发成功之后烧写或掩膜芯片;对于FLASH型则有十分方便的开发调试环境,因为器件片内有JTAG调试接口,还有可电擦写的FLASH存储器,因此便采用先下载程序到FLASH内,再在器件内通过软件控制程序的运行,由JTAG接口读取片内信息供设计者调试使用的方法进行开发。
3.2 MSP430单片机复位电路
MSP430单片机内部有上电探测复位电路,可以在上电时产生一个POR信号使系统
[8]复位。本系统设计的复位电路可以实现系统掉电自动复位和手动复位两种功能,而且使上电复位更加可靠。如图3.2所示:
第 9 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
图3.2 MSP430单片机复位电路图
由于MSP430单片机是低电平复位,所以在正常工作时需要将复位引脚通过上拉电阻R4上拉成高电平(电容C1是利用电容电压不能突变,硬件上电后会形成一个较宽的低电平脉冲以保证有效复位,增加了上电复位的可靠性。电源稳定后要经过一定时间的延时,复位信号才会被撤销,防止电源开关或电源插头分合过程中引起抖动而影响复位。当电源电压瞬间下降时,为了保证系统有效复位,增加二极管Dl保证电容迅速放电,产生低电平复位信号。当程序跑飞而看门狗又失效时可以通过按键KEY手动复位( 3.3 网卡芯片CS8900A部分
[9]CS8900A是Cirrus Logic公司生产的一款16位的低功耗以太网控制芯片。它集成了以太网传输实现时所需要的所有数字和模拟电路,还包括了丰富的功能和配置选项。采用CS8900A的嵌入式以太网方案可以减小CPU的资源开销,有利于提高系统效率。
CS8900A主要的功能模块包括:一个直接的ISA总线接口;一个802(3MAC引擎;完整的超高速缓冲存储器(RAM);一个串行的EEPROM接口;一个完整的模拟前端10BASE(T和AUI接口。
(1)直接的ISA总线接口。CS8900A提供一个能直接驱动ISA总线的接口,它的片上总线驱动器可以产生24mA的驱动电流,使得CS8900A可以直接与ISA总线相连,不需要其它
第 10 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 的逻辑电平转换。
(2)802.3以太网MAC引擎。CS8900A的MAC引擎与IEEE802(3以太网标准完全兼容,支持全双工操作。它能处理以太网传输所有方面的情况,包括冲突检测、前导码的检测和生成、CRC的检测和生成。可编程的MAC功能包括:在冲突时重传、自动填充以太网帧。
(3)完整的存储器。CS8900A集成了4KB的片上存储器,可以缓冲整个的收发数据帧,从而避免了复杂的和低效的存储器管理机制。此外还提供MEMORY、I/O和DMA种操作模式,极大地提高了系统设计的灵活性。
(4)EEPROM接口。CS8900A提供了一个简单高效的串行EEPROM接口,上电后,储存在EEPROM的配置信息会自动读取。
(5)完整的模拟前端。CS8900A的模拟前端集成了一个曼彻斯特编,解码器、时钟恢复电路、10BASE(T收发器和一个完整的配属单元接口(AUI)。它提供AUI和10BASE-T的手动或自动选择,提供三个片内LED驱动器,分别指示连接状态、总线状态和以太网网络脉冲。
3.4 RJ45接口
这种接口就是我们现在最常见的网络设备接口,俗称“水晶头”,专业术语为RJ-45连接器,属于双绞线以太网接口类型。RJ-45插头只能沿固定方向插入,设有一个塑料弹片与RJ-45插槽卡住以防止脱落。这种接口在10Base-T以太网、100Base-TX以太网、1000Base-TX以太网中都可以使用,传输介质都是双绞线,不过根据带宽的不同对介质也有不同的要求,特别是1000Base-TX千兆以太网连接时,至少要使用超五类线,要保证稳定高速的话还要使用6类线。 3.5 时钟芯片
现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V,5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
第 11 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 3.6 其它外围电路
3.6.1 LCD模块
嵌入式网络终端加入LCD模块是非常有用的,它可以显示网络终端当前的信息及相
[10]关的网络状态信息,方便用户操作。LCD模块还采用了当前比较流行的LCDl602液晶,它具有微功耗、体积小、显示内容丰富、超薄轻巧等优点。设计中为了节省单片机I/O口资源,采用2根控制线,4根数据线的连接方式,如图3.3所示:
图3.3 LCD1602的接口示意图
3.6.2 数字温度传感器
本系统采用美国DALLAS公司推出的单总线数字温度传感器DSl8820。它具有独特的单线接口方式,在与微处理器连接时仅需要一根总线即可实现与微处理器的双向通信,将非电模拟量的温度值转换为数字信号输出。同时用户可以设置DSl8820温度报警的上下限值TH和TL,当所测温度超过给定范围时就会输出报警信号。图3.4便给出了DSl8820的电路连接图。
第 12 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
图3.4 DS18B20的接口电路图
3.6.3 报警电路
当有异常情况发生时,嵌入式网络终端除了给用户发送Email报警信息以外,终端本身也有相应的报警装置。报警电路比较简单,采用LED闪烁示警以及常见的蜂鸣器报警,如图3.5所示:
图3.5 声光报警电路
另外系统还加入了美国DALLAS公司的时钟芯片DSl302,可以记录异常事件发生的时间,方便用户查询,这里由于篇幅原因就不再详述。
第 13 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
4 嵌入式网络终端软件设计
4.1 软件整体模型框架
[11]TCP,IP协议是一种分层体系结构,本系统的软件设计也遵循这一原则。对每层协议进行了认真分析,然后采取逐层实现的方式,将各层协议按照统一的接口进行连接,来完成整个TCP,IP协议栈的设计。这种方法便于系统调试,有利于软件的移植和修改,也可以方便的利用通用软件代码对系统进行功能扩展。表4-1出了软件的整体模型框架。
表4-1 软件整体模型框架
应用层 通过以太网完成TCP,IP数据传输(实现HTTP,SMTP应用
传输层和网络层 实现ARP,ICMP,IP,TCP协议,并封装成应用程序接口(API)形式
数据链路层 CS8900A的硬件驱动(包括内部寄存器的读写,以太帧的收发等
物理层 由CS8900A芯片自动完成前同步码,CRC校验码的生成和检测 4.2 CS8900A驱动程序
4.2.1 CS8900A的工作原理
[12]CS8900A复位后默认的工作方式是8位I/O模式。在这种模式下,访问PacketPage存储器是通过8个16位的I/O口,它们被映射成16个连续的8位I/O空间。
MCU是通过操作这8个16位寄存器来完成对CS8900A所有内部寄存器的读写的。所以在编写驱动程序之前,有必要对这几个寄存器有所了解:
(1)Receive/Transmit Data Port0和Portl。MCU通过CS8900A的这两个端口实现与网络的数据交换,即从MCU发送数据到网络或将网络数据传输给MCU都要经过这两个端口。
用来传输16位数据,传输32位数据时要用到Port0和Port1 Port0
(2)TxCMD Port(在每一次传输操作开始前,MCU都必须将传输命令字写入这个端口,告知CS8900A有数据要发送以及如何发送。
(3)TxLengh Port。当传输命令字写入TxCMD后,紧接着将数据长度写入该端口,然后MCU才将数据通过Transmit Data Port0口写入CS8900A中。
(4)Interrupt Status Queue Port。用于描述中断事件的状态,在8位模式下未使用(
第 14 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
(5)PacketPage Pointer Port。在I/O模式下读写CS8900A的内部寄存器,必须先设置PacketPage指针,把要访问的寄存器地址写入到PacketPagc Pointer Port中。
(6)PacketPage Data Port0和Portl。所要访问的寄存器被映射到该端口,用于读取或写入寄存器的内容。Port0用于16位操作,32位操作时需要使用Port0和Portl。在I/O的模式下,利用CS8900A这种独特的Packet操作模式来存取CS8900A内部寄存器相当方便。
表4-2便给出了CS8900A在8位I/O模式下的映射表,基地址为0300H。
表4-2 CS8900A在8位I/O模式下的映射表
偏移地址 类型 描述
0000H Receive/Transmit Data(port0) 读/写
0002H 读/写 Receive,Transmit Data(port1)
0004H TxCMD(Transmit Command) 只写
0006H TxLengrh 只写
0008H hterrupt Status Queue 只读
000AH Packet Page Pointer 读/写
000CH Packet Page Data(Port0) 读/写
000EH Packet Page Data(Port1) 读/写
4.2.2 CS8900A驱动程序的实现
网卡芯片的驱动程序主要用于初始化CS8900A芯片,读写芯片内部寄存器,发送和接收以太网数据帧等。下面介绍CS8900A驱动程序的一些主要函数:
(1)void Init8900:用于初始化MSP430与CS8900A连接的端口,对CS8900A进行软件复位,并建立MAC地址接口。MSP430会以配置序列字的形式将MAC地址发给CS8900A。初始化完成后,MSP430就可以对CS8900A进行读写数据了。
(2)void Write8900:用于将一个l6位数据写入到CS8900A指定的寄存器中,写入顺序是little endian。
(3)void WriteFrame8900:主要功能是将一个16位数据写入到CS8900A的TX_FRAME_PORT中,用于处理器传输数据到CS8900A的发送缓存中。
(4)unsigned int Read8900:用于从CS8900A指定的寄存器中读出16位的数据,读
第 15 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 出顺序是little endian。
(5)unsigned int ReadFrame8900:用于从CS8900A的RX FRAME__PORT中读取16位数据到处理器内存中,读出顺序是little cndian。
(6)void CopyToFrame8900:用于从处理器内存的起始地址Source开始拷贝Size+字节写入CS8900A的TX FRAME PORT中。用于发送一整个准备好的数据帧。
(7)void CopyFromFrame8900:用于从CS8900A的RX_FRAME_PORT中读取Size个字节到处理器起始地址为Dest的内存中。
(8)void DummyReadFrame8900:主要功能是从CS8900A的RX_FRAME_PORT中读出并抛弃size4-字节数据,用于跳过接收数据帧。例如接收到的以太网数据帧中的目的物理地址就没有必要读取,因为这个物理地址就是CS8900A的MAC地址,因此可以跳过这6个字节,函数的形参Size必须为偶数。
(9)void RequestSend:用于在CS8900A中申请FrameSize个字节的发送缓存,在数据写XTX FRAME pORT前必须调用这个函数。
(10)unsigned int Rdy4Tx:用于查看CS8900A中上一帧数据申请的缓存现在是否可用,若可用则返回一个非零值,此时要发送的数据帧才可拷贝到TX缓存中。
(11)unsigned int ReadHBlST8900:主要功能是从给定的地址读出一个16位数据到处理器的内存中,这个功能用于读取CS8900A特殊的寄存器,读出顺序是little endian。
(12)unsigned hat ReadFrameBE8900:用于从CS8900A的RX FRAME_PORT中读出16位数据到处理器的内存中,读出顺序是bigendian,在读取上层协议数据时使用这个函数可以避免交换字节顺序。
4.3 TCP,IP模块程序
TCP/IP模块是整个系统软件的关键,在这一部分定义了网络用来收发数据的各种协[14]议。它利用CS8900A驱动程序所提供的各种读写函数来发送和接收数据,同时为上层应用程序提供简单易用的API接口函数。
4.3.1 全局参数的定义
在TCP/IP协议栈中有一些很重要的量需要定义为全局参数(可以是全局变量,也可以是全局常量)。例如P地址,网关地址,子网掩码,TCP端口号,重传计数器,定时器,发送和接收数据缓冲区的大小等。通过修改这些全局参数,可以灵活地改变协议栈
第 16 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 的某些重要特性,避免过多的参数传递消耗系统资源,同时有效提高了不同协议之间相互调用的速度。
4.3.2 缓冲区的定义
为了更好地接收和发送数据,于是在TCP/IP模块中定义了三个缓冲区:TxFramel、TxFrame2和RxTCPBuffer,如表4-3所示。TxFramel主要是给整个TCP数据帧,包括所有头部(Ethernet、IP、TCP)提供缓冲内存;TxFramc2主要是给TCP非数据帧,包括所有头部(Ethernet、IP、TCP)以及ARP、ICMP协议帧提供缓冲内存;RxTCPBuffer是给要接收的TCP数据提供缓冲内存。
表4-3 收发数据的缓冲定义
TxFramel
缓冲要发送的整个TCP数据帧
包括所有头部
TxFrame2
缓存要发送的TCPtE数据帧,包括所有
头部和ARP、Ich位协议帧
RxTCPBuffer
缓冲接收到TCP数据
通过改变符号常量的数值就可以改变这三个缓冲区的大小,增大缓冲区可以增加数据传输速度,因为这样可以减少因缓冲区不足而造成的处理时间延迟。
4.3.3 模块通信流程
在8位I/OT作模式下CS8900A不支持中断方式,因此MSP430处理器采用查询方式与CS8900A通信。在此基础上TCP/IP模块也是基于事件处理方式实现的,一般可能发生的事件有:?接收到数据。?应用程序触发一个事件(如打开一个TCP连接,发送数据等)。?传输超时。?出错(网络错误或连接被对方复位等)。
在TCP/IP模块程序中,函数DoNctworkSmff()就是用来处理TCP事件的。这个函数在
第 17 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 主程序中不断被调用,用来查询MSP430和CS8900A的一些标志位,然后根据标志位的值来调用不同的分支函数来处理事件,同时该函数还会根据TCP的不同状态机来处理相应的状态。该函数的流程图如图4.1所示:
读CS8900A的RxEvent寄存器
是否收到数据,处理数据帧,提取数据帧的信息Y
N
定时时间到, 处理重传,超时则关闭连接并清标志Y
N
根据TCP状态机理处理相应的状态
CS8900A空闲(则发送TxFrame2中内容TxFrame2缓冲区是否有发送请求Y
N
TxFramel缓冲区是否有发送请求CS8900A空闲,则发送TxFramel中内容Y
N返回
图4.1 DoNetworkStuff()函数流程图
当函数DoNetworkStuff()检测到有网络数据到达时,TCP,IP模块就会对数据帧进行相应的处理,处理的过程如下:
(1)首先根据数据帧的Broadcast和Individual标志位判断是广播地址还是私有地址。
(2)如果是广播地址则进行ARP数据处理,对ARP数据报进行解包分析。如果收到ARP请求且数据报的目的IP地址与本机IP地址相同,则准备ARP应答。
(3)如果是私有地址,并且是先前发出的ARP请求的应答时,则提取返回的MAC地址。如果是IP数据包,则进行IP数据报处理,解包分析IP数据报。IP报头中的目的IP地址与本机IP地址相同,则进一步根据协议类型标志判断是ICMP数据还是TCP数据。
第 18 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
(4)如果是ICMP数据则进行ICMP报文处理,并准备PING应答数据报。
(5)如果是TCP数据则对TCP消息段进行处理,首先判断是不是请求建立连接的消息段,然后根据TCP消息段中的标志位来改变TCP的状态。图4.2给出数据帧的处理过程。
就收到数据帧
私有地址 广播地址
处理ARP应答 IP 处理ARP请求
ICMP TCP
ProcesslCMPFrame() ProcessTCPFrame()
图4.2 接收数据帧的过程图
4.4 TCMP各层协议实现
4.4.1 以太网层实现
以太网层的主要功能是发送数据时完成以太网数据帧的封装以及对接收到的以太网数据帧进行解析处理。表4-4给出了以太网帧的封装格式,开始两个字段分别是以太网的目的地址和源地址,目的地址和源地址均为6个字节;接着是两个字节的以太网帧类型,用来表示后面数据的类型。对于IP数据包,该字段的值为0x0800;对于ARP请求或应答来说,该字段的值为0x0806。类型字段之后是数据部分,最后是CRC校验字段,由网卡自动添加。
表4-4 以太网帧的封装格式
目的地址 源地址 帧类型 数据部分 CRC校验 6 6 2 46-1500 4
在程序中分别使用函数ProcessEthlAFrame0和ProcessEthBroadcastFrame0来对接收到的数据帧进行分析处理,根据数据帧的类型字段交由上层ARP或IP层处理。
第 19 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
4.4.2 ARP协议实现
由于网络终端工作于单任务模式,每次响应都是针对特定的请求,并且系统自身资源有限,所以本设计在实现朋冲协议时去掉了标准ARP协议用到的高速缓存表和高速缓存控制模块,而是通过直接构造ARP数据报来实现触冲协议。
在本设计中,ARP协议主要完成两项功能:ARP应答和ARP请求,这两项功能分别
PrepareARP_REQUEST()来实现。 由函数PrepareARP_ANSWER0和
(1)ARP应答的实现(
如果接收的以太网帧的目的MAC地址是FFFFFFFFFFFF,即广播地址,就将要转入ProcessEthBroadcastFrame()进行处理。对于本设计来说,广播地址只处理ARP请求,其它协议不予理会。如果ARP请求数据帧的IP地址与本机IP地址相同则准备ARP应答,否则丢弃该ARP请求帧。准备ARP应答由PrepareARP_ANSWER()完成,这个函数将按照帧的格式将应答帧填充到发送缓冲区ANSWER[]中。它首先将原发送方的IP和MAC地址填入到接收方字段中,然后填入本机的MAC和IP地址完成装帧,最后由网络接口层的发送函数发送出去。这里使用TxFrame2[]是因为ARP和ICMP数据的分组长度是固定的,而TCP数据帧的长度是可变的,使用占用空间较小的TxFrame2[]可以节约系统空间。
图4.3则描述了ARP应答实现的流程图。
(2)ARP请求的实现
当网络终端要将采集到的信息发送给远端的某一监控中心时,第一次发送需要先发送ARP请求来获知对方的MAC地址。ARP请求由PrepareARP_REQUEST()来完成,它与准备ARP应答帧的过程相同,同样的按照ARP帧的格式将ARP请求帧填充到发送缓冲区TxFrame2[]中,以太网目的地址全填1,表示广播地址,然后再调用发送函数发送出去。对于接收到的以太网帧,如果在PrepareARP_REQUEST()函数中判断出了是先前发出的ARP请求的应答时,则由下列语句获取返回的MAC地址:
CopyFromFrame8900(&RemoteMAC,6);//存储对方MAC地址
TCPFlags |=IP_ADDR_RESOLVED;//置位TCP标志,说明得到了MAC地址。
4.4.3 IP协议实现
标准IP协议支持IP数据报的分片与重组,但这也会占用大量的系统存储空间和处理器资源。考虑到嵌入式网络终端的实际应用场合,每一次传输的数据报足够小,能够直
第 20 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 接通过网络传输,所以本设计实现的IP协议去掉了分片和重组功能,也去掉了耗费系统资源的路由机制。同时,还忽略了IP数据报中服务类型字段和选项字段的处理。
本设计实现的IP协议只完成两项功能:(1)通过头部校验和来检验收到的IP数据报是否正确, (2)在传输层发送的ICMP和TCP数据前面封装上IP头部信息,然后交由数据链路层进行帧封装。可以看出IP协议最主要的作用就是维护数据报的封装和分用,这也是IP协议最基本的功能。因此本系统没有设计专门的函数来完成IP协议的功能,而是将封装和分用功能嵌入到其它协议函数中来完成。
判断广播数据帧的帧类型是否为ARP请求,N
Y
ARP请求帧的目的IP地址是否与本机相同,N
Y
改变数据帧的操作码为ARP应答
用以太网源地址替换目的地址
交换发送端和目的端IP地址
填入本机MAC、IP地址
发送ARP应答帧
返回
图4.3 ARP应答实现的流程图
4.4.4 ICMP协议实现
本设计实现ICMP协议主要是应用PING命令功能来测试终端系统的网络连通性。由
第 21 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 于嵌入式网络终端的每次响应都是针对特定的请求,所以本系统只能够实现PING应答功能来响应接收到的PING请求命令,并没有实现PING请求功能,所以实现起来比较简单。
如果IP数据报的协议类型是ICMP时,数据报就会交由函数ProcessICMPFramc()来处理。在处理ICMP分组时只处理PING命令请求报文,其他的查询和差错报告分组不予理会。当确定是PING命令请求的报文后,就准备回送PING命令应答报文,并且是由函数PrepareICMP_ECHO_REPLY0来实现。程序同样使用TxFrame2[]作为发送缓冲区,添加口头部和以太帧头部信息来完成PING应答报文数据的封装。
图4.4给出了ICMP应答实现的流程图
N接收到的CMP包是否为PONG请求,
Y
填写以太网帧头
填写IP报文首部
填写ICMP报文首部
发送数据帧
返回
图4.4 ICMP应答实现的流程图
4.4.5 TCP协议实现
【】15TCP协议是整个TCP/IP模块中最为复杂的部分。TCP协议采用各种机制来保证它的可靠性传输,如TCP连接建立与关闭机制、超时重传机制、数据包确认机制、流量控制机制等删。本设计实现TCP协议就是实现这些机制,并且在不影响协议栈性能的前
第 22 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 提下做了适当简化。
(1)TCP报文段的定义
TCP报文是网络中交换与传输的数据单元。报文包含了将要发送的完整的数据信息,其长短很不一致。报文也是网络传输的单位,传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些信息段,那些就是报文头以一定格式组织起来的数据.
(2)TCP有限状态机的定义
TCP有限状态机是TCP模块中最重要的部分,整个TCP模块程序的设计都是围绕有限状态机的变迁展开的。
TCP有限状态机是基于事件输入来进行变迁的。当某一事件(如收到建立连接请求)发生时,TCP会根据当前的状态来处理事件并根据事件更新自己的状态。根据TCP这种基于状态处理事件的方式,在程序中使用了典型的Switch?Case?语句。
(3)Socket状态标志
在TCP模块中需要设置一些标志位来表明当前的连接状态,通过查询这些标志位,TCP会调用相应的函数来进行操作。全局Socket状态变量SocketStatus就是表明状态的标志寄存器,包括4个状态和4个错误标志位。如表4-5所示:
表4-5 SocketStatus状态标志寄器
Bit7-Bit4 Bit3 Bit2 Bit1 Bit0 SOCK_ERRSOCK_TX_BUF_RELESOCK_DATA_AVAILSOCK_CONNECSOCK_ACTIOR ASED BLE TED VE
SOCK_ACTIVE(Bit 0)
当应用程序调用TCPPassiveOpen()或TCPActiveOpen()函数时,该标志位被置位,表明了正在建立TCP连接,此时不允许再调用上述两个函数。当连接失败或者连接关闭时,该标志位自动清空,所谓“自动一是对应用程序而言的,实际上要在协议栈中完成清零。
SOCK_CONNECTED(Bit 1)
该标志置位表示TCP连接建立成功,TCP状态变为ESTABLISHED,这时可以使用TCP发送和接收函数进行数据收发了。当关闭或复位TCP连接时,该位清零。
SOCK_DATA_AVAILABLE(Bit2)
第 23 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
该标志置位表示接收到一个新数据,请求从接收缓存中读出。应用程序从指定的接收缓冲区TCP RX BUF中读取长度TCPRxDateConut的数据,在接收缓存中的数据被取走后,立即调用函TCPReleaseRxBuffer0清空缓存,以便接收新的数据。该过程如图4.5所示:
接收缓冲区中是否有数接收字节数据送达,
从TCP_RX_BUF中读
出数据
清空接收缓冲区调用
函数
返回
图4.5 数据接收流程图
SOCK_TX_BUF_RELEASED(Bit 3)
该标志置位表示可以向发送缓冲区TCP_TX_BUF中写入数据。由于系统存储空间有限,发送缓冲区一次只提供一个数据包的容量,只有在得到上一帧数据的ACK响应后,才进行下一帧数据的发送。因此当上一帧数据发送成功后该标志置位,此时可以向发送缓冲区写入数据,同时害要设置发送的字节数TCPTxDataCount,最后还会调用发送函数TCPTransmitTxBuffer0发送数据包,该过程如图4.6所示。
第 24 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
Y发送缓冲区空闲?拷贝发送数据到TTCP_TX_BUF
设置发送字节数
N调用TCPFTransmitTxBuffer()
发送数据
返回
图4.6 数据发送流程图
SOCK_ERR(Bit 4--Bit 7)
SocketStatus状态标志寄存器的高4位被设计为Socket错误代码标识。在TCP传输过程
中如果有错误发生,则将错误代码写入至lJSoeketStatus的高4位,通过使用定义的SOCK
可以找出错误发生的原因。除SOCK_ERR_OK以外其它的错误都将引起连接关闭,表4-6
则给出了错误代码的含义。
表4-6 SocketStatus错误代码
错误代码(Err code) 错误原因
错误代码(Err code) 错误原因
无错误
SOCK_HRR OK
当对方没有在规定时闻内响应 SOCK_ERR_ARP_TIMEOUT
本机的ARP请求时,该错误产生
TCP通信超时错误,TCP数据包多次重传之
SOCK_ERR_TCP_ TIMEOUT 后,仍然没有收到对方的ACK响应,产生该
错误
当本机正在建立的TCP连接或者已经建立的SOCK_ERR_CONN_RESET
连接被对方复位(收到数据包)时,产生该错误
第 25 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
当收到远端TCP发送的表示发生致命错误的
SOCK_ERR_REMOT
非法报文段时,产生该错误
当网络接口芯片发生错误,而导致无法收发
SOCK_ERR_ETHERNET
数据包时,产生该错误
(4)TCP建立连接,数据传输和关闭连接机制的实现
?打开连接
打开TCP连接,有被动打开和主动打开两种方式,并通过调用TCPPassivcOpen()和TCPActivcOpen()来实现。被动打开函数TCPPassivcOpen()一般在系统作为服务器时使用,它使得TCP处于侦听状态,调用该函数之前要给变量TCPLocalPort赋值,表明协议要侦听哪个端口,例如系统作为Web服务器时,TCPLocalPort=80,表明要侦听HTTP端口。
主动打开函数TCPActivcOpen()一般在系统作为客户机时使用,在调用该函数之前,必须设置远端的口地址以及本地和远端的端口,例如当系统作为SMTP客户机时,远端端口设置TCPRemotePort=25,25为SMTP端口,系统发送一个ARP请求可以得到远端邮件服务器的MAC地址,然后发送SYN报文段请求建立连接。
?数据传输
连接一旦建立,就可以进行数据传输了。数据的接收和发送是根据SockctStatus状态标志寄存器的相关标志来进行的。
对于接收到的TCP报文段通过调用ProccssTCPFrame()函数进行处理。它首先判断到达的报文段是否属于本地TCP连接,如果是属于的,则根据到达报文段的内容以及当前TCPStateMachine所处的状态来进行相应的状态改变,如果是TCP数据则要将数据拷贝到RxTCPBuffer存储空间中。
当需要发送TCP数据时,便需要通过调用函数PrepareTCP_DATA_FRAME()及函数PrepareTCPFrame()来完成。PrcparcTCPFrame()主要针对无数据的TCP报文段,如请求建立连接的SYN报文段和确认响应的ACK报文段,由于这些报文段的数据量小,所以使用TxFrame2[]缓冲区;PrepareTCP_DATA_FRAME()是针对TCP数据传输的,使用TxFramel[]缓冲区。
?关闭连接
第 26 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
引起关闭TCP连接的事件很多,正常的情况是本地端调用TCPClose()函数关闭或者由远程TCP端关闭。另外,当重传次数超限或者收:至URST复位报文时也会引起连接关闭。
(5)超时重传机制的实现
TCP传输的可靠性是由重传确认机制来实现的。TCP每发送一帧数据后,都要等到接收端的ACK确认后才发送下一帧的数据。如果在规定的时间内没有收到上一帧数据的AC量确认就会触发重传,这就是TCP的超时重传机制。
为了避免由于传输数据丢失而引起TCP连接的中断,TCP使用定时时间来控制数据的重传。将每次发送的数据类型写入变量LastFramcSent中,用于记录发送数据帧的类型。
当超过规定时间RETRY TIMEOUT时,就会调用TCPHandleRetransmission()函数来重传上一帧数据,数据帧的类型已经被记录在LastFrameSent中(在程序中定义了最大重传次数MAX RETRYS,当重传次数超过这个值时,则放弃该数据帧的传送。然后关闭当前连接,并将相应的错误标志置位(
(6)简化窗口机制
标准TCP,IP协议栈采用的滑动窗口机制是一种在保障流量控制和提高网络传输效率之间折中的方案,它允许发送方在等待确认到来前连续发送多个TCP报文段。
TCP滑动窗口的确认机制是一种批量的确认,处理器要对多个数据报的连续传输进行维护和处理,困难较大。考虑到MSP430单片机的性能以及本系统的实际应用特点,本设计去掉了TCP滑动窗口的实现,而是要求在数据发送过后必须等到ACK回应后才可以继续发送下一个数据包,发送和应答一一对应,不支持同时发送多个TCP报文段,对收到的同步和超前的数据包直接丢掉。
(7)“双发送缓冲”机制
TCP协议层在进行通信时存在两种TCP报文段:一种是只包含TCP报头的报文段,例如ACK确认报文和请求建立连接的SYN报文,这种报文段的字节较少;另一种是在TCP连接建立以后用于传输数据包的含数据段的TCP报文段,这种报文段的字节较多。为此,系统专门为数据传输分配了TxFramel[]和TxFrame2[]两个缓冲区,其中TxFramel[]用于传输包含数据段的TCP报文段,TxFrame2[]用于传输只包含TCP报头的TCP报文段以及ARP报文、ICMP报文等字节较少的数据报。考虑到嵌入式网络终端用于传输采集到的数据信息,每一次传输的数据量不大,采用这种“双发送缓冲”的机制既可以满足
第 27 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 应用要求,同时又节约系统存储资源。
4.5 应用层软件的设计实现
4.5.1 嵌入式web服务器设计
由于单片机的存储空间有限,嵌入式Web服务器只能够提供一个储存在MSP430的FLASH存储器中的静态HTML页面。对于动态实时数据的更新或者处理POST请求需要生成新的页面时,是通过对现有静态页面的关键字段进行替换修改实现的。
嵌入式Web服务器一直处于LISTEN状态等待连接,当有客户端连接接入后,则完成接收数据,发送网页数据,关闭连接等操作,然后再等待下一个客户端的连接。嵌入式Web服务器是应用HTTPServer()函数实现的,HTTPServer()是用于解析GET和POST请求命令的,根据浏览器的请求发送相应的网页页面。
嵌入式Web服务器的设计是一个典型的周期性调用函数DoNetworkStuff0的例子。当Web服务器收到客户端的连接请求后,就会发送一个HTTP头部和存储在单片机FLSAH中的HTML代码。
4.5.2 嵌入式SMTP客户机设计
嵌入式SMTP客户机的设计是基于客户机和邮件服务器之间进行邮件传输时所使用的命令和响应来实现的。发送邮件时,嵌入式SMTP客户机发送平台向邮件服务器发送命令,邮件服务器根据自己的情况返回相应的应答。
嵌入式SMTP客户机发送Email数据是以主动方式打开的,在打开之前,需要先设置远端邮件服务器的IP地址以及本地端和远端的端口。
嵌入式SMTP客户机可以将用户想要的信息以Email的形式发送到用户指定邮箱。例如在嵌入式网络终端运行的过程中可以对某一信号(如烟雾浓度,门窗开关等)进行监控,当检测到有异常情况发生时,立即向用户邮箱发送一封Email报警邮件,邮件内容记录了发生的异常情况和异常情况发生的时间,方便用户在第一时间内采取措施。
4.5.3 嵌入式微型网关设计
本系统设计串口数据与网口数据相互转发的功能时,可以使网络终端连接RS232和Internet两个不同的网络,在某种意义上起到了嵌入式微型网关的作用,使本系统的应用范围进一步扩大。在网络通信调试成功的基础上,实现串口数据与网口数据的相互转发
第 28 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 还是比较简单的。
在具体实现中分别用到了四个缓冲区和两个发送函数,分别是:
1. 网络数据发送缓冲区TCP_TX_BUF和接收缓冲区TCP_RX_BUF,串口数据发送缓冲区TXBUF0和接收缓冲区RXBUF0,网络数据发送函数TCPTransmitTxBuffer()以及串口数据发送函数UARTtransmit ()。
2. 当网络数据接收缓冲区TCP_RX_BUF中有数据时,调用UART将数据发送到串口网络中,从而实现数据转发的功能。
图4.7给出了实现函数socket server()的流程图。
Y是否有串口数据要发送到网口,串口数据拷贝到发送缓冲区
N
网口是否有数据到达,TCPTransmitTxBuffer()
Y清空串口接收缓冲区
N
URAT_transmit()
释放并清空接收缓冲区
图4.7 函数socket_sewerO实现流程图
第 29 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
5 嵌入式网络终端应用测试
前面几章介绍了嵌入式网络终端的设计,这一章将对嵌入式网络终端的应用情况进行测试。测试前需要先根据校园网IP地址的分配,为嵌入式网络终端设置合法的IP地址、网关、子网掩码,然后使用直连网线将网络终端与集线器或交换机相连,使其成为校园网中合法的一员,这样就可以对网络终端进行测试了。
5.1 TCP/IP连接测试
Ping 用于检验TCP/IP连接是否建立,数据能否发送和返回,如果你不能确定安装和配置是否已完成,或完成的是否准确,那么第一步就是“ping 本地主机”,如果基本正常,终端上就会显示出一系列的信息,告知有多少字节从主机发出,顺序,ttl,以及收/发64字节的包的全过程所需的时间。如下所示:
图5.1 使用ping 测试主机的网速
5.2 SMTP和WEB发信的比较
比较前需要知道服务器的IP地址,在DOS环境下可以通过nslookup来命令查询。nslookup命令用于查询一台机器的IP地址和其对应的域名,它通常需要一台域名服务器(DNS)来提供域名服务。DNS是域名服务器,它的作用是将网址翻译成IP地址图5.2给出了使用nslookup命令查询一台主机的IP地址。
第 30 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
图5.2 使用nslookup查询邮箱服务器IP地址
SMTP是一种电子邮件的通讯协议,客户端直接连接到服务器的特定端口,从而事先发信。对应的另一种是web方式,你不用专用的客户端软件,而是用IE登录某个网站,该网站又与邮件服务器联系,就是“用户”,“web服务器”,“邮件服务器”模式。
首先进行SMTP的发信测试,通过Fox Mail软件来发送一封Email邮件,邮件内容已经填写在程序中。在发送过程中,我们可以根据LCD模块显示的服务器应答代码来实时了解Email邮件的发送状态。如图5.3所示:
图5.3 用Fox Mail来发送邮件
再进行Web方式的发信测试,我们可以通过平常进场接触的邮箱来发信,这种方式下,Web服务器生成一定的存储空间方便我们存储邮件,中间要通过Web服务器的转发。下图为一普通WEB方式发信的普通邮箱图。
第 31 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
图5.4 用QQ网页邮箱发信
尽管如此,嵌入式SMTP客户机已基本实现了Email发信的功能,由于ESMTP通过身份验证之后的邮件发送过程与SMTP方式相同,当这个问题得到解决之后,嵌入式SMTP客户机发信Email的功能会比较完善。
5.3 串口与网口数据转发功能的测试
要进行串口与网口数据转发功能的测试,需要在PC机B上安装客户端软件clint,用于收发网络数据;而网络终端的串口则需要一根串口延长线与另一台PC机A相连,在PC机A上借助串口调试助手来完成串口数据的收发。图5.5给出了系统测试的示意图。
TCP/IP
交换机系统终端
TCP/IPRS232
PC机A
PC机B
图5.5 系统测试结构图
第 32 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
结论
随着嵌入式应用和Internet的结合,嵌入式Internet技术将有很好的发展前景,特别是在要求低成本、低功耗的场合,使用8位和16位MCU直接接入Internet将是最经济最简便
位MSP430单片机和低功耗以太网芯片的选择。本设计也就是采用性价比比较出众的16
CS8900A共同构造了一个直接接入Internet的嵌入式网络终端,并实现了网络数据的传输和处理。在嵌入式网络终端的设计与实现过程中,主要完成了以下工作:
(1)在查阅和消化大量资料的基础上,对国内外嵌入式Internet技术解决方案进行了分析和研究,根据实际情况制定出采用低端MCU和通用以太网芯片相结合的方法来构建嵌入式Internet的系统实现方案。
(2)在方案确定的基础上,完成了嵌入式网络终端的硬件平台设计,包括整体框架的规划,各器件的选型,硬件电路的接口设计以及系统硬件调试。
(3)针对嵌入式系统的应用特点,实现了应用于低端MCU的嵌入式TCP/IP协议栈,包括以太网芯片CS8900A驱动程序的实现,TCP/IP协议栈各层协议的实现。协议栈是结合TI公司提供的TCP/IP协议包来实现的,将协议功能封装为API函数的形式,方便应用层调用。
(4)在精简TCP/IP协议栈的基础上完成了应用层功能的设计,包括嵌入式Web服务器、嵌入式SMTP客户机以及嵌入式微型网关的功能实现,为今后专用的接入Internet的通信产品研究提供了设计参考。
总之,嵌入式Internet技术的发展方向是设计实现一个灵活的、低成本的、
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
化的、安全可靠的嵌入式因特网方案。本方案实现的这种嵌入式Intemet系统,可根据一些具体的应用,开发出专用的接入Intemet的通信产品供用户使用。因此,本系统可以作为下一步研究开发的平台或基础,具有较好的研发延续性。
第 33 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
参考文献
[1] 李素侠,段友祥(嵌入式TCP/IP协议的分析与研究[J]. 微计算机信息, 2005: 1-3(
[2] 李阳明,齐志强,师丽彩(嵌入式Internet应用研究[J](电子工程师(2005,31(7)(
25(6)( [3] MSP430 Internet Connectivity(SLAA137)[J](TI Corporation,2001,
[4] 付小晶,贺建飚(嵌入式因特网技术及其发展[J](电子科技(2004,30(3)(
[5] 罗子林(嵌入式Internet常见接入方式的研究[A](计算机教育(2007:25-40.
[6] 刘淑霞,孙学农,杨宏等(嵌入式Internet接入方案的研究[N](青岛理工大学学报(2006,27(3)(
[7] 蔡虔,涂燕琼(五种嵌入式Internet接入方案的研究分析[P](科技广场(2006(
[8] 钟燕华(嵌入式Internet技术的实现方法[N](宁波大红鹰职业技术学院学报(2007,40(12)(
[9] 李艳红,李国(嵌入式Internet的实现方法浅析与应用[N](计算机工程(2005(31)(
[10] Pete Loshin著(刘谦苏建平王军平等译(TCP/IP透彻理解(第四版)[M](北京:电子工业出版社,2003:60-90(
[11] Douglas E(Comer著(TCP/IP网络互连卷I原理、协议和体系结构(第5版)(英文版)[M](北京:人民邮电出版社,2006:15-30(
[12] M.Tim Jones著(路晓村,徐宏,王泰东等译(嵌入式系统TCP/IP应用层协议[M](北京:电子工业出版社,2003:12-50(
[13] Plumer, An Ethernet Address Resolution Protocol[D](2007:110-115.
[14] Texas Instruments, MSP430x13x,MSP430x14x,MSP430x14x1 MIXED SIGNAL
MICROCONTROLLER[Z].2000:102-105.
[15] Cirrus Logic, CS8900A Product Data Sheet[Z].2001:25-60.
第 34 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
致谢
在论文完成之际,我要衷心地感谢我的导师肖鸿教授,在近三年的求学生涯中,肖老师不仅传授给我知识,给予我指导和关心,更以师长风范教育我如何做人、做事。他治学严谨、务实求精的精神使我受益匪浅。在整个设计期间,肖老师更是倾注了大量的精力,从论文选题、开展调研到设计调试阶段一直给予指导与启发,使得设计任务顺利完成,同时更进一步培养了我独立开展科研工作的能力。在此谨向肖老师表示最真诚的感谢。
同时要感谢班上的同学们,在我的毕业设计期间他们给予了我大量的帮助并提出了有益的建议。与他们的相处使我倍感同窗之谊的珍贵与美好,我永远不会忘记在我遇到困难和挫折时他们对我的支持与鼓励,在此向他们表示深深的感谢并祝福他们在以后的人生路上平安、快乐。
最后我还要感谢我们寝室的好兄弟们,搞毕业设计时有几次搞到了凌晨,吵到了他们的休息,他们也没任何责怪的意思。内心感到非常抱歉~
第 35 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
附录
(1)全局参数的定义
#define MYP_1 172 //本地IP地址
#define MYIP_2 21 #define MYIP_3 204 #define MYIP_3 235 #define SUBMASK_1 255 //子网掩码
#define SUBMASK_1 255 #define SUBMASK_1 255 #define SUBMASK_1 0 #define GWIP_1 172 //网关地址
#define GWIP_1 21 #define GWIP_1 204 #define GWIP_1 193 #define MAX_TCP_TX_DATA_SIZE 768 //发送缓冲区的最大值 #define MAX_TCP_RX_DATA_SIZE 536 //接收缓冲区的最大值 #define MAX_ETH_TX_DATA_SIZE 60 //2级缓冲区,用于ARP,ICMP数据 #define MAX_RETRYS 4 //在复位之前重传的次数 #define DEFAULT_TTL 64 //发送包的存活时间
#define RETRY_TIMEOUT 8 //最多8×262ms来等待ACK #define FIN_TIMEOUT 2 //等待FIN的ACK的最大时间2 X 262ms
(2)缓冲区的定义
unsigned char TxFramel[ETH_HEADER_SIZE+IP_HEADER_SIZE+
TCP_HEADER_SIZE+MAX_TCP_TX_DATA_SIZE];
unsigned char TxFrame2[ETH_HEADER_SIZE+MAX_ETH_TX_DATA_SIZE]; unsigned char RxTCPBuffer[MAX_TCP_RX_DATA_SIZE];
(3)以太网数据帧的封装格式在程序中定义如下:
第 36 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
#define ETH_DA_OFS 0//目的MAC地址
#define ETH_SA_OFS 6//目的MAC地址
#define ETH_TYPE_OFS 12 //帧类型区域
#define ETH_DATA_OFS 14 //帧数据部分
#define HEADER_SIZE 14 //以太网帧头部长度 #define FRAME_ARP (ox0806) //帧类型为ARP #define FRAME_IP (ox0800) //帧类型为IP
(4)对ARP数据帧进行了如下定义
#define ARP_HARDW_OFS (ETH DATA OFS+0)//硬件类型 #defineARP_PROT_OFS(ETH DATA OFS+2)//协议类型
#defineARP_HLEN_PLEN_OFS(ETH DATA OFS+4)//硬件地址长度 #define ARP_OPCODE_OFS(ETH DATA OFS+6)//协议地址长度 #defineARP_SENDER_HA_OFS(ETH DATA OFS+8()//发送端硬件地址 #defineARP_SENDER_IP_OFS(ETH DATA OFS+14)//发送端口地址 #define ARP_TARGET_HA_OFS(ETH DATA OFS+18)//目的端硬件地址 #define ARP_TARGET_IP_OFS(ETH_DATA_OFS+24)//目的端IP地址 #defineARP_FRAME_SIZE 28//ARP报文长度为28个字节
(5)对IP报头信息的定义如下:
托efine IP_VER_IHL_TOS_OFS(ETH_DATA_OFS+0)//版本,头长度 #define IP_TOTAL_LENGTH_OFS(ETH_ DATA_OFS+2)//帧的总长度 #define IP_IDENT_OFS(ETH_DATA_OFS+4)//标识
#defme IP_FLAGS_FRAG_OFS(ETH_DATA_OFS+6)//标志和分片偏移 #define IP_FLAGS_FRAG_OFS(ETH_DATA_OFS+8)TTL和协议类型 #define IP_FLAGS_FRAG_OFS(ETH_DATA_OFS+10)//校验和 #define IP_FLAGS_FRAG_OFS(ETH_DATA_OFS+12)//源地址 #defhle IP_FLAGS_FRAG_OFS(ETH_DATA_OFS+16)//目的地址 #define IP_FLAGS_FRAG_OFS(ETH_DATA_OFS+20)//数据 #define IP_HEADER_SIZE 20//IP头部长度
第 37 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
(6)ICMP报头信息定义如下:
#defino ICMP_TYPE_CODE_OFS (IP_DATA_OFS+0)//消息类型 #define ICMP_CHKSUM_OFS (IP_DATA_OFS+2)//校验和 #define ICMP_DATA_OFS(IP_DATA_OFS+2)//数据
#define ICMP_HEADER_SIZE 4//头长度
关于ICMP报文属性的定义:
#define ICMP_ECHO 8//消息类型是回送请求 #define ICMP_ECHO_REPLY 0//消息类型是回送应答
(7)TCP报文段的定义如下:
#define TCP_SRCPIRT_OFS (IP_DATA_OFS+0) //源端口 #define TCP_DESTIPORT_OFS (IP_DATA_OFS+2) //目的端口 #define TCP_SEQNR_OFS (IP_DATA_OFS+4) //序列号 #define TCP_ACKNR_OFS (IP_DATA_OFS+8) //确认号 #define TCP_DATA_CODE_OFS(IP_DATA_OFS+12) //首部长度和控制位 #define TCP_WINDOW_OFS (IP_DATA_OFS+14) //窗口大小 #define TCP_CHKSUM_OFS (IP_DATA_OFS+16) //校验和 #define TCP_URGENT_OFS (IP_DATA_OFS+18) //紧急指针 #define TCP_DATA_OFS (IP_DATA_OFS+20) //数据部分 #define TCP_HEADER_SIZE 20//定义的头长度
(8)TCP有限状态机的定义
#define ICMP_TYPE_CODEOFS IF 20//定义的头长度 #define ICMP_CHKSUM_OFS(IP_DATA_OFS+2)//校验和 #define ICMP_DATA_OFS(IP_DATA_OFS+2)//数据
材efine ICMP_HEADER_SIZE 4//头长度
(9)关于ICMP报文属性的定义:
#define ICMP_ECHO 8//消息类型是回送请求
#define ICMP_ECHO_REPLY 0//消息类型是回送应答 (10)LastFrameSent的类型定义如下:
typedefenum{
第 38 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现
ARP_REQUEST,
TCP_SYN_FRAME,
TCP SYN_ACK_FRAME,
TCP_FIN_FRAME,
TCP_DATA_FRAME,
}TLastFrameSent;
TLastFrameSent LastFrameSent;
(11)HTTP头部内容如下:
const unsigned char GetRespome[]=
{
“HTTP/1.0 200OK\r\n:”//协议类型1.0,代码200,连接OK “Content-Type:text/html\r\n”//本地要发送的数据类型 “\r\n”//表明HTTP-header结柬
}
(12)SMTP客户机与邮件服务器之间对话的实例:
S:220 newmail(dlmu(edu(cn 显示服务器的标识名称 C:ehlo 向服务器标识用户身份,ESMTP命令,发信需要认证( (C:heIo_向服务器标识用户身份,不用认证,直接跳到mail from命令) (S:250 newmail(dlmu(edu(cn)
S:250-newmail.dlmu.edu.cn 250-AUTH=LOGIN
250-PIPELINING
250 8BITMIME
C:auth
C:auth login--------------------------------进行用户身份验证 S:334 VXNIlcm5hbWU6-------------------------要求输入用户名 C:bGllbDIwMDE=------------------------------BASE64加密后的用户名 S:334 UGFzc3dvcmQ6--------------------------要求输入密码 C:MTk4MjIxNA=-------------------------------BASE64加密后的密码
第 39 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 S:235 go head ----------------------------身份认证成功
(535 auth failure ------------------身份认证失败)
C:mail from:
-------mail from地址 S:250 ok--------------------------------------命令执行成功
C:rept to:--------------目的地址
S:250 ok no problem sir----------------------命令执行成功
C:data---------------------------------------数据传输初始化
S:354 go head --------------------------------开始传输数据
C:from: liul2001@newmail.dlum.edu.cn C:to: liul2001@newmail.dlum.edu.cn C:date:01 Jan 08 20:13:02
C:subject:hello dlum newmail C:
C: This is a test mail,you don’t reply it.
C:-----数据内容,包括邮件头部信息和邮件内容,以CRLF.CRLF结束数据传输 S:250 ok I will take care of that right away air 1188462005 qp 52008
----------命令执行成功
C:quit------------------------------------------------结束会话
S:221 newmail.dlum.edu.cn-----------------------------断开连接
(13) 嵌入式SMTP客户机设计:
const unsigned char smtp_date[]={“Date:01 Jan 08 20:13:02\r\n”}; const unsigned char smtp_from[]={“From:liul2001@newmail.dlum.edu.cn\r\n”}; const unsigned char smtp_to[]={“To:liul2001@newmail.dlum.edu.cn\r\n”}; const unsigned char smtp_subject[]={“Subject:liul2001@newmail.dlum.edu.cn\r\n”}; const unsigned char smtp_body[]={“This is a test mail,you don’t reply it.\r\n”}; const unsigned char email_over[]={“\r\n”};
const unsigned char EHLO_hostname[]={“EHLO\r\n”};
const unsigned char LOGIN[]={“AUTH LOGIN\r\n”};
const unsigned char Base64_Username[]={“用户名base64编码\r\n”};
第 40 页 共 41 页
基于MSP430CS8900A的嵌入式以太网系统的设计与实现 const unsigned char Base64_Password[]={“密码base64编码\r\n”};
const unigned char smtp_mail_from[]={“MAIL FROM: \r\n”}
const unigned char smtp_rept_to[]={“RCPT TO: {\r\n”};
const unsigned char smtp_data[]={“DATA\r\n”};
const unsigned char smtp_quit[]={QUIT\r\n”};
const unsigned char smtp_noop[]={“NOOP\r\n”};
const unsigned char smtp_help[]={“HELP\r\n”};
第 41 页 共 41 页