微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM7的串口服务器的实现

基于ARM7的串口服务器的实现

时间:08-29 来源:互联网 点击:

摘 要:文中提出了一种低成本、高性能的嵌入式串口服务器的硬软件设计方案。该服务器以ARM7芯片LPC2210为核心控制器, 采用RTL8019以太网控制器处理网络数据, TL16C554异步通信组件处理串口数据。对轻便TCP/ IP协议栈LW IP在μC/OS - Ⅱ实时操作系统中进行了移植, 并对16路串行通道设计了实时多任务方案, 使串口服务器能够以TCP/UDP模式在网口和串口端进行双向232 /485通信。实验证明本服务器能使传输数据实时, 准确。

通过扩展多串口, 可以在PC端远程监控、管理各种外设, 或对外设进行系统升级。通常串口服务器采用ARM9 微处理器和带TCP / IP协议栈的付费操作系统, 而文中提出的串口服务器是通过移植LW IP协议栈到代码开源的μC /OS - Ⅱ中实现, 这样不但降低成本, 而且代码的编写更加透明、灵活。

1 硬件系统的设计

本串口服务器采用Philip s的ARM7 系列芯片LPC2210,网络控制芯片采用RTL8019, 串口采用TL16C554芯片扩展。为得到更广泛的应用, 串口端还扩展485 接口, 通过跳线选择232 /485 方式。系统结构框图, 如图1所示。

图1 系统结构框图

2 软件系统的实现

串口服务器软件系统包括两部分: TCP / IP协议栈的移植和实时多任务应用程序。μC /OS - Ⅱ在LPC系列ARM中的移植采用周立功公司的方案。

2.1 TCP / IP协议栈的移植

LW IP是瑞士人Adma Dumkels等开发的源代码开放的精简TCP / IP 协议栈。目的是在于保证TCP协议完整的情况下减少系统资源的需求, 适合于资源较少的嵌入式系统应用。移植LW IP协议栈主要有两部分代码: (1)编写操作系统模拟层相关代码; (2) LW IP接口初始设置及网卡驱动。

2.1.1 操作系统模拟层相关代码

操作系统模拟层存在的目的主要是在μC /OS - Ⅱ和LW IP之间提供一座桥梁, 使LW IP能与μC /OS - Ⅱ能以相同的规范存在于一个系统中并能相互通信。LW IP有信号量和邮箱两种进程通讯方式, 而μC /OS - Ⅱ也提供这两种进程通讯方式。

信号量用来同步任务, 操作函数有sys_new_sem (建立并返回一个新信号量) , sys_ sem _ signal(指定要发送的信号量) , sys_sem_free (指定要释放的信号量) , sys_arch_sem_wait (等待由参数sem指定的信号量并阻塞线程) , 在这些函数体中进行数据结构的初始化并加入μC /OS - Ⅱ中的相关函数便可完成。

邮箱用来投递消息, LW IP允许将邮箱实现为一个队列,多条消息投递到这个邮箱。

μC /OS - Ⅱ提供了丰富的消息队列函数, 且μC /OS - Ⅱ和LW IP投递到邮箱中的消息均用指针实现。该系统建立了多个邮箱, 邮箱通过单向链表接在一起。接收消息的最大数量由消息数组决定, 结构图如图2所示。

图2 邮箱数据结构图

邮箱建好后用指针P_Mbox指向节点1, 申请新邮箱将节点1和节点2断开, P_Mbox指向节点1的p stNext, 以此类推。回收时P_Mbox的移动方向与申请时相反, 这样不会浪费内存且比较稳定。由以上结构和μC /OS - Ⅱ提供的函数写出邮箱相关函数。

除此之外, 还需要编写任务创建函数sys_thread_new和sys_arch_timeouts函数, 由于每个任务都有timeouts链表, sys_arch _timeouts函数返回的sys_timeouts结构保存了timeouts链表的首地址。

2.1.2 LW IP初始化设置及底层驱动

LW IP的初始化设置包含在LW IP通信进程的入口函数中, 其入口函数LwipEntry的基本结构如下:

Void LwipEntry ( void 3 pvArg)

{

/ /初始化LW IP, 涉及LW IP使用的内存区,PCB ( TCP /UDP)以及OS模拟层各个方面

__ilvInitLwip ( ) ;

/ /设置LW IP, 包括添加配置网络接口, 建立接受任务等工作

__ilvSetLwip ( ) ;

/ /在这里建立LW IP 的应用, 服务器支持TCP /UDP方式, 两种方式都建立

}

底层驱动在服务器每次收发数据中都要调用,这部分代码需要有良好的健壮性和稳定性。整个实现顺序, 如图3所示。

图3 底层程序框架图发送主线首先是以太网初始化函数( 1)开始,调用链路层发送函数(2)并增加各层协议头, 再调用RTL8019发送函数(9)发送数据。

接收主线除初始化以太网外, 需调用链路层初始化函数(3) , ( 3)中调用( 4)初始化RTL8019。

收到的数据先经过函数(8) , 然后通过信号量传送到函数(6) , 由( 6)调用( 7)得到数据个数, 最后由(5)根据以太网帧头携带的上层协议类型判断是交给IP协议还是ARP协议处理。

移植完毕, 进行数据收发实验验证。使用TCP传输协议, 由网口虚拟串口软件VSPM通过串口调试工具收发数据, 图4是以10 ms的发送速度在自发自收程序中收发数据的截图。

图4 TCP协议数据传输界面

由于COM1和COM2被PC机占用, 故由网口虚拟出

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top