基于ARM和uC/OS的嵌入式SMI网络转换器设计与应用
TCP/IP协议的选择与裁减
为使SMI转换器具有以太网接入功能,必须在arm处理器中嵌入TCP/IP协议。参考开放系统互连(OSI)模型,在ARM中嵌入的TCP/IP协议采用简化的四层模型,即链路层、网络层、传输层、应用层。根据实际需求,结合arm微处理器的处理能力,设计中对完整的TCP/IP协议进行了全方位裁减。链路层由控制同一物理网络上不同机器间数据传送的底层协议组成,RTL8019AS的驱动程序就是在该层实现的;在网络层,对于ARP包只响应ARP请求,取消了RARP,只维护最简单的一个IP地址与MAC地址的映射Cache表,定时刷新;对传输层,考虑到所设计的系统数据传输安全性,设计中选用TCP协议;对应用层,裁剪掉HTTP协议,通过将控制界面设置在上位机上来代替其功能。
通过上述裁剪,就得到一个适用的TCP/IP协议。把裁减后的TCP/IP协议嵌入到操作系统μC/OS-II中,并提供API接口函数供应用程序调用,使得arm可以快速无冲突地收发网络TCP数据包,符合工业测控系统对实时性和可靠性的要求。
关键问题的解决
当SMI串口和以太网进行双向通信时,如果双方的数据传输率处于同步状态,即接收方速率等于发送方速率,系统能够即时地将数据进行转发。但大多数情况下,收发双方的数据传输速率并不一致,相对于以太网来说,串口是一个慢速连接,可能导致丢失数据。因此,在系统中必须定义循环队列作为数据收发的缓冲区。在本系统中,定义了两个1024字节的循环队列作为数据收发的缓冲区,一个是串口接收缓冲区,另一个是以太网接收缓冲区。以太网的接收是通过中断触发的,相对而言,串口和以太网的发送任务优先级较低,接收的数据并不能立即转发出去,而是暂存在循环缓冲区中。如图4所示,Head和Tail分别指向队列的头部和尾部,当Head=Tail时表示队列空,(Head+1)Mod 1024=Tail表示队列己满,空闲缓冲区的大小也可通过Head和Tail指针计算。
收发器的串口通信协议中通过加入本地/远端和收发器号来辨别源地址和目的地址,对数据进行校验。由于转换器IP地址主要采用上位机通过以太网进行设置,所以在以太网的数据帧中加入命令头,以辨别设置的是IP数据还是与收发器通信的数据。
软件系统的实现
本系统整个软件设计由操作系统和一系列用户应用程序构成。系统创建了一个启动任务TaskStart(),主要负责系统硬件的初始化,包括时钟的初始化和启动、中断的启动、RTL8019AS的初始化与启动等,并对各个应用任务进行了划分。根据各任务的重要性和实时性,整个模块被分成6个具有不同优先级的应用任务,即IP地址设置、接收协议转换、发送协议转换、NET发送、SMI发送、SMI采集。
任务的执行
任务划分后,各任务便具有独立的堆栈空间,彼此争夺CPU的使用权。一旦获得CPU的使用权,就会独立运行,完成特定的功能。
本系统采用arm作为服务器,PC端作为客户端的TCP通信模式,由上位机主动请求连接arm.在串口和以太网建立通信之前,首先要调用IP地址设置任务,对IP地址、子网掩码、网关和SMI口的通信参数进行初始化设置。
SMI口通信实现的功能有SMI发送和SMI采集。SMI采集任务优先级较低,进行多任务调度后若没有相关事件发生,系统就一直运行SMI采集任务,若采集到本地或远端IP113F的状态发生变化,数据通过协议转换后发送到远程的上位机。SMI发送作为一个单独的任务独立运行。SMI发送任务需要系统 调度器通知缓冲区中是否有待发送的数据。若没有数据发送,则将该任务挂起,系统运行其他任务,如图5所示。
以太网通信模块由以太网数据收发和协议转换构成。数据的接收在RTL8019的中断服务程序中实现。以太网数据的发送、接收协议转换及发送协议转换分别作为独立的任务运行。以太网数据的发送任务同样需要系统调度器对缓冲区中是否有待发送的数据进行通知。协议转换主要实现对接收数据报文的解析及给待发送数据添加协议报头,在编程时可以直接调用嵌入TCP/IP协议的API函数,对数据报文进行分层。
任务间的同步与调度
通常多任务操作系统的任务是一个无限循环,而且没有返回值。如果没有更高优先级的任务进入就绪态,当前任务不会放弃对CPU的使用权。为了实现操作系统的正常运行和有关事件的同步,必须正确处理任务间的通信和事件标志的设置。系统的功能结构如图6所示。
系统进行多任务调度后,高优先级任务由于申请某个资源而发生阻塞,进入挂起态,系统运行较低优先级的SMI采集任务。每个事件分配一个信号量,一旦事件发生就进入就绪态的任务。当接收中断发生时,启动协议转换任务,此过程通过信号量的通信机制实现。接收协议转换任务先对来自上位机的数据解析,然后根据数据的命令头发往SMI发送队列或EEPROM发送队列,进而启动相应的SMI发送任务或IP设置任务。发送协议转换任务对SMI采集的数据进行协议转换后,存入以太网发送队列,然后通知NET发送任务,把数据发给上位机,从而保证任务与事件同步。
结语
本文所设计的SMI网络转换器实现了上位机同时对本地/远端32对光纤收发器进行监控的功能。设计中采用LPC2214芯片,克服了原先使用8位单片机处理器所带来的资源短缺和处理能力有限等问题。软件上,采用裁减所得的TCP/IP协议,极大地简化了编程的复杂度,嵌入μC/OS操作系统使系统的实时性极大提高。系统运行状况良好,工作稳定,软件上稍加改变就可应用于其他串口设备上,具有广阔的应用前景。
评论