《计算机体系结构——网络篇1》之 网络结构、IP分组交换技术、IP/MAC映射视频教程
12516 人在学
我们都知道单片机是属于嵌入式的, 那么随着嵌入式互联网设备越来越多,需要在嵌入式设备上实现TCP/IP协议栈,关于单片机的TCP/IP协议栈的内容,在本文为大家具体介绍一下。
接口协议(interface protocol)指的是需要进行信息交换的接口间需要遵从的通信方式和要求。接口协议的种类很多。接口协议不仅要规定物理层的通信,还需要规定语法层和语义层的要求。
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如Sony智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行复杂的动作和感受各种状态信息。
硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储电路,就构成了一个嵌入式核心控制模块。其实操作系统和应用程序都可以固化在ROM中。
单片机TCP/IP的特点
在单片机上实现TCP/IP与在PC机上实现TCP/IP是有所不同的,它的特点是是:
1.速度慢:12M晶振的51单片机的最快网络传送速度为25kb/s,其中其中的关键在于TCP/IP需要对传送的每个字节进行校验和计算,以及必要的拷贝,这样51单片机的处理速度就不够了。为了提高单片机TCP/IP的速度一般的方法是要对协议栈进行精简。
2. 程序存储空间和外部RAM空间不大:一般的单片机的最大程序和数据空间为64KB。CP IP协议一般需要对发送的数据进行缓存,而一个最大的数据包就有1500B左右,当网络速度很大的时候内存消耗将很大。对于非嵌入式TCP IP协议栈,64KB的程序和数据空间是不够的。
3.单片机体系结构:51单片机是8位机,所以对于需要完成同一个数据操作,32位的PC机可能只需要10条指令,而51单片机可能需要几百条指令。
由于TCP协议的程序流程较为复杂,因为程序中需要处理对方发过来的数据,发起的连接,而我方并不知道对方何时进行什么样的操作,这就使得协议处理起来较为复杂。另外一个原因是单片机TCP/IP协议栈的稳定性是以非常重要的问题,一个稳定的协议栈需要在实际应用中经过长时间的测试,所以编写一个稳定的单片机TCP/IP协议栈更加困难,为此另外一种选择就是使用现有的TCP/IP协议栈。嵌入式常用接口协议:
1.BSD TCP/IP协议栈
BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(Vxwork内嵌的TCP/IP栈)是BSD栈派生的。这是因为BSD栈在BSD许可协议下提供了这些专业0栈的雏形,BSD许可证允许BSD栈已修改或未修改的形式结合这些专业栈的代码而无须向创建者付版税。同时,BSD也是许多TCP/IP协议中国的创新(如广域网中拥塞控制和避免)的开始点。
2.UC/IP
UC/IP是由Guy Lancaster编写的一套基于uC/OS且开放源码的TCP IP协议栈,亦可移植到其它操作系统,是一套完全免费的、可供研究的TCP IP协议栈,uC/IP大部分源码是从公开源码BSD发布站点和KA9Q(一个基于DOS单任务环境运行的TCP IP协议栈)移植过来。uC/IP具有如下一些特点:带身份验证和报头压缩支持的PPP协议,优化的单一请求/回复交互过程,支持IP/TCP/UDP协议,可实现的网络功能较为强大,并可裁减。UCIP协议栈被设计为一个带最小化用户接口及可应用串行链路网络模块。根据采用CPU、编译器和系统所需实现协议的多少,协议栈需要的代码容量空间在30-60KB之间。
3.LwIP
LwIP是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP IP协议栈。LwIP的含义是Light Weight(轻型)IP协议,相对于uip.LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用。LwIP的特性如下:支持多网络接口下的IP转发,支持ICMP协议 ,包括实验性扩展的的UDP(用户数据报协议),包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议),提供专门的内部回调接口(Raw API)用于提高应用程序性能,并提供了可选择的Berkeley接口API。
4.uIP
uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈。完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KB ROM或几百字节RAM中运行。uIP中还包括一个HTTP服务器作为服务内容。许可:BSD许用证。
TinyTcp
TinyTcp 栈是TCP/IP的一个非常小和简单的实现,它包括一个FTP客户。TinyTcp是为了烧入ROM设计的并且现在开始对大端结构似乎是有用的(初始目标是68000芯片)。TinyTcp也包括一个简单的以太网驱动器用于3COM多总线卡。
选择一个开源协议栈可以从四个方面来考虑:
一个是是否提供易用的底层硬件API,即与硬件平台的无关性,
一个是与操作系统的内核API。协议栈需要调用的系统函数接口是否容易构造,
另一个对于应用支持程度。
最关键的是占用的系统资源是否在可接受范围内,有裁减优化的空间否?
其中,BSD 栈可完整实现TCP/IP协议,但代码庞大,70KB-150KB之间,裁减优化有难度,uIP和TinyTcp代码容量小巧,实现功能精简,限制了在一些较高要求场合下的应用,如可靠性与大容量数据传输。
LwIP和uC/IP是同量级别的两个开源协议栈,两者代码容量和实现功能相似,LwIP没有操作系统针对性,它将协议栈与平台相关的代码抽象出来,用户如果要移植到自己的系统,需要完成该部分代码的封装,并为网络应用支持提供了API接口的可选性。uC/IP协议最初是针对uC/OS设计,为方便用户移植实现,同样也抽象了协议栈与平台相关代码,但是协议栈所需调用的系统函数大多参照uC/OS内核函数原型设计,并提供了协议栈的测试函数,方便用户参考,其不足在于该协议栈对网络应用支持不足。
根据以上分析,从应用和开发的角度看,似乎LWIP更得到了网上很多朋友使用的青睐;uC/IP在文档支持与软件升级管理上有很多不足,但是它最初是针对UC/OS而设计,如果选用UC/OS作为软件基础的话,在系统函数构造方面有优势。当然你选择其他操作系统的话,可参照OS_NULL文件夹下的文件修改。 以上的这些开源协议栈也并非免费,拿来就可以用,据了解,UC/OS的母公司推出UC/OS-TCP/IP花了6人*2年的工作量,国内某公司使用LWIP作为移植的参照,花了4-5人*2年的工作量来测试与优化协议,使用商用TCP/IP栈的高费用就不足为奇了。作为广大的爱好者学习而言,如果只是跑跑原型,实验一下效果,以上的几种开源协议栈都提供了测试的例子,应该是不错的选择。
每个协议都有自己的特点,还有很多需要完善的地方,如果你想深入研究,这方面的学习也是一个不过的选择。