EDN China > 设计实例 > 嵌入式系统 > MCU(单片机应用) > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

(多图) 嵌入式TCP/IP协议栈在单片机上的实现

现代电子技术 王芳 周优霞?? 2010年07月28日 ?? 收藏0

  随着嵌入式设备与网络的日益结合,在单片机系统中引入TCP/IP协议栈,以支持单片机接入网络,成为嵌入式领域的一个重要方向。在此对基于SST89E516RD单片机的TCP/IP协议栈的实现方法给予讨论。选用SST89E516RD单片机实现了在线仿真和编程的功能,大大节约了开发成本。采用VB 6.0语言与Window 98/2000/XP等为软件开发平台,对系统进行了测试。经过几个月的软硬件测试表明:系统设计合理、稳定可靠,已基本实现了最初的设计目标。对其他类似系统移植该项技术奠定了基础,有很好的参考价值。

  1 系统硬件实现

  整个系统以SST89E516RD单片机为核心,通过RTL8019AS以太网控制芯片实现远程通信。串口完成网卡参数的修改、在线仿真,在系统中还使用X5045作为外部扩展的E2PROM,用来存储IP地址、物理地址以及网卡的其他配置信息,同时X5045还具有电压监控、看门狗定时器、上电复位三种功能,使用X5045监控系统的运行过程,当系统不稳定时可以进行有效地复位。图1为系统硬件结构图。

系统硬件结构图

  2 系统软件实现

  系统软件主要包括客户端和服务器端软件的设计,主要有以下几部分内容:

  (1)RTL8019AS的初始化和驱动程序的设计;

  (2)数据帧的发送和接收子程序;

  (3)TCP/IP协议栈程序的设计;

  (4)客户端和服务器端程序的设计;

  (5)X5045看门狗和E2PROM程序的设计。

  系统的主程序流程图如图2所示。

系统的主程序流程图

  由图2可知,系统首先完成对单片机定时器、串口、网卡芯片和以太网等部分的初始化,然后进入以太网处理部分的主程序,通过定时器中断进行网口数据的超时出错处理,并完成TCP定时器保活和ARP表生存时间的更新。

  2.1 系统初始化

  所谓初始化和驱动程序是指实模式下一组硬件芯片的驱动子程序,它们屏蔽了底层硬件处理细节,同时向上层软件提供与硬件无关的接口。主要包括定时器初始化,初始化PING表、ARP表,初始化TCP,RTL8019AS的初始化等。RTL8019AS的初始化主要包括网卡的复位和网卡寄存器的初始化。RTL8019AS的初始化主要包括网卡的复位和网卡寄存器的初始化。RTL8019AS内部寄存器有4页,与NE2000兼容的有3页,第4页不用。页选择由CR寄存器的PSl,PS0位确定。在零页寄存器中可以设置接收、发送状态配置以及发送缓存区的起始页与接收缓存区起止页地址等;在1页寄存器中可以设置以太网接口的MAC地址和组播地址。对网卡的初始化就是对相关寄存器初始化,这些寄存器包括CR,RCR,TC-R,PSTART,PSTOP,BNRY,TPSR,ISR,DCR,IMR,CURR,PAGO~PAG5,MAR0~MAR5等。初始化过程如下:

  (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.2 TCP/IP协议栈的移植

  以太网帧的发送与接收属于协议层中的最底层。发送前的协议封装和接收时的协议分解都非常简单。封装时,只需在上层封装数据前面添加14B的以太网首部就可以了;接收到数据帧之后,根据头信息中的帧类型字段判断是否属于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处理。


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

嵌入式? 单片机? 服务器? 移植?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈