种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

单片机TCP/IP

(2019-08-28 12:16:47) 百科综合
单片机TCP/IP

单片机TCP/IP

单片机TCP/IP就是在单片机上运行的TCP/IP协定栈。由于嵌入式联网设备越来越多,需要在嵌入式设备上实现TCP/IP协定栈,但是嵌入式设备不同于PC机,它们一般採用MCU也就是单片机而不是CPU作为核心处理器。这就需要在单片机上实现TCP/IP协定栈。对于高端的32位单片机,由于其性能已经接近于低端PC机CPU(例如奔腾II系列),所以和在PC上实现TCP/IP协定栈没有多大区别;这里主要讲述低端8位(例如51单片机)、16位单片机TCP/IP协定栈。

基本介绍

  • 中文名:单片机TCP/IP
  • 外文名:danpianjiTCP/IP
  • 特点: 程式存储空间和外部RAM空间不大
  • 特点: 速度慢
  • 协定栈: eCos单片机TCP/IP协定栈
  • 协定栈: ZLIP 51单片机TCP/IP协定栈

单片机TCP/IP的特点

在单片机上实现TCP/IP与在PC机上实现TCP/IP是有所不同的,参考《TCP/IP在51单片机上的实现特点和方法》我们可以了解到,它的特点是:
1. 速度慢:根据该文档的介绍12M晶振的51单片机的最快网路传送速度为25KB/s。其中的关键在于TCP/IP需要对传送的每个位元组进行校验和计算,以及必要的拷贝。这样51单片机的处理速度就不够了。为了提高单片机TCP/IP的速度一般的方法是要对协定栈进行精简。
2. 程式存储空间和外部RAM空间不大:一般的单片机的最大程式和数据空间为64KB。TCP/IP协定一般需要对传送的数据进行快取,而一个最大的数据包就有1500B左右,当网路速度很大的时候记忆体消耗将很大。对于非嵌入式TCP/IP协定栈,64KB的程式和数据空间是不够的。
3. 单片机体系结构:51单片机是8位机,所以对于需要完成同一个数据操作,32位的PC机可能只需要10条指令,而51单片机可能需要几百条指令。

已有的单片机TCP/IP协定栈

由于TCP协定栈的程式流程较为複杂,因为程式中需要处理对方传送过来的数据、发起的连线,而我方并不知道对方会何时进行什幺样的操作,这就使得协定处理起来较为複杂。另外一个原因是单片机TCP/IP协定栈的稳定性是以非常重要的问题,一个稳定的协定栈需要在实际套用中经过长时间的测试,所以编写一个稳定的单片机TCP/IP协定栈更加困难。为此另外一种选择就是使用现有的TCP/IP协定栈。
1. eCos单片机TCP/IP协定栈:eCos TCP/IP栈是涉及与eCos作业系统/核心一起运行的。eCos(和TCP/IP栈)由大量处理其结构支持。eCos TCP/IP栈当前发布了一个测试版,作为一个单独的模组。
2. ZLIP 51单片机TCP/IP协定栈:ZLIP是专门为51单片机设计的嵌入式TCP/IP协定栈,可以在有作业系统和没有作业系统情况下运行,具有代码量适中、运行速度快、用户接口简单、兼容BSD socket接口的特点。实现了TCP、UDP、ICMP、ARP协定,ZLWeb实现了HTTP协定。支持多TCP连线、多UDP连线同时运行,支持在uc/os-II作业系统下多任务运行数据收发。可以用于51单片机TCP/IP上网解决方案。
3. uc/ip 单片机TCP/IP协定栈:uC/IP(mew-kip)是为为控制其设计的一个TCP/IP协定栈。代码基于BSD(很像所有其它栈)但对非常小的覆盖範围功能有所减少。它当前为Linux和DOS目标而建。
4. BSD 单片机TCP/IP协定栈:BSD栈历史上是其他商业栈的开始点,大多数专业TCP/IP栈(如带Wind-River VxWorks核心的)是BSD栈派生的。这是因为BSD在BSD许可协定下提供了他们的栈,它们的许用证使你能以修改或未修改的形式结合它们的代码而无须向创建者付版税。与GPL许用证相比,如果你结合GPL原始码,后者要求你的GPL中公开你的原始码。
5. lwIP 单片机TCP/IP协定栈:lwIP(轻型)TCP/IP栈是TCP/IP协定栈的一个小型实现。它包括带IP和ICMP的TCP和UDP传输层。还提供一个可选的BSD套接字API。为了性能,还包括一个零拷贝API。LwIP协定栈是为嵌入式系统设计的并能适合40KB的ROM和几百位元组的RAM。为了可移植性它用C编写。
6. uIP 单片机TCP/IP协定栈:uIP是专门为8位和16单片机设计的一个非常小的TCP/IP协定栈。uIP完全用C编写,以此可以移植到各种不同的结构和作业系统上。一个编译的栈可以有几KB ROM或几百位元组RAM中运行。uIP还包括一个HTTP伺服器作为服务内容。
7. TinyTCP 单片机TCP/IP协定栈:TinyTCP栈是TCP/IP的一个非常小的简单的实现,它包括一个FTP客户。TinyTCP是为烧入ROM设计的并且对大端结构似乎是有用的(初始目标是68000晶片)。TinyTCP也包括一个简单的乙太网驱动器用于3Com多汇流排卡。
8. WATTCP 单片机TCP/IP协定栈:WATTCP是为嵌入基于DOS的系统而设计的一个小型TCP/IP栈。它包括一个Real Mode DOS版本和另一个32位扩展环境版本。

如何使用单片机TCP/IP协定栈

用户在拿到一个单片机TCP/IP协定栈以后该如何处理呢。其中的处理分为两个部分:上层接口和下层接口。
4. 1 上层接口
用户使用单片机TCP/IP的目的实际非常明了,就是要实现数据的传送,即从PC机(或者另一个单片机)上传送过来的数据能够在本地单片机上接收,反之亦然。所以如果禁止底层的话,单片机TCP/IP协定栈就是一个传输数据的手段。所以最后归结到了使用send()、recv()函式即可。这就是使用单片机TCP/IP协定栈的核心所在。
但是事实上并没有这幺简单,因为对于TCP需要有发起连线、接受连线、传送数据、接收数据、关闭连线等操作以配合数据的传输。TCP/IP协定栈一般为用户提供如下的接口:
1. 初始化协定栈和释放协定栈的函式接口,类似Init(), Release()之类的函式。
2. 提供类似BSD socket的socket, sendto, recvfro, connect, bind, listen, accept, send, recv, closesocket, shutdown, getpeername, getsockname, htonl, htons, ntohl, ntohs, inet_addr,inet_ntoa,ioctlsocket,setsockopt, getsockopt,select等API函式,用户调用此类函式进行发起连线、接受连线、传送数据、接收数据、关闭连线等操作。
3. 接受连线、接收数据、被动关闭的处理:由于此类操作是上位机发起的,所以TCP/IP协定栈必须提供一套机制来处理此类事件的发生。一般来说有两种方法:
a) 主动等待:例如使用BSD的recv()函式等待数据的到来。
b) 回调机制:採用类似MFC的OnReceive()函式的回调机制,也即是说在接收到数据的时候会自动调用OnReceive()函式。
那幺用户如何使用以上的接口来实现远程控制、远程数据採集呢?方法很简单。
例如如果需要实现一个对LED灯的亮和灭的远程控制套用。首先PC机使用TCP/IP传送工具例如SocketDlgTest程式传送一个位元组的“1”到开发板(根据开发板的IP位址传送)。开发板在OnReceive函式中发现收到的是“1”,那幺就通过P1连线埠将灯打开;反之如果收到的是“0”则将灯熄灭。
如果是实现一个远程数据採集的套用,例如定时进行温度採集。首先PC机使用SocketDlgTest程式等待发来数据。开发板每隔一段时间採集一个数据,然后通过send()函式将数据传送给PC机(根据PC机的IP位址传送),这样PC就接收到了当前的远程温度数据。
4. 1 下层接口
下层接口是一个比较複杂的部分,实际上是TCP/IP协定栈和底层硬体的对接问题。如果用户将TCP/IP协定栈移植到自己的单片机系统上。由于硬体上存在一定的差异,就需要修改底层代码。这里需要包括:
1.网卡驱动:如果TCP/IP协定栈已经提供了网卡驱动,并且驱动和用户使用的网卡晶片一样,那幺就相对容易一些。这里只需要修改网卡的基地址即可。否则需要自己动手写驱动程式。如果网卡採用RTL8019AS可以参考老古开发网的单片机与TCP/IP网路。如果网卡採用CS8900,可以参考《嵌入式 TCP/IP 协定单片机技术在网路通信中的套用》
2.TCP/IP底层接口。一般单片机TCP/IP需要底层为其提供定时中断、网卡中断处理的入口。底层需要做相应的处理。

标 签

搜索
随机推荐

Powered By 种豆资源网||