完结MCS-51单片机嵌入式接入Internet 技能。单片机经过ATL8019AS 以太网操控器完结与Internet 的交互。运用开源代码的TCP/IP 协议栈uIP 完结对底层设备的驱动,一起经过uIP 协议的运用程序接口完结各种运用服务。给出了硬件规划图,编写了单片机主程序。运用此技能完结了一个城市中心泊车监测体系。
近年来以单片机(MICroComputerUnit,MCU)为代表的嵌入式体系在工业探测体系、智能仪器、安防体系、智能家电和信息家电范畴得到了广泛运用。
假如嵌入式体系能够衔接到Internet 上,则用户能够便利、便利、低价地经过网络进行长途操控、监测和信息传送。Internet 技能和嵌入式技能的彼此交融,不仅为嵌入式体系的规划和开发带来了史无前例的开展空间和机会,也使得 Internet 运用进入了嵌入式Internet 年代。据专家猜测,未来在 Internet 上的新增事务和运用中,将有 45%的增加来自于小型嵌入式体系。因而,嵌入式体系的 Internet 接入技能,将会有极端宽广的运用远景。怎么运用单片机接入Internet 网络成为未来最抢手的技能之一。
1 单片机嵌入式Internet接入技能
Internet 网络通讯中,TCP/IP 协议簇十分巨大,需求占用很多的体系资源。单片机的缺陷是资源有限,无法包容下Internet 的TCP/IP 协议簇。因而单片机完结嵌入式接入Internet 技能的要害是怎么在单片机等嵌入式设备的有限资源上完结Internet 的网络通讯协议栈。其难点在于:怎么运用单片机本身有限的资源对信息进行TCP/IP 协议处理,使之变成能够在Internet 上传输的IP 数据包。现在许多研究机构都在活跃讨论运用MCU 完结接入Internet 技能,呈现了多种单片机嵌入式Internet 技能计划,这些技能完结计划能够归为以下几类。
(1) 运用专用的嵌入式芯片。专用嵌入式芯片是一种内置了通讯和操控功用的单片机,能够完结实时多任务操作。比传统的单片机硬件供给更强的体系规划灵活性。这样的芯片有Ubicom 公司的IP2022芯片,MOXA 公司的Nport Express 芯片等。这类芯片功用强,能够完结多种网络协议,一般供给有相应的TCP/IP 网络协议栈。可是这种芯片价格偏高,用户需求付出软硬件费用,不易于完结商场的广泛运用。
(2) 嵌入式体系组成专用网经过PC 网关接入Internet.小型嵌入式体系经过总线技能组成专用网络,选用一个PC 机作为网关,该 PC 将专用网发送来的信息经过专用软件转换为TCP/IP 协议数据包,然后发到 Internet 上以完结长途通讯。该计划是前期选用得较多的技能。可是这种计划的缺陷是要运用一台专用的PC 机,明显它只适用于某些工业数据收集体系,不易于向信息家电和网络化智能仪器仪表等范畴推行。
(3) 运用一般单片机和网络操控芯片。这种办法完结起来比较简略,并且可依据实践需求进行功用扩展,可是需求在单片机上完结嵌入式TCP/IP 网络协议,软件编程的作业量比较大。由于选用一般单片机,所以其长处是本钱低,单片机体积小,易于以极高的性价比向许多需求完结嵌入式接入Internet 的场合推行。本文规划的体系便是选用这种技能计划,下面将要点剖析其硬件和软件规划。
2 单片机与网卡的接口电路
2.1 体系整体规划
图1 体系整体规划。
体系选用最常用的MCS 8051 系列单片机,此类型单片机价格低价且运用广泛。网卡选用台湾ReaLTEk公司出产的ATL8019AS 以太网操控器芯片。由于Internet 网络协议的程序代码量较大,所以体系除了单片机和网卡外,还增加了一些外围电路。包括用作数据缓存的RAM存储器和RS232 接口,前者用作数据缓存器,后者作为单片机与现场设备进行数据交互的接口。体系整体功用规划如图1 所示。
在上述体系规划中,单片机首要完结Internet数据的解包和串口RS232 数据的封包。长途PC 机传输来数据包经过Internet 物理前言抵达以太网操控芯片 RTL8019AS 内,RTL8019AS 履行地址解析协议,然后交给 C8051 单片机,单片机履行TCP/IP 协议模块,去掉 TCP/IP 报头后将数据经过RS232 串行口交给数据收集体系的现场设备。反之,假如是现场设备发送数据到单片机,那么单片机将数据依照TCP/IP 协议格局封包后送入RTL8019AS,由网卡芯片传输到Internet 中。经过上述方法,单片机完结与Internet 的交互,然后完结数据收集体系的互联网长途操控。
2.2 标单片机与网卡的接口电路
单片机是本体系的中心,因而单片机与网卡的接口电路十分要害。本体系选用8051 系列单片机,是由于8051 单片机是最常用的单片机,其价格低价且运用广泛,在工业设备运用中易于下降体系本钱。一起8051 编写程序简练,程序调试便利。8051 单片机与以太网操控器芯片的衔接电路如图2 所示。
图2 单片机与以太网操控芯片衔接图。
8051 单片机P0 口的8 位数据总线D0-D7、P2口的5 根地址线A8-A12、读信号线RD、写信号线WR、2 个守时器操控端T0、T1 别离与Realtek8019AS 的各信号线对应衔接。
Realtek8019AS 芯片作业在8 位总线方法。8051 单片机驱动网络操控芯片RTL8019AS,经网络阻隔滤波器HR901170A 后完结Internet 接入。
3 TCP/IP协议栈在单片机上的完结
3.1 嵌入式TCP/IP 协议栈
TCP/IP 协议是Internet 的中心协议。单片机完结嵌入式接入 Internet 有必要要在单片机上完结TCP/IP 协议。由于TCP/IP 协议簇反常巨大,而单片机片内资源有限,所以要在单片机上完好完结TCP/IP协议是不可能的。现在许多公司依据不同的嵌入式设备开发了面向商用的嵌入式TCP/IP 协议栈,这些协议栈缺陷是面向特定公司出产的芯片,且需付出贵重的软件运用费。假如选用这类协议栈则使得规划的单片机嵌入式Internet 体系不具有性价比上的优势。经过比照,最终在本体系中选用开放源代码的TCP/IP协议栈uIP0.9 作为规划中心。uIP0.9 是一个适用于8/16 位单片机上的小型嵌入式TCP/IP 协议栈,感兴趣的用户能够免费在网络上下载其源代码并对其进行修正,以习惯不同的运用需求。uIP0.9 协议栈选用模块化规划,保存网络通讯所必要的协议机制,大大减少了协议代码量(代码量在几千字节左右),只需求几百字节的内存就能够顺畅运转,下降了协议对体系资源的要求。uIP0.9 彻底习惯当时的单片机嵌入式体系。
3.2 uIP 的体系结构
uIP 协议依据嵌入式体系的需求,去掉了TCP/IP协议中许多不常用的功用,保存网络通讯中所需求的ARP(可选)、IP、ICMP、TCP、UDP(可选)等最中心的部分。协议悉数用C言语编写,其代码占用量很少,对RAM 资源要求也极低。例如IP/ICMP/TCP 中心模块代码巨细为3304 字节,运用的RAM 只需求360字节。其运用层接口和设备驱动层接口十分简略。
uIP 协议将规划要点放在IP、ICMP 和TCP 协议的完结上,而将UDP 和ARP 协议完结作为可选模块。uIP协议的体系结构如图3 所示。
图3 uIP 协议栈结构图。
3.3 uIP 的底层设备驱动接口和运用程序接口
uIP 是一个仅包括三层网络层中心协议的协议栈,uIP 本身不包括任何类型的底层网络驱动和上层运用程序,它只供给接口函数供用户开发运用。因而为了完结与网络设备的交互,用户有必要依据网络设备的类型,在uIP 中自行完结对底层网络设备的驱动。对本例来说,网络设备是RTL8019AS 网卡,因而需求在uIP 中完结对RTL8019AS 网卡的驱动。假如用户需求在Internet 上经过http 协议阅读和获取现场数据,还有必要在uIP 上完结根据HTTP 协议的WEB 运用服务。
RTL8019AS 网卡驱动首先是对网卡芯片的上电初始化,经过函数init_8019as()进行,用于设定网卡物理地址,设定收发缓冲区方位和巨细等。其次是发送数据函数eth_send()和接纳数据函数eth_rcve()。
而uIP 协议栈则经过内核中的uip_input()函数完结对底层网络设备的驱动,该函数是uIP 协议的底层设备进口。它包括两个全局变量uip_buf、uip_len.前者用于寄存接纳到的数据包,后者表明接纳发送缓冲区里的数据长度。uip_input()函数处理从网络设备驱动发送来的IP 包。处理完毕后回来变量uip_len,假如uip_len 是0,则没有数据要发送。不为0 则调用网络设备驱动程序eth_send()函数来将uip_buf 里的uip_len 长度的数据发送到以太网上。eth_rcve()函数将接纳到的数据存储到缓存uip_buf 指定的缓冲区中,体系调用uip_input()函数,并在需求时调用运用程序。
uip_perioDIC()能够理解为是一个周期时钟函数,一般每一秒履行一次,单片机用它周期性地轮询各衔接。由于uIP 协议要处理许多守时事情,例如包重发、ARP 表项更新。当周期计时激起,每一个TCP 衔接调用uip_periodIC(),其TCP 衔接编号作为参数传递给uip_periodic()函数。uip_periodic()函数查看参数指定的衔接的状况。当uip_periodic()函数回来后,会查看uip_len 的值,若不为0 则将uip_buf 缓冲区中的数据包发送到网络上。
uIP 协议的运用程序接口用于完结web 之类的运用服务。uIP 界说了一个宏UIP_APPCALL()作为该接口,供用户运用。当用户要编程完结某运用服务时,只需求将宏UIP_APPCALL()界说成实践的运用程序函数名