您的当前位置:首页正文

基于RT-Thread的嵌入式网络通信系统的设计与实现

2022-11-12 来源:步旅网
基于RT-Thread的嵌入式网络通信系统的设计与实现

陈希超;王健

【摘 要】结合应用广泛的以太网物理接口和TCP/IP网络通信协议,设计了一个基于ARM Cortex-M3的嵌入式网络通信系统;系统选用源代码开放的RT-Thread操作系统,配合其中的LwIP协议栈,最终实现与远程网络设备间的数据通信.通过网络应用及测试表明,该系统能满足实时性和多任务的要求,并保证数据传输速率与可靠性.

【期刊名称】《电声技术》 【年(卷),期】2012(036)012 【总页数】5页(P49-52,56)

【关键词】ARM Cortex-M3;RT-Thread;LwIP;嵌入式网络通信系统 【作 者】陈希超;王健

【作者单位】杭州电子科技大学电子信息学院,浙江杭州310018;杭州电子科技大学电子信息学院,浙江杭州310018;聚光科技(杭州)股份有限公司,浙江杭州310052 【正文语种】中 文 【中图分类】TN393.04

随着嵌入式系统在消费电子、移动互联网和物联网中的广泛应用,基于嵌入式Internet的网络通信也已经成为IP网络终端与数字IP网络广播系统、工业控制设备与远程监控系统等通信网络间最主要的连接方式。尤其是在网络多媒体发展快速化、广播系统逐渐智能化、网络节目日益丰富化的今天,实现广播通信系统的实时

监测、广播电视节目的远程传输、IP radio服务器和IP收音机间的无缝连接以及广播电台和网络电台的多点、多级化视听,真正做到数字化处理、数字化传输和数字化享受,就需要将各种嵌入式设备和传统网络连接在一起。而使嵌入式设备本身能够支持Internet的网络通信协议TCP/IP,则是解决嵌入式网络和Internet网络领域间互联的根本途径。

本系统基于STM32系列芯片和以太网控制芯片DM9000A,利用软件实现TCP/IP协议,通过实时操作系统调度和管理数据通信,方便连接网络交换机,易于实现联网互联,并提高了数据传输速度和准确性。

STM32F103ZE是意法半导体基于ARM新架构的CPU,具有优异的实时性能、杰出的功耗控制,且支持多数主流嵌入式操作系统,工作主频为72 MHz,其中片内集成 DMA,IIS,USB,USART,CAN,SPI,IIC,ADC,DAC,定时器等单元模块,方便构建各类网络设备的同时,也提升了本系统的复用性和可扩展性[1]。

网络通信系统以STM32F103ZE为主控制芯片来搭建硬件平台,硬件电路部分包括存储系统、通信系统、电源模块、JTAG仿真电路及复位电路,其结构框图如图1所示。

STM32F10x内置嵌套的向量式中断控制器(NVIC),能够处理多达43个可屏蔽中断通道(且不包括16个Cortex-M3的中断线)及16个优先级。ARM Cortex-M3内核可以对4 GB空间进行简单和固定的存储器映射,片内512 kB的Flash用作存储器异常/中断向量表以及操作系统的镜像,系统复位后从中读取指令执行;64 kB的SRAM为程序的运行空间和数据空间,启动代码先将系统镜像复制到SRAM后执行。此外,该CPU内置灵活的静态存储控制器(Flexible Static Memory Controller),可以方便外扩总线型的SRAM,Nor Flash存储器。 由于处理器内部没有集成MAC电路,网络功能需通过网络接口芯片来实现物理层

通信。DM9000A由3.3 V供电,支持 IEEE发布的802.3网络传输协议的10/100 M以太网物理层单芯片收发器,片内集成滤波器、16 kB的FIFO的SRAM缓存,自带可触发中断的MII管理接口并支持中继模式和节点模式、全双工和半双工模式的转换[2]。通过RJ45连接到Internet,综合LwIP程序包、通信协议(TCP/UDP)和网络编程函数,即可实现网络数据传输。

DM9000A的网络设备驱动程序分为设备的初始化和数据的发送接收两部分。DM9000A的初始化过程是在CPU配置内部网络控制寄存器(NCR)、中断寄存器(ISR)等寄存器后进行的,具体过程包括软件复位、设置网络工作模式、设置PHY、选择模式、使能唤醒时间、使能RX/TX中断,使能数据接收功能等。

初始化完成后,DM9000A进入等待数据发送/接收状态,图2是其数据传输流程图。当处理器发送数据时,先将TCP或IP数据打包成以太网数据帧,然后通过16 bit总线写入到DM9000A的数据缓存区,再将数据长度等信息写到

DM9000A的相应寄存器内后使能发送;当DM9000A接收到外部网络传来的网络数据时,将数据帧缓存在内部SRAM中,由 CPU通过标志位对接收到的数据进行处理[3]。

RT-Thread是采用面向对象风格设计、C语言实现的开放源代码的RTOS,其突出特点是小型、实用和可裁剪。其核心能够小到仅占用2.5 kB的ROM和1 kB的RAM空间;系统线程调度核心是完全bitmap方式,可使计算时间完全固定;配置文件rtconfig.h包含多种选项,能够对Kernel细节进行精细调整,并可对文件系统、网络协议栈、图形用户界面及Finsh Shell等组件进行可选配置。

RT-Thread Kernel代码目前支持多数主流CPU芯片,其bsp(板级支持包)含有所支持的各平台的移植代码,并会包含有两个汇编文件,一个是系统启动初始化文件,一个是线程进行上下文切换的文件,其他的都是C源文件。移植时选好开发平台后仅需修改rtconfig.py和rtconfig.h文件。

RT-Thread源码具有非常好的移植性,可以非常容易的移植到其他开发环境下。本系统采用MDK开发环境,修改 rtconfig.py文件中 CROSS_TOOL=‘keil’和 EXEC_PATH=‘D:/Keil’后,并配置rtconfig.h使能LwIP和Finsh Shell(其他组件可根据需要配置)。

RealView MDK的用户程序入口是main()函数,main()函数调用

rt_thread_startup()函数(RTThread多平台下的统一入口点),函数中包含了RTThread操作系统的启动流程:包括初始化系统相关的硬件,初始化定时器、调度器等系统组件,初始化系统设备,初始化各个应用线程、并启动调度器。其中用户代码入口位置是rt_application_init(),在这个函数中可以初始化用户应用程序的线程,当打开调度器后,用户线程也将得到执行。

LwIP是一种源代码开放的TCP/IP协议栈的实现,占用的体积大概在几十kB的RAM和40 kB的ROM代码左右,因此十分适合于使用到嵌入式设备中。 LwIP 由协议的实现模块(IP,ICMP,UDP,TCP)、操作系统模拟层、缓冲与内存管理模块、网络接口函数和API接口函数等相对独立的模块组成。使用LwIP协议栈,需要初始化协议栈,同时协议栈本身会启动一个TCP/IP的线程,和协议相关的处理都会放在这个线程中完成[4]。

LwIP API在LwIP的应用中,可以充分发挥其内部结构优势,且不必在协议栈和应用程序之间复制数据,故可以使应用程序巧妙地直接处理内部缓冲区。LwIP API主要使用两种数据类型,netbuf和netconn。netbuf是描述网络缓存,对应的函数为netbuf_new()、netbuf_delete()、netbuf_ref()、netbuf_data()

等;netconn是描述网络连接,对应的函数为netconn_new()、netconn_delete()、netconn_connect()、netconn_recv()、netconn_write()等。

LwIP提供了一个轻型BSD Socket API的实现,为大量已有的网络应用程序提供了兼容的接口。LwIP的socket接口实现都在函数名前加有lwip前缀,同时在头

文件中把它采用宏定义的方式定义成标准的BSD Socket API接口。

BSD是UNIX/Linux系统中通用的网络接口,也广泛应用于嵌入式系统和实时操作系统中,不仅能够支持不同的网络类型,而且拥有内部进程之间的通信机制,图3显示了通过BSD Socket网络编程实现的分层结构[5]。

RT-Thread实时操作系统可实现多任务的调度管理,上层应用程序则可通过LwIP协议栈及调用LwIP API来实现网络通信及网络任务,再配合操作系统的RTGUI,DFS文件系统及设备驱动等组件来增加系统的实用性及扩展性。

超文本传输协议(HTTP)是一个实现WWW的应用层协议,是一种请求/响应协议,当基于HTTP的客户端/服务器数据交换有请求产生时,就开始一次HTTP数据通信。其过程如下:浏览器(客户端)首先提取出URL中的主机,然后向DNS发出请求、解析主机名的IP地址(服务器侦听端口一般为80);DNS将解析地址返回给浏览器;浏览器向该地址请求建立TCP连接;客户端发出请求报文,服务器向客户端发送响应报文,并将指定数据发送给客户端;结束后断开连接[6]。

Web Server任务是基于LwIP API接口函数来实现应用,图4为其任务流程图。从图中可以看出当用户通过网络连接访问服务器页面时,HTTP协议首先和服务器建立TCP连接,服务器通过进入netconn_accept()函数,并等待其邮箱信息的到来,等待期间线程被挂起。通过两次握手后,客户端就把HTTP请求报文作为第三次握手的第三个报文的数据发送给服务器,服务器收到HTTP请求报文后,就把所请求的页面作为响应报文返回给客户。

该Web Serve通过建立数据处理函数HTML编写服务器设置界面后,可应用于远程网络控制系统,通过在网页程序中加入<META />标记,浏览器可以自发周期性的刷新页面,用户在浏览器端可及时收到远程现场传感器采集的数据,并可控制及设置参数来调节和监控远程现场环境,图5为基于HTTP协议实现的嵌入式远程网络监控系统的测试效果[7]。

LwIP协议已经实现了大部分的Socket网络连接函数,要实现Socket的基本通信,只需要在此基础上通过调用其Socket网络连接函数即可实现简单的客户机/服务器网络数据通信。为测试本网络通信系统的可靠性和稳定性,在RT-Thread操作系统下增加TCP客户端和UDP服务器网络测试程序线程,其实现过程与Web Server类似,不同之处是基本网络通信过程采用了更为标准化的BSD Socket API来实现,数据处理过程也和各测试任务相关。经TCP&UDP测试工具及 RT-Thread自带的 Finsh Shell的测试表明,该系统发送数据和接收数据稳定可靠,传输速率可达10 Mb/s以上,满足多数嵌入式网络通信设备的要求。

本文详细介绍了利用STM32单片机,在移植RT-Thread实时操作系统的基础上,实现了几乎完整的TCI/IP协议栈,并且操作系统还采用模块化设计,用户在使用时可根据需要进行裁剪以节约资源。此外通过建立嵌入式网络应用程序检测了其通信性能,表明该系统为构建嵌入式设备的网络通信提供了一种低成本高可靠性的解决方案;结合嵌入式设备友好的人机界面、易于升级和扩展等优点,本通信系统在广播电视播控系统、网络媒体传播技术、智能监控领域中有着广泛的应用前景。

陈希超,硕士研究生,主要研究方向为嵌入式系统设计与应用; 王健,研究员,主要研究方向为光电检测技术。 【相关文献】

[1]李小瑞,党宏社,佟明,等.基于STM32F103CBT6的广播发射机微控制器硬件设计[J].电视技术,2008,32(11):28-30.

[2]江三青.基于STM32的嵌入式网络协议UIP的移植与分析[D].武汉:武汉理工大学,2011. [3]DAVICOM.DM9000A Application Notes V1.20[M].[S.l.]:Davicom Corporation,2005.

[4]于春雪.基于STM32F107的高速以太网接口设计与应用[J].电声技术,2011,35(9):63 -67.

[5]RICHARD S W,BILL F,ANDREW M R.UNIX Network Programming Volume 1,Third

Edition:The Sockets Networking API[M].北京:人民邮电出版社,2009.

[6]高嵩.基于HTTP协议的嵌入式远程监控系统的研究[D].北京:北京工业大学,2009. [7]王铁流,高嵩,袁海英,等.基于Cortex-M3内核处理器的嵌入式Web服务器设计[J].电子产品世界,2009(3):41-43.

因篇幅问题不能全部显示,请点此查看更多更全内容