总体说来,TCPIP并不是一件十分神秘的事情,尤其是基于MCU的应用,不要求进行特别复杂的处理,很多情况下只需要实现最最基本的功能就行了。在实现MCU的TCPIP移植之前,必须对TCPIP有一定程度的了解,可以找一本合适的书籍来翻阅一下,《TCP/IP详解,卷1:协议》http://www.laogu.com/display.aspx?did=510是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。
对于TCPIP在MCU上的应用并不要求对协议的所有部分都了解的那么清楚,重点需要了解TCPIP的各个层次的关系,链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在T C P / I P协议族中,网络层协议包括I P协议(网际协议),I C M P协议(I n t e r n e t互联网控制报文协议),以及I G M P协议(I n t e r n e t组管理协议)。 运输层主要为两台主机上的应用程序提供端到端的通信。在T C P / I P协议族中,有两个互不相同的传输协议: T C P(传输控制协议)和U D P(用户数据报协议)。T C P为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面, U D P则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种运输层协议分别在不同的应用程序中有不同的用途。应用层负责处理特定的应用程序细节。几乎各种不同的T C P / I P实现都会提供Telnet,FTP,SMTP 简单邮件传送协议,SNMP简单网络管理协议这些通用的应用程序。
各种类型的数据报格式也是需要了解的重点,使用Sniffer软件可以十分方便的在电脑上查看各种数据报的收发状态.同时Sniffer也是以后调试TCPIP协议寨的一个很有用的工具,Sniffer的使用方式可以在www.google.com上很方便的搜索到.
TCP/IP的分层,以太网封装,IP首部,子网寻址和子网掩码,ARP地址解析协议,ICMP控制报文协议中的ECHO(Ping程序),UDP用户数据报协议,TFTP简单文件传送协议,特别是TCP传输控制协议是TCPIP在MCU上应用所必需掌握的关键知识.
在对TCPIP有了一定程度的了解之后,如何具体的实现就成了问题的关键,我在学习TCPIP的过程中前后一共使用或阅读了下面的3中TCPIP协议寨,这里有对3个协议寨的比较和下载地址.
uIP,适合8bit单片机上使用,但是结构比较复杂,不适宜进行移植,也不是一份很适合阅读的代码.下载地址http://www.sics.se/~adam/uip/
Lwip,适合16/32bit单片机上使用,是嵌入式系统开发人员最好的学习TCPIP的代码,下载地址http://www.sics.se/~adam/lwip/
zLip,南开大学电子应用实验室编写的一个协议寨,有uip和lwip的优点,推荐初学者学习http://www.laogu.com/display.aspx?did=859
在了解了具体实现之后,就有需要在MCU上具体的运行一下了,这里提供一个我做的硬件电路,但是其中我使用了GAL16V8芯片进行地址分配,所以需要有一个支持16V8的烧写器了,同时,如果将at89c55芯片换成sst89c58,并从www.sst.com公司网站上下载一个monitor 51的仿真监控程序,使用烧写器写入sst89c58中,就可以通过串口和Keil软件配合进行硬件仿真了.(市场上的那些100多元的51仿真器就是这个样子的).
Gal的代码如下(abel hdl语言编写),使用猜测的方式都应该明白什么意思了把?!
module chipsel
title 'ADDRESS to CS'
U1 device 'P16V8R';
a6,a7,a8,a9,a10 pin 19,1,2,3,4
a11,a12,a13,a14,a15 pin 5,6,7,8,9;
csram,cs8019 pin 18,17;
addr=[a15,a14,a13,a12,a11,a10,a9,a8,a7,a6];
equations
csram = !(addr < ^h3FC);
cs8019 = !(addr == ^h3FC);
end chipsel;
下载压缩文件包:
http://www.21icsearch.com/buzi/upimage/upfile/2005121959230.pdf
(下载之后将后缀pdf改为rar,解压之后的jed文件就是编译之后的Gal的目标代码,使用ABEL4或者硕isp lever 2.0编译)
打开下载的Zlip代码,修改一下#define RTL_BASE_ADDRESS 0xb000为#define RTL_BASE_ADDRESS 0xff00,编译,选择mon51进行硬件仿真,打开Sniffer,尝试Ping一下,能连通了吗?Sniffer有收到数据报了吗?下面就是加入自己的应用程序了...
应用程序就自己加吧,不过如果想学好TCPIP,最好就是自己写一下TCPIP协议寨,我写过了的,下面的硬件实
现的就是网络接口的U盘,因为没有加上文件系统,所以只能存储一个文件,实际硬件只有半个烟盒大小,而且因为
没有足够的RAM空间,所以编程的时候需要十分注意内存的使用哦!
下载压缩文件包(原力图和部分代码):
http://www.21icsearch.com/buzi/upimage/upfile/20051211023250.pdf
(下载之后将后缀pdf改为rar)