嵌入式TCP/IP协议栈在单片机上的实现
作者:王 芳,周优霞
来源:《现代电子技术》2010年第10期
摘 要:给出单片机上网的可行方案,采用SST89E564RD单片机,既提供了网关服务,也实现了在线仿真和下载的功能。由于51单片机资源有限,精简了TCP/IP协议族,在8位单片机上实现了UDP、TCP、ICMP、IP、ARP协议,为嵌入式系统通过以太网接入Internet打下了基础。经过几个月的软硬件测试表明:系统设计合理、稳定可靠。
关键词:单片机; 以太网; TCP/IP; UDP
中图分类号:TP393 文献标识码:B
文章编号:1004-373X(2010)10-0198-04
Realization of Embedded TCP/ IP Protocol Stack on MCU
WANG Fang1, ZHOU You-xia2
(1.School of Electronics and Information Engineering, Sanjiang University, Nanjing 210012, China;
2. Property Division of Xisan District, Wuxi 214000, China)
Abstract:A feasible project about MCU access to the Internet is presented, With SST89E564RD, the Ethernet protocol gateway services are provided, and the on-line debugging and downloading functions are realized., The TCP/IP protocol family is simplified because of the limited resources of 51 MCU. The UDP, TCP, ICMP, IP, ARP protocols were achieved on an 8-bit MCU, which lays the good foundation for embedded system to access the Internet through Ethernet. The software and hardware testing in several months shows that the new detection system is reasonable, stable and reliable.
Keywords:MCU; Ethernet; TCP/IP; UDP
随着嵌入式设备与网络的日益结合,在单片机系统中引入TCP/IP协议栈,以支持单片机接入网络,成为嵌入式领域的一个重要方向。在此对基于SST89E516RD单片机的TCP/IP协议栈的实现方法给予讨论。选用SST89E516RD单片机实现了在线仿真和编程的功能,大大节约了开发成本。采用VB 6.0语言与Window 98/2000/XP等为软件开发平台,对系统进行了测试。经过几个月的软硬件测试表明:系统设计合理、稳定可靠,已基本实现了最初的设计目标。对其他类似系统移植该项技术奠定了基础,有很好的参考价值。
1 系统硬件实现
整个系统以SST89E516RD单片机为核心,通过RTL8019AS以太网控制芯片实现远程通信。串口完成网卡参数的修改、在线仿真。在系统中还使用X5045作为外部扩展的E2PROM,用来存储IP地址、物理地址以及网卡的其他配置信息,同时X5045还具有电压监控、看门狗定时器、上电复位三种功能,使用X5045监控系统的运行过程,当系统不稳定时可以进行有效地复位。图1为系统硬件结构图。
图1 系统硬件结构图
2 系统软件实现
系统软件主要包括客户端和服务器端软件的设计,主要有以下几部分内容:
(1)RTL8019AS的初始化和驱动程序的设计;
(2)数据帧的发送和接收子程序;
(3)TCP/IP协议栈程序的设计;
(4)客户端和服务器端程序的设计;
(5)X5045看门狗和E2PROM程序的设计。
系统的主程序流程图如图2所示。
由图2可知,系统首先完成对单片机定时器、串口、网卡芯片和以太网等部分的初始化,然后进入以太网处理部分的主程序,通过定时器中断进行网口数据的超时出错处理,并完成TCP定时器保活和ARP表生存时间的更新。
图2 主程序流程图
2.1 系统初始化
所谓初始化和驱动程序是指实模式下一组硬件芯片的驱动子程序,它们屏蔽了底层硬件处理细节,同时向上层软件提供与硬件无关的接口。主要包括定时器初始化,初始化PING表、ARP表,初始化TCP,RTL8019AS的初始化等。RTL8019AS的初始化主要包括网卡的复位和网卡寄存器的初始化。RTL8019AS的初始化主要包括网卡的复位和网卡寄存器的初始化。RTL8019AS内部寄存器有4页,与NE2000兼容的有3页,第4页不用。页选择由CR寄存器的PS1,PS0位确定。在零页寄存器中可以设置接收、发送状态配置以及发送缓存区的起始页与接收缓存区起止页地址等;在1页寄存器中可以设置以太网接口的MAC地址和组播地址。对网卡的初始化就是对相关寄存器初始化,这些寄存器包括CR,RCR,TCR,PSTART,PSTOP, BNRY, TPSR,ISR,DCR,IMR,CURR,PAG0~PAG5,MAR0~MAR5等。初始化过程如下:
(1) CR=0x21,选择页零的寄存器同时使芯片处于停止模式,不会发送和接收数据包;
(2) RCR=0xE0,设置接收结构寄存器,monitor方式,所有数据包都被拒绝;
(3) TCR=0xE2,设置发送配置寄存器,工作在内部lookback模式;
(4) PSTART=0x4C,接收缓冲区开始页面地址;
tcpip协议中基于tcp协议的应用程序 (5) PSTOP=0x80,接收缓冲区中止页面地址;
(6) BNRY=0x4C,接收缓冲区最后页面指针;
(7) TPSR=0x40,发送页的起始页地址,初始化为指向第一个发送缓冲区的页即0x40;
(8) ISR=0xFF,清除所有中断标志;
(9) DCR=0xC8,设置数据配置寄存器,使用FIFO缓存,普通模式,8位数据DMA;
(10) IMR=0x00,设置中断屏蔽寄存器,屏蔽所有中断;
(11) CR=0x61,选择页一的寄存器;
(12) CURR=0x4D,网卡写内存的指针,指向当前正在写的页的下一页,初始化时指和0x4C+1=0x4D;
(13) 设置多址寄存器MAR0~MAR5,均设置为0x00;
(14) CR=0x22,使网卡芯片开始工作;
(15) 设置网卡地址寄存器PAR0~PAR5;
(16) CR=0x21,选择页零的寄存器;
(17) RCR=0xCC,设置接收结构寄存器,设置为使用接收缓冲区,跟外部网络连接;
(18) TCR=0xE0,设置发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式;
(19) CR=0x22,使网卡芯片开始工作;
(20) ISR=0xFF,清除所有中断标志;
2.2 TCP/IP协议栈的移植
以太网帧的发送与接收属于协议层中的最底层。发送前的协议封装和接收时的协议分解都非常简单。封装时,只需在上层封装数据前面添加14 B的以太网首部就可以了;接收到数据
帧之后,根据头信息中的帧类型字段判断是否属于IP包或ARP包,若是就继续相应的协议分解,否则将被丢弃,不予处理。帧的接收工作由网卡自动完成,只需对相关的寄存器如PSTART,PSTOP,CURR和BNRY进行适当的初始化即可。以太网帧的发送过程如下:
(1) 初始化命令寄存器CR,启动RTL8019AS;
(2) 设置数据配置寄存器DCR,以字节方式通信;
(3) 设置发送配置寄存器TCR,选择RTL8019AS数据发送的工作方式;
(4) 设置远程开始地址寄存器RSAR0(低位), RSAR1 (高位),指明远程DMA操作时所传送数据的起始地址;
(5) 设置远程字节计数寄存器RBCR0(低位), RBCR1 (高位),指明远程DMA操作时所传送的数据的字节数;
(6) 设置命令寄存器CR,开始远程DMA写操作。RTL8019AS自动将数据I/O端口的数据写入其缓冲区中;
(7) 开始向数据I/O端口传送需要发送的数据;
(8) 数据传送完毕后,设置发送页起始地址寄存器TBCR,指明待发送数据的起始地址;
(9) 设置发送字节计数寄存器TBCR0(低位), TBCR1 (高位),指明待发送数据的字节数;
(10) 设置命令寄存器CR,启动本地DMA操作,把缓冲区中的数据发送到网络上;
(11) 结束。
需要指出的是,数据在发送前必须先由上到下进行层层封装才能正确地发送出去,同时,接收到的数据包还必须自下而上层层解包才能为用户所识别,即协议分解。在协议编程实现中,数据封装与协议分解互为逆过程。这就是说,必须在数据采集子系统中实现嵌入式TCP/IP协议才能完成数据的TCP/IP处理。
2.3 客户端和服务器端程序的设计
分别设计客户端和服务器端程序,适应于不同的工作场合。在面向连接的TCP协议中,服务器和客户机开始通信之前必须首先建立连接。在连接之前,服务器程序必须正在运行并处于
监听模式,等待客户端的连接。TCP的连接是通过3次握手协议来完成的。首先,客户端发送1个SYN标志位的TCP段给服务器,其带有所选择段的初始序号。服务器端收到该报文段后,以1个带有SYN标志的段作为应答,其中也给出根据本身情况选择的初始序号,并包含对客户端的确认。而客户端收到服务器端的应答后,再次送回1个报文段,其中带有对服务器端SYN的确认。这样双方的连接就建立了,以后就能开始传送数据。同样终止1条TCP连接实际上也需3次握手过程。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论