用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方式授权。完整的源代码可从http://www.sics.se/~adam/uip/index.php/main_page下载。
当然,对于大多数应用,没有必要完全运行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至以太网转换之间的电路连接原理图
实施uip堆栈时,假设整个ip数据报驻留在存储器中。maxq2000有2kb的数据ram,可能会用于其他任务,所以从以太网复制多达1500字节mtu数据包是不明智的。相反,可以用最大段长度的tcp特性来规定不接受超过500字节的字段,包括以太网链路层和ip头。段的大小对于大多数应用来说可以满足大吞吐量的要求。此外,规定mac/phy放弃超过500字节的数据包。
项目示例源代码包括位于文件macphy.c中的mac/phy驱动程序代码,相关文件包括macphy.h和macphy_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)。
1-wire是maxim integrated products, inc.的注册商标。
maxq是maxim integrated products, inc.的注册商标。
spi是motorola, inc.的商标。
互联网和新零售基因通过线下实体场景,实现数字化零售端做连接
信息技术飞跃的时代,距离真正实现无人驾驶有多远?
华为p10即将到来,p9上市已经十个月是否还有可买性?
一种简单应急灯电路设计
RY8120 18V 2A 500KHz同步降压调节器概述
用uIP堆栈实现MAXQ微控制器联网-MAXQ2000的应用
国巨未来3年内将斥资100亿建新厂
基于区块链技术的去中心化交易所DEX介绍
三星将推出语音支付 可苹果现在还开不了口
5G双模手机具有哪些优势?
虚拟经纱张力的测试仪技术
小米6什么时候上市?小米6最新消息:小米6指纹识别媲美华为
一种基于GaN的超高效功率模块
2元钱就能买上千张人脸照:照片主人有可能遭遇精准诈骗、洗钱、涉黑等
苹果14上市时间官方价格
苹果即将推出iMac和Mac mini升级版,配备新的6核和8核英特尔CPU
采用脉冲回波法的微电脑超声测距仪的原理及设计方案
成熟的PCIe 6.0 IP可极大降低复杂系统开发难度
苹果收入又破纪录,iPhone 12功不可没!
分享一个不错的3位LED电容表电路