嵌入式TCP/IP协议栈在单片机上的实现
(1)CR=0x21,选择页零的寄存器同时使芯片处于停止模式,不会发送和接收数据包;
(2)RCR=OxE0,设置接收结构寄存器,monitor方式,所有数据包都被拒绝;
(3)TCR=OxE2,设置发送配置寄存器,工作在内部lookback模式;
(4)PSTART=0x4C,接收缓冲区开始页面地址;
(5)PSTOP=0x80,接收缓冲区中止页面地址;
(6)BNRY=0x4C,接收缓冲区最后页面指针;
(7)TPSR=0x40,发送页的起始页地址,初始化为指向第一个发送缓冲区的页即0x40;
(8)ISR=0xFF,清除所有中断标志;
(9)DCR=OxC8,设置数据配置寄存器,使用FIFO缓存,普通模式,8位数据DMA;
(10)IMR=Ox00,设置中断屏蔽寄存器;屏蔽所有中断;
(11)CR=Ox61,选择页一的寄存器;
(12)CURR=Ox4D,网卡写内存的指针,指向当前正在写的页的下一页,初始化时指和0x4C+1=0x4D;
(13)设置多址寄存器MAR0~MAR5,均设置为Ox00;
(14)CR=0x22,使网卡芯片开始工作;
(15)设置网卡地址寄存器PAR0~PAR5;
(16)CR=Ox21,选择页零的寄存器;
(17)RCR=OxCC,设置接收结构寄存器,设置为使用接收缓冲区,跟外部网络连接;
(18)TCR=0xE0,设置发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式;
(19)CR=0x22,使网卡芯片开始工作;
(20)ISR=0xFF,清除所有中断标志;
2.2TCP/IP协议栈的移植
以太网帧的发送与接收属于协议层中的最底层。发送前的协议封装和接收时的协议分解都非常简单。封装时,只需在上层封装数据前面添加14 B的以太网首部就可以了;接收到数据帧之后,根据头信息中的帧类型字段判断是否属于IP包或ARP包,若是就继续相应的协议分解,否则将被丢弃,不予处理。帧的接收工作由网卡自动完成,只需对相关的寄存器如PSTART,P8TOP,CURR和BNRY进行适当的初始化即可。以太网帧的发送过程如下:
(1)初始化命令寄存器CR,启动RTL8019AS;
(2)设置数据配置寄存器DCR,以字节方式通信;
(3)设置发送配置寄存器TCR,选择RTL8019AS数据发送的工作方式;
(4)设置远程开始地址寄存器RSAR0(低位),RSARl(高位),指明远程DMA操作时所传送数据的起始地址;
(5)设置远程字节计数寄存器RBCR0(低位),RBCRl(高位),指明远程DMA操作时所传送的数据的字节数;
(6)设置命令寄存器CR,开始远程DMA写操作。RTL8019AS自动将数据I/O端口的数据写入其缓冲区中;
(7)开始向数据I/O端口传送需要发送的数据;
(8)数据传送完毕后,设置发送页起始地址寄存器TBCR,指明待发送数据的起始地址;
(9)设置发送字节计数寄存器TBCR0(低位),TBCRl(高位),指明待发送数据的字节数;
(10)设置命令寄存器CR,启动本地DMA操作。把缓冲区中的数据发送到网络上;
(11)结束。
需要指出的是,数据在发送前必须先由上到下进行层层封装才能正确地发送出去,同时,接收到的数据包还必须自下而上层层解包才能为用户所识别,即协议分解。在协议编程实现中,数据封装与协议分解互为逆过程。这就是说,必须在数据采集子系统中实现嵌入式TCP/IP协议才能完成数据的TCP/IP处理。
2.3 客户端和服务器端程序的设计
分别设计客户端和服务器端程序。适应于不同的工作场合。在面向连接的TCP协议中,服务器和客户机开始通信之前必须首先建立连接。在连接之前,服务器程序必须正在运行并处于监听模式,等待客户端的连接。TCP的连接是通过3次握手协议来完成的。首先,客户端发送1个SYN标志位的TCP段给服务器,其带有所选择段的初始序号。服务器端收到该报文段后,以1个带有SYN标志的段作为应答,其中也给出根据本身情况选择的初始序号,并包含对客户端的确认。
而客户端收到服务器端的应答后,再次送回1个报文段,其中带有对服务器端SYN的确认。这样双方的连接就建立了,以后就能开始传送数据。同样终止1条TCP连接实际上也需3次握手过程。
3 应用系统实现
为了验证系统的可行性,应用VB开发了接口程序,构建了软硬件测试平台,用来设置网卡的配置参数并实现数据的发送与接收。所有配置参数包括(本地IP地址、服务器端IP地址、端口号、网卡物理地址、ping的IP地址、串口号等)都能通过串口动态地更改。系统能实现Ping的功能,以方便检查以太网的状态。
3.1 参数设置界面
用串口线将测试板(数据采集和控制系统模块,下同)与计算机连接起来,选择好串口号,然后按“连接单片机”按钮,连接状态工具栏里出现“已经连接”,说明测试板与计算机已经连接上,然后就可以修改配置参数了。在参数设置栏中填写正确的参数值后,按“设定”按钮,接收状态栏中会提示参数设置成功,然后按测试板上的复位键,网卡的参数配置就被写到了X5045中。参数设置界面如图3所示。 linux操作系统文章专题:linux操作系统详解(linux不再难懂)
tcp/ip相关文章:tcp/ip是什么
评论