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

发布者:平凡幸福最新更新时间:2010-07-26 来源: 现代电子技术关键字:单片机  以太网  UDP 手机看文章 扫描二维码
随时随地手机看文章

    随着嵌入式设备与网络的日益结合,在单片机系统中引入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协议栈的移植

    以太网帧的发送与接收属于协议层中的最底层。发送前的协议封装和接收时的协议分解都非常简单。封装时,只需在上层封装数据前面添加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所示。

3.2 数据收发测试界面

    分别测试客户端和服务器端软件通信是否正常。

    (1)服务器端程序的测试

    打开客户端测试界面,如图4所示,设置连接IP地址为192.168.O.44(该地址必须与服务器端的IP地址一致),设置连接端口号为3330(该端口号必须与服务器端端口号一致)。将作为服务器端的程序烧入到测试板的微处理器中,通过图3修改配置界面,将服务器端需要的参数写入X5045,参数配置包括;“单片机IP地址”(指的是测试板自身的IP地址)为192.168.O.44,“服务器端IP地址”可以不用设置(因为测试板本身就即服务器端);如果是新网卡芯片,还需要设置MAC地址,这里设为121314151617(一般选择任意的12位数即可);“服务器端口号”设为3330(必须与客户端一致);网关设为192.168.O.1(要与上位机保持在同一个网段内)。设置好所有参数后,可以进行数据的收发了。

    (2)客户端程序的测试

    打开服务器端测试界面,如图5所示。

    设置连接IP地址为192.168.0.44(该地址指的是上位机自身的IP,必须与客户端设置的“服务器端IP地址”一致),设置连接端口号为3330(该端口号须与客户端设置的“服务器端口号”一致)。将作为客户端的程序烧人到系统的微处理器中,参数配置:“服务器IP地址”(指的是上位机的IP地址)为192.168.0.44,“单片机IP地址”可以不用设置(因为系统仅作为客户端),“服务器端口号”设为3330(必须与客户端一致),网关设为192.168.0.1(要与上位机保持在同一个网段内)。设置好所有参数之后,即可进行数据收发。服务器端的数据可以被发送到串口,同样,数据也可以从串口发送到服务器端。测试表明:上位机通过以太网与系统之间的通信正常。

4 结语

    在此实现了TCP/IP协议栈在单片机上的移植,完成了系统的硬件电路和相关嵌入式软件的设计,应用VB开发了上位机修改参数界面,通过串口完成对网卡等参数的配置和修改,解决了数据包的超时重发、定时保活、参数配置、硬件看门狗复位等一系列问题。实验表明,整套程序比较稳定,收发数据正常,TCP超时重传效果很好。经过近1个月的测试,没有出现任何丢包和堵塞的现象。

关键字:单片机  以太网  UDP 引用地址:嵌入式TCP/IP协议栈在单片机上的实现

上一篇:乳制品细菌含量电子检测仪的设计与制作
下一篇:微软创新杯中国台湾选手获得嵌入式项目冠军

推荐阅读最新更新时间:2024-05-02 21:06

低功耗以太网PHY对于楼宇自动化的深远影响
以太网(电气和电子工程师协会 802.3)在楼宇自动化中的使用量正在增长,使得使用增强型传感器和控制网络的智能楼宇能够管理环境系统(如照明和暖通)、访问控制、安保系统、安全系统,甚至预防性维护监控。新型楼宇通常使用带专用5类增强型(Cat5e)布线、以太网交换机和路由器的楼宇自动化网络。即使是现有的楼宇空间也在进行改装,以适应联网的传感器和控制装置。 改装具有挑战性基于两个原因: 需为最初未配置电源的部位提供电源。 安装空间有限,因为多数改装的楼宇起初并未设计用于容纳墙壁、天花板和地板中的传感器和控制器。 尽管许多商业和工业楼宇最初设计用于适应轻松重新配置内部空间,但支持易于配电并提供小尺寸的传感器和控制器技术使得
[物联网]
低功耗<font color='red'>以太网</font>PHY对于楼宇自动化的深远影响
PIC单片机中断模块介绍
PIC单片机中断模块介绍: PIC16F87X系列单片机可以接收多达14个中断源。中断控制器寄存器INTCON标记着各个中断源的请求,对各个中断设置屏蔽位,对全部中断设置全局屏蔽位。   PIC16F87X系列的中断包含:TMR0溢出中断(TOIF)、外部中断(INTF)、端口B变化中断(RBIF)、并行从动端口中断(PSPIF)、A/D变换中断、USART异步接收中断(RCIF)和异步发送中断(TXIF)、同步串行端口中断(SSPIF)、CCP1中断(CCPIIF)、TMR2中断(TMR2IF)、TMR1中断、CCP1中断(CCP2)、E2PROM写中断(EEIF)、总线碰撞中断(BCLIF)。   各个中断采用查询方
[工业控制]
单片机C语言程序结构容易出问题的有一下几点
一,定义寄存器 定义全局变量unsigend num 在子程序里面改变num值,同时在中断里面也改变num值,最后得到意向不到的值,容易出错 若要这样改变 则定义变量前面加volatile unsigend num 二,中断调用 主程序调用子程序,同时中断函数里面也调用该子程序,这样容易出错 建议:中断里面不要调用子程序, 若要调用子程序则,则该子程序为唯一被中断调用。 三,程序开头没加延时 开始的时候没加延时,很危险,上电电源电压波动较大,若一上电单片机就执行重要的命令的话,就容易出问题 特别是对内部eeprom的读写,读取数据出错,导致意向不到的后果。读写数据都需要比较稳定的电压。 亲,上电延时个
[单片机]
罗德与施瓦茨和TSN Systems合作,为汽车以太网提供纳秒级的精确延迟测量能力
随着雷达、激光雷达和相机传感器应用于汽车,大量的传感器数据需要在几毫秒内完成传输和处理,因此汽车以太网的时间敏感性变得非常重要。测试与测量专家罗德与施瓦茨公司和时间敏感网络专家TSN Systems公司成功携手,基于汽车以太网100BASE-T1对车内网络实现精确定时测量。 高级驾驶员辅助系统(ADAS)需要高带宽和低延迟通信支持。汽车以太网通过提供更高数据传输速率和时间敏感网络功能,为这些需求提供了通信解决方案。 罗德与施瓦茨和TSN Systems共同为工程师提供了一个全面的测试解决方案,这些工程师需要对车载网络以纳秒级的精度对1-3层进行精确的定时测量。在合作中,罗德与施瓦茨提供了一个基于R&S RTO的定制示波器
[汽车电子]
罗德与施瓦茨和TSN Systems合作,为汽车<font color='red'>以太网</font>提供纳秒级的精确延迟测量能力
基于单片机的温湿度监测系统设计(程序)
#include reg52.h #include 1602.h #include dht.h #include 2402.h //定义三个LED灯 sbit Led_qushi=P1^6; //去湿灯 sbit Led_jiangwen=P1^5; //降温灯 sbit Led_shengwen=P1^4; //升温灯 sbit Key_TH1 = P3^2; sbit Key_TH2 = P3^3; sbit Key_HH1 = P3^4; sbit Key_HH2 = P3^5; //定义标识 volatile bit FlagStartRH = 0; //开始温湿度转换标志 volatile
[单片机]
双机热备单片机系统内部通信接口的简化设计
单片机以其高可靠性和高性价比在工业控制、数据采集系统、智能化仪表、办公自动化等诸多领域得到极为广泛的应用。在测控系统中,有时对单片机系统的可靠性有非常严格的要求。除了在系统设计、生产中采用多种措施以提高其可靠性之外,双机热备份是一种非常有效且经常被采用的方法。在双机热备份系统中,两个单片机必须保持工作状态的完全一致,需要随时进行数据交换。通常可以使用多单片机信息共享技术来实现两个单片机的数据交换,如信箱存储系统、共享存储器等,但这些方法实现复杂,硬件成本高1。大多数单片机都提供通用串行收发器(UART),在单片机系统不与其他设备(如上位机)进行通信的情况下,使用UART是非常方便的,但不幸的是绝大多数情况下UART已被使用。当然也
[单片机]
双机热备<font color='red'>单片机</font>系统内部通信接口的简化设计
AT89C52单片机的性能原理及应用解析
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。 它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51
[单片机]
AT89C52<font color='red'>单片机</font>的性能原理及应用解析
单片机---ESP8266中utf8转gbk中文标点问题解决
背景 今天在测试过程中发现了中文标点存在问题。 在oled中文显示中,我们用到了一个查表法进行utf-8转gbk的方式,经过实验,发现中文能够翻译出来,但是一些全角的标点,例如中文的逗号,句号,感叹号等,翻译的不正确。 这样会就导致在显示中文标点的时候,会死机或者乱码。 问题解决 首先,我们要明确HZK库中的点阵数据是全的,这是一个完整的字库,所以,现在原因就出在这个函数当中 int SwitchToGbk(const unsigned char* pszBufIn, int nBufInLen, unsigned char* pszBufOut, int* pnBufOutLen) { int i = 0;
[单片机]
<font color='red'>单片机</font>---ESP8266中utf8转gbk中文标点问题解决
小广播
热门活动
换一批
更多
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved