硬件设计与实现
系统的硬件构造框图如图1所示。本系统的微掌握器是Winbond公司的78E58,网络接口芯片是与NE2000系列兼容的ReaLTEk公司的RTL8019AS。RTL8019AS内置了10BASE-T收发器,外接一个隔离LPF滤波器,经RJ-45接口输出。外部RAM是62256,24C02是I2C总线的 EEPROM。
图1 嵌入式协议转换硬件框图

系统的软件设计与实现
为适应上网的需求,系统软件设计紧张包括两部分内容:一是要实行对RTL8019AS等的掌握功能,二是要实行与连接Internet干系的功能,实现TCP/IP协议。本文着重先容第二部分,主程序采取C51措辞编写。
RTL8019AS初始化
要将嵌入式系统接入以太网,首先要设置RTL8019AS的事情办法和事情状态,分配收发数据的缓冲区,通过对地址及数据口的读写来完成以太网帧的吸收与发送。然后设置RTL8019AS的事情参数,亦即设置内部掌握寄存器。对RTL8019AS的事情参数进行设置完毕后,进入正常事情状态,接下来就读写RTL8019AS的RAM以完成数据包的吸收和发送。由于篇幅有限,这里就不再详述。
TCP/IP模型
TCP/IP协议是一套把Internet上的各种系统互连起来的协议族,担保Internet上数据的准确快速传输。TCP/IP常日采取一种简化的四层模型:运用层、传输层、网络层、链路层。
本系统中,运用层通报来自以太网和数据终真个数据,并对数据报作打包拆包处理。传输层采取传输掌握协议TCP或用户数据协议UDP。网络层实现IP协议,还要实现能报告数据传输差错等情形的ICMP协议。链路层部分由RTL8019AS完成,链路层由掌握同一物理网络上的不同机器间数据传送的底层协议组成。
在单片机里只实现与须要有关的部分,而不该用的协议则一概不支持。单片机运用的TCP/IP协议大多是为了完成数据采集和数据传输,而不须要网页浏览、文件传输这些功能。
ARP协议(地址解析协议)
以太网是TCP/IP协议紧张采取的局域网技能,是系统接入Internet的根本。ARP实质是完成网络地址到以太网物理地址的动态映射。UNIX系统的ARP协议支持以太网、令牌环等网络,但我们的单片机系统里只支持以太网。
IP协议(网际协议)
IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。就对某些协议而言,IP包最大可以为65K,可以分段传输,而在单片机里根本无法容纳如此大的数据包,因此一样平常是不支持分段的。我们的设计中采取发送小数据包的办法,以避免分段。
TCP协议(传输掌握协议)
TCP数据封装在一个IP数据报中,并具有自己的TCP首部, TCP协议定义十分繁芜,鉴于51单片机的片内资源十分有限,本系统对TCP协议进行了一定的简化处理。标准的TCP协议利用慢启动的滑动窗口机制,如果只利用单个窗口,就变成了一种大略确认的处理方法。即只需对单个数据报发送和确认,节约了系统资源,也使掩护更加方便。
编程实现TCP协议的另一个难点在于TCP建立连接和终止连接的详细过程的实现。TCP协议是一个面向连接的协议,连接的双方无论是哪一方向另一方发送数据,都必须先通过“三次握手”过程在双方之间建立一条连接,和通过“四次握手”终止连接。
连接建立后,TCP就可以发送数据块,称为数据段。当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。其余,TCP将保持它首部和数据的考验和。
系统主运用程序的实现
系统初始化后,进入主程序循环的两部分:一是对吸收到的以太网数据帧进行解包,供应用程序利用,一是对发送的数据进行封装并发送,使采取TCP/IP协议的以太网内的所有打算机都能收到此数据帧。图2是系统的主运用程序的流程图。
51单片机实现掌握网卡芯片进行数据传输的设计
单片机实现TCP/IP协议的难点
51单片机的程序空间、可用的内存RAM、运算速率、指令集等缘故原由,在UNIX或Windows上实现的TCP/IP协议的源代码并不能够直接移植到8位的单片机上。在51单片机上编写代码会受许多限定,特殊是实现TCP/IP协议这样关系繁芜的程序,我们必须根据实际情形尽可能挖掘51单片机的性能。综合来说,单片机实现与UNIX实现TCP/IP有如下差异:
(1)操作系统:Windows或UNIX都是多任务操作系统,这使得代码编写大略化,在单片机只能是单任务系统,代码构造为顺序实行+硬件中断的办法,无法并发实行。
(2)内存分配:Windows或UNIX的内存分配是动态的。而一样平常单片机只有外接的一块32K字节的RAM,并同时被各个协议利用。一个最大的以太网数据包有1.5K字节,分配一包的缓冲区就要1.5K字节。为此,我们分配一个256×6=1536个字节的固定的RAM来存放收到的以太网数据包。收到一包就处理一包。
(3)指针:在PC里所有程序都必须先放在RAM里才能运行,以是它的指针都指向RAM。而单片机的构造和PC的构造有很大差别,指针类型很多,各指针运算的速率也不一样,特殊是“一样平常指针”运算很慢,还会占用很多程序空间。UNIX实现TCP/IP的源代码中,用得最多的便是指针,而在单片机里一样平常哀求少用指针,或利用特定类型的指针。对利用UNIX的源代码须要作很多的改动。
(4)参数通报:在UNIX实现的TCP/IP源代码中,一样平常有很多的参数通报,而在单片机里许可通报的参数是有限的(由于受到内部RAM的限定),同时参数通报的过程要摧残浪费蹂躏程序代码空间,也降落单片机实行速率。以是在单片机的实现里,一样平常不要做太多的参数通报,而多利用公共的全局变量来实现调用的过程。
(5)硬件接口:在UNIX或Windows里,对网卡驱动无一例外都是采取中断办法,由于PC的处理速率快,一次中断的处理韶光也很短,不会影响系统内的其它中断。而在单片机的运用中,大部分的方案都是查询式的。PC的NE2000的网卡,一样平常都是用16位DMA的办法,而在单片机里却只能用8位DMA办法。这也使UNIX对网卡驱动的代码不能直接移植。
结语
本文设计的嵌入式网络接入方案,采取廉价的8位51单片机实现了简化TCP协议和UDP协议,并支持主动和被动连接、超过网关,实现互联网接入,在被控设备与上位掌握机之间供应了一条透明的传输通道,用户不需对原有串口设备或其他数字设备做任何修正,就可享受到网络的好处。目前,本文的系统已被成功利用在网络化的数据采集器中。