应用笔记 4205

用uIP堆栈实现MAXQ微控制器联网


摘要 : 本应用笔记描述了如何用uIP TCP/IP网络协议栈实现MAXQ®微控制器联网。本设计中采用通用的SPI™至以太网转换IC作为MAC/PHY。MAXQ2000作为微控制器示例。

引言

系统远程监测和控制或许是微控制器应用最重要的功能之一。想象一下:一个巨大的高尔夫球场的草坪洒水系统,最好能够向主机自动报告故障状况。这样的系统几乎无需人工监测其是否正常工作。

RS-232串口或红外等多种通信方式可用来实现系统远程器件的控制和监测。然而,所有这些方法都受限于具体的接口标准,其中包括:是否与传输媒介和协议兼容、距离限制等。

以太网网络协议(IP)

网络协议提供了一个应对上述挑战的解决方案,所有现代操作系统都带有IP栈。而IP可在各种传输媒介上运行,到目前为止,以太网的应用最普遍。此外,以太网得益于交换和路由网络拓扑结构,因此不受距离限制。

借助于先进的MAC/PHY集成电路与板载缓冲器,可以用微控制器和以太网IP实现控制,并且几乎可以从所有远程系统采集数据。本文演示了如何利用免费的uIP堆栈和SPI至以太网转换IC实现MAXQ2000微控制器联网。

uIP介绍

uIP (读作"micro IP")提供了一个最小规模的IP堆栈,其中包括TCP、UDP和ICMP协议。uIP由Adam Dunkels开发,采用BSD方式授权。完整的源代码可从https://github.com/adamdunkels/uip下载。

当然,对于大多数应用,没有必要完全运行TCP/IP,过于浪费。uIP具有一整套功能,符合全功能主机的最低需求,并且可以避免其它简单IP堆栈存在的"特殊情况"。

编译环境

Rowley CrossWorks 1.1 build 1 C编译器用于编译、汇编和链接项目。为方便调试,所有代码优化功能均被禁用。最终代码仅占用MAXQ2000程序闪存存储器的一小部分。

MAXQ2000有2kB的数据存储器。使用这种数据存储器时必须谨慎,因为缓冲器必须用来处理IP数据包的内容。为了最大限度地利用数据存储器,所有常数都存储在代码空间内,并根据需要复制到一个固定大小的RMA缓存区。

uIP堆栈的使用

uIP堆栈可以看成一个事件循环,超时基于结构时钟设定。在主循环中,MAC/PHY接收到的数据包由uip_arp_ipin()uip_input()处理。这些调用会产生一个输出数据包,必须由MAC/PHY驱动程序传输。

然后检查计时器,清理已关闭连接及一段时间未出现的ARP表项,并调用应用程序回调函数以进行重发。主要事件循环为样板代码,大多数应用中无需改变。

注意:uIP实现了非常小的TCP窗口尺寸,这一点非常重要,只能有一个重要的(un-ACKed)数据包等候处理,有时可能需要重发。

实际应用处理由函数UIP_APPCALL完成。调用时,应用程序回调功能会检查几个功能并返回uIP当前状态。其中最重要的状态是:uip_connected()uip_closed()uip_aborted()uip_timedout()uip_newdata()and uip_rexmit()。前四个函数管理输入连接的打开和关闭;后两个函数管理数据的输入和输出。

当新数据到达套接字等待应用程序处理时,uip_newdata()将返回一个非零的结果。然后应用程序进行数据处理,这些数据保存在uip_appdata指向的缓冲区中,也可以返回响应。所有数据,包括以太网链路层和IP头储存在uip_appdata

如果网络丢掉返回至peer的数据的任何部分,应用将通过计时器超时调用应用程序回调功能并且uip_rexmit()返回一个非零的结果。

在这个点上uIP与其他IP堆栈不同。通常情况下,TCP数据包的转发由IP协议栈处理。当uip_rexmit()标记出现时uIP需要应用程序转发丢失的数据,可以节省存储空间。转发可以通过重新生成数据来实现,或将先前产生的数据保存在缓冲区以供转发。

MAC/PHY驱动器

发送和接收以太网IP数据包时,必须向uIP提供MAC/PHY驱动程序代码。API相当简单:驱动器必须发出信号表明输入以太网的帧准备就绪等待处理; 在线接收和传送数据包时必须调用函数。这些调用由macphy.c实现,从主事件循环调用。

本文中我们选择了Microchip ENC28J60 SPI-Ethernet芯片。该集成MAC/PHY通过SPI和8kB的数据缓冲存储器访问。图1为MAXQ2000和ENC28J60的连接电路。

图1. MAXQ2000微控制器和SPI至以太网转换之间的电路连接原理图
图1. MAXQ2000微控制器和SPI至以太网转换之间的电路连接原理图

实施uIP堆栈时,假设整个IP数据报驻留在存储器中。MAXQ2000有2kB的数据RAM,可能会用于其他任务,所以从以太网复制多达1500字节MTU数据包是不明智的。相反,可以用最大段长度的TCP特性来规定不接受超过500字节的字段,包括以太网链路层和IP头。段的大小对于大多数应用来说可以满足大吞吐量的要求。此外,规定MAC/PHY放弃超过500字节的数据包。

项目示例源代码包括位于文件macphy.c中的MAC/PHY驱动程序代码,相关文件包括macphy.hmacphy_priv.h

示例应用

本文的示例应用程序在TCP端口23实现了改进的回波服务器侦听。首先,启动MAXQ2000的实时时钟(RTC)作为事件定时。然后,初始化SPI硬件并加载MAC/PHY默认设置。

然后应用程序从PCB上的1-Wire® DS2502-E48检索一个唯一的以太网硬件地址。必须将该硬件地址告知MAC/PHY驱动器和uIP堆栈。执行两次调用即macphy_init()uip_setethaddr()来设置这方面的信息。

调用uip_init()进行uIP堆栈初始化,同时设置在编译默认IP地址、网络掩码、网关设置。

当输入连接完成后,向peer打印问候语。客户端发送的文字以"回声"的形式被送回,除了那些已经逐字母转换过的字。

单片机系统具有充足的资源执行系统的主要功能。例如,在高尔夫球场洒水系统中,可以用中断系统提供的实时时钟在适当的时间打开和关闭喷洒阀门。

由于TCP/IP可以无缝处理超时和转发,因此网络接口无实时限制。因超时而导致连接被删除之前,TCP连接通常会花费数分钟至数小时,因此,微控制器代码可以管理网络连接将其作为后台任务。

结论

用免费uIP堆栈很容易实现MAXQ2000联网。uIP本身的事件驱动性质使其适合单片机系统的远程监控和控制。

本应用笔记描述了一个简单的应用程序执行过程,该程序可以扩展以创建更复杂的系统。示例应用程序的源代码包括MAC/PHY驱动程序,可点击下载(ZIP, 112 kB)。
下一步
EE-Mail 订阅EE-Mail,接收关于您感兴趣的新文档的自动通知。
© , Maxim Integrated Products, Inc.
The content on this webpage is protected by copyright laws of the United States and of foreign countries. For requests to copy this content, contact us.
APP 4205:
应用笔记 4205,AN4205, AN 4205, APP4205, Appnote4205, Appnote 4205