全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

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

[复制链接]
962 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

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

     1硬件系统的设计
     本串口服务器采用Philips的ARM7系列芯片LPC2210,网络控制芯片采用RTL8019,串口采用TL16C554芯片扩展。为得到更广泛的应用,串口端还扩展485接口,通过跳线选择232/485方式。系统结构框图,如图1所示。 20121112050704834132592.jpg
   图1系统结构框图
     2软件系统的实现
     串口服务器软件系统包括两部分:TCP/IP协议栈的移植和实时多任务应用程序。μC/OS-Ⅱ在LPC系列ARM中的移植采用周立功公司的方案。
     2.1TCP/IP协议栈的移植
     LWIP是瑞士人AdmaDumkels等开发的源代码开放的精简TCP/IP协议栈。目的是在于保证TCP协议完整的情况下减少系统资源的需求,适合于资源较少的嵌入式系统应用。移植LWIP协议栈主要有两部分代码:(1)编写操作系统模拟层相关代码;(2)LWIP接口初始设置及网卡驱动。
     2.1.1操作系统模拟层相关代码
     操作系统模拟层存在的目的主要是在μC/OS-Ⅱ和LWIP之间提供一座桥梁,使LWIP能与μC/OS-Ⅱ能以相同的规范存在于一个系统中并能相互通信。LWIP有信号量和邮箱两种进程通讯方式,而μC/OS-Ⅱ也提供这两种进程通讯方式。
     信号量用来同步任务,操作函数有sys_new_sem(建立并返回一个新信号量),sys_sem_signal(指定要发送的信号量),sys_sem_free(指定要释放的信号量),sys_arch_sem_wait(等待由参数sem指定的信号量并阻塞线程),在这些函数体中进行数据结构的初始化并加入μC/OS-Ⅱ中的相关函数便可完成。
     邮箱用来投递消息,LWIP允许将邮箱实现为一个队列,多条消息投递到这个邮箱。
     μC/OS-Ⅱ提供了丰富的消息队列函数,且μC/OS-Ⅱ和LWIP投递到邮箱中的消息均用指针实现。该系统建立了多个邮箱,邮箱通过单向链表接在一起。接收消息的最大数量由消息数组决定,结构图如图2所示。
    20121112050704881012593.jpg
   图2邮箱数据结构图
     邮箱建好后用指针P_Mbox指向节点1,申请新邮箱将节点1和节点2断开,P_Mbox指向节点1的pstNext,以此类推。回收时P_Mbox的移动方向与申请时相反,这样不会浪费内存且比较稳定。由以上结构和μC/OS-Ⅱ提供的函数写出邮箱相关函数。
     除此之外,还需要编写任务创建函数sys_thread_new和sys_arch_timeouts函数,由于每个任务都有timeouts链表,sys_arch_timeouts函数返回的sys_timeouts结构保存了timeouts链表的首地址。
     2.1.2LWIP初始化设置及底层驱动
     LWIP的初始化设置包含在LWIP通信进程的入口函数中,其入口函数LwipEntry的基本结构如下:
     Void Lwip Entry(void 3 pvArg)
     {
     //初始化LW IP,涉及LWIP使用的内存区,PCB(TCP/UDP)以及OS模拟层各个方面
     __ilvInitLwip();
     //设置LW IP,包括添加配置网络接口,建立接受任务等工作
     __ilvSetLwip();
     //在这里建立LWIP的应用,服务器支持TCP/UDP方式,两种方式都建立
     }
     底层驱动在服务器每次收发数据中都要调用,这部分代码需要有良好的健壮性和稳定性。整个实现顺序,如图3所示。 20121112050704927882594.jpg
   图3底层程序框架图
     发送主线首先是以太网初始化函数(1)开始,调用链路层发送函数(2)并增加各层协议头,再调用RTL8019发送函数(9)发送数据。
     接收主线除初始化以太网外,需调用链路层初始化函数(3),(3)中调用(4)初始化RTL8019。
     收到的数据先经过函数(8),然后通过信号量传送到函数(6),由(6)调用(7)得到数据个数,最后由(5)根据以太网帧头携带的上层协议类型判断是交给IP协议还是ARP协议处理。
     移植完毕,进行数据收发实验验证。使用TCP传输协议,由网口虚拟串口软件VSPM通过串口调试工具收发数据,图4是以10ms的发送速度在自发自收程序中收发数据的截图。 20121112050704990382595.jpg
   图4TCP协议数据传输界面
     由于COM1和COM2被PC机占用,故由网口虚拟出来的串口是COM3,由图4可看出在面向连接的TCP协议下,高速收发数据不会丢包。
     2.2实时多任务方案的设计
     16个串口分别与网络端口组成16个双向通道。为使代码灵活、透明,程序不使用LWIP提供的SOCKETAPI。应用程序把每个双向通道分为发送,接收,串口3个任务,加上LWIP本身需占用一个任务,共需建立49个任务。μC/OS-Ⅱ最多能建立64个任务,其中8个操作系统本身占用,剩56个能满足要求。由VSPM软件把网口模拟成16个串口,串口服务器侦听的16个端口分别是1000~1015,如图5所示。 20121112050705021632596.jpg
   图5网口虚拟扩展16个串口界面
     网络端和串口端的数据接收会触发相应的中断。每个双向通道的3个任务各司其职,网口端接收数据中断后在传输层协议判断信源的端口号,交给相应的接收任务,处理完后交给串口任务把数据从相应串口发送;串口接收数据后在中断程序中判断信源的通道号,把数据交给串口任务,处理完后由发送任务通过网口把数据发送出去。
     服务器支持TCP/UDP两种传输协议,下面给出一个通道的TCP传输流程图,UDP部分代码只需在相应任务中调用LWIP给的UDP函数。TCP模式下串口服务器工作在Server模式,PC机工作在Client模式,流程图,如图6所示。 20121112050705084132597.jpg
   图6串口服务器单通道程序流程图
     3.结论
     文中本服务器是以性能不及ARM9且不能使用Linux的ARM7为主控芯片,但两种开源代码μC/OS-Ⅱ实时操作系统和LWIP协议栈的有效结合避免了高额的软件费用,而且能满足通信要求。实验证明,基于LWIP和μC/OS-Ⅱ的串口服务器不仅能实现双向通信,而且传输数据实时、准确,符合工业应用的要求。

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表