标题:
基于ARM和uC/OS的嵌入式SMI网络转换器设计与应用
[打印本页]
作者:
我是MT
时间:
2014-6-7 10:29
标题:
基于ARM和uC/OS的嵌入式SMI网络转换器设计与应用
引言
目前,随着互联网和嵌入式系统的高度发展,越来越多的工业测控设备已经将网络接入功能作为其默认配置,以实现设备的远程监控和信息分布式处理。然而,大量工业现场设备尚不具备网络接口。在IP113F光纤收发器监控系统的开发中,下位机通过单片机与光纤收发器的SMI进行通信以实现监控,上下位机通过RS-232接口传输数据。南于串口传输距离短,工作人员每天都要到现场对数据进行检查和诊断,不胜其烦。针对这种情况,有必要设计一个SMI到Internet的数据传输模块,以便对光纤收发器的运行状况作远程监测。
IP113F芯片简介
IP113F芯片是一款具有网管功能、超低功耗的光纤收发器,支持3.3V I/O,主要通过SMI(MDC,MDIO)对两组独立寄存器进行操作,以实现监控或重新设置本地或远端光纤收发器的工作状态。用户可以通过串行管理接口来访问寄存器,如图1所示。由于IP113F的地址是5位二进制码,所以一个管理单元最多可同时外挂32(25)个IP113F。数据在MDIO上是一位位传输的,是发生在MDC的上升沿跳变,MDIO上的数据通信协议如表1所示。当SMI处于空闲状态时,MDIO则处于高阻态,管理单元在MDIO上发送32位连续的"1"和"01"信号来初始化MDIO接口。
整体功能设计
系统的基本功能是32台光纤收发器同时通过同一个SMI网络转换器与远程的上位机进行通信,如图2所示。转换器完成的具休工作是接收本地或远端光纤收发器发送过来的测试数据,自动识别其长度和来源,将其转化为网络数据格式,通过以太网发送到上位机,同时接收上位机通过以太网发送过来的控制信息,并自动识别其发送的目标,再通过SMI口发送给相应的光纤收发器。根据实际需要,可以在上位机中通过以太网配置SMI网络转换器的IP地址。
硬件结构设计
转换器的硬件电路中选用基于ARM7内核的嵌入式处理器LPC2214芯片,用于进行整体控制。LPC2214芯片带有256KB的高速FLASH,并带有16K片内SRAM。为了满足通信过程中的数据缓存和具备一定系统运行空间的要求,片外利用IS61LV25616AL扩展了512KB的SRAM。另外,通过IIC总线,片外扩展了256字节的EEPROM,用于保存已设置的IP地址。选用10M全双工以太网控制器RTL8019AS芯片完成网络通信功能,HR61101芯片充当网卡变压器。采用通用I/O口,P0.5和P0.6模拟SIM的通信时序,对IP113F进行数据采集。电路整体硬件电路如图3所示。
LPC2214具有外部存储器接口,可以扩展4个Bank的存储器组(Bank0~Bank3),且Bank0~Bank3的片选信号分别为CS0-CS3,本设计中,用Bank0扩展SRAM,Bank3扩展RTL8019AS模块。由于LPC2210芯片是一个8/16/32位的微处理器,可以接受16位数据位宽的读写。设计中将RTL8019AS芯片的16位I/O脚IOCS16B连到高电平,实现以16位操作模式读写控制寄存器的内容,与用单片机作为处理器的设计相比,系统运行效率提高。通过将RTL8019AS的65脚JP接高电平以选择跳线工作方式,即RTL8019AS的I/O和中断由跳线决定,不需外扩EEPROM 93C46芯片存储信息来控制RTL8019AS的I/O和中断,减少了连线,提高了高频电路的稳定性。RTL8019AS工作在跳线模式时,其基地址为0X300。由于RTL8019AS工作电源是5V,而LPC2210的I/O电压是3.3V,因此在总线连接上串接470Ω的保护电阻。
系统软件设计与实现
引入RTOS
光纤收发器数据采集要求实时性比较高,若采用传统的前后台设计方法,会过于复杂,且实时性不能保证。采用实时操作系统RTOS可以解决这个问题。μC/OS-II操作系统是一种源代码公升的RTOS,具有代码短小精悍、简单易学的特点,对本设计来说是一个理想的选择。
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操作系统使系统的实时性极大提高。系统运行状况良好,工作稳定,软件上稍加改变就可应用于其他串口设备上,具有广阔的应用前景。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0