《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 基于ARM 技术的CAN总线和以太网间的互联设计

基于ARM 技术的CAN总线和以太网间的互联设计

2008-05-29
作者:沈 跃,王家鼎

  摘 要: 提出一种CAN总线与以太网互联" title="互联">互联的系统设计方案,实现了CAN总线与以太网的数据互联。
  关键词: 网关 CAN总线  以太网  嵌入式  μC/OS-II

 

  CAN总线是一种设备互联的总线型控制网络,与其他现场总线相比,CAN总线的数据通信具有突出的可靠性、实时性" title="实时性">实时性和灵活性。这些特点使其可以满足过程控制和制造业自动化的需求,因此被认为是最具发展前途的现场总线之一。但是,由于其收发器驱动能力的限制,约束了CAN总线的最远直接传输距离和总线上可以挂接的最大节点数,给系统组网带来了一定的困难。另一方面,由于以太网的低成本、开放性、应用软硬件的支持以及强大的组网能力,目前已经是应用最广泛的局域网络技术。越来越多的工程师们开始采用CAN总线与以太网结合的技术。针对这一情况,本文提出一种CAN总线与以太网互联的系统设计方案,实现CAN总线网和以太网的数据互联。
1 系统结构
  CAN现场总线与以太网互联系统的网络架构图如图1所示。


  互联网关的嵌入不仅使管理深入到控制现场,同时给系统组网带来了很大方便,这主要体现在:
  (1)增大了系统的最大CAN节点数。一个CAN子网" title="子网">子网在不接中继器的条件下,最多可以挂接110个节点,而每个网关可以连接一个子网,通过多个网关可以把多个子网联系在一起,从而增加了系统的节点数。
  (2)扩大了系统的组网范围。CAN的直接通信距离只有10千米左右,系统按照现场区域和节点数构建子网,子网与子网通过以太网连接,从而突破了区域和距离的限制。
  (3)实现了具有不同传输速度的现场总线子网的相互通信。网关提供一个友好的人机接口,用户可以根据需要设置IP地址和CAN控制器的传输速率。
  网关的应用给系统带来方便的同时,也付出了一定的代价。在设计中必须考虑实时性与安全性,以提高系统的整体效率。
  (1)实时性。由于使用网关,对数据的处理必须经历先存储、再转换、最后再发送的过程,这增加了存储转发延时。因此在设计中必须考虑系统的实时性,要求系统在存储新接收到的数据后,立即启动协议转换和数据转发任务,尽量减小系统延时。
  (2)安全性。若网关出现故障,会对CAN子网和以太网间的通信产生影响,甚至导致子网与整个系统的通信瘫痪。因此在硬件设计中,要尽量避免干扰等问题的出现,软件必须具备对可纠正错误及时作出反应、并把错误信息返回给用户的能力。
2 系统硬件设计
  系统硬件设计分为三部分:CAN接口、以太网网络接口、人机接口。
2.1 主控制器的选择
  主控制器采用Philips公司生产的ARM控制器LPC2292。LPC2292是一个基于实时仿真和跟踪的16/32位ARM7TDMI-STM CPU,CPU内核工作电压为1.8V,引脚工作电压为3.3V。
  LPC2292嵌入256KB的高速Flash存储器,无需外扩存储器,完全可以满足系统代码的容量。独特的加速结构使32位代码能够在最大时钟速率下运行,可实现TCP/IP" title="TCP/IP">TCP/IP协议栈中的ARP、TCP、UDP、ICMP等网络协议。
  LPC2292内部集成两个CAN控制器,以方便系统采用冗余设计。CAN控制器主要特性有:单个总线上的数据传输速率高达1Mbps;32位寄存器和RAM访问;兼容CAN2.0B,ISO11898-1规范;全局验收滤波器可以识别所有的11位和29位Rx标识符;验收滤波器为选择的标准标识符提供了FullCAN-style自动接收。
  CPU外部静态存储控制器为CPU内部系统总线与外部存储器或外部I/O器件提供了一个接口。利用这种外部总线可以方便地与以太网网卡控制器连接。
2.2 CAN接口部分
  考虑系统的安全性,CAN接口采用冗余设计。当正常通道发生故障,可自动调用冗余通道进行传输。如果冗余通道也发生故障,则进入故障处理。其硬件接口如图2所示。LPC2292两路通道分别通过高速总线驱动器TJA1050与总线相连,总线驱动器采用带隔离的DC/DC单独供电,不仅实现了两路通道之间的电气隔离,也实现了网关与总线之间的电气隔离。


2.3 网络接口部分
  网卡控制器采用台湾RETACK公司的10Mbps以太网控制芯片RTL8019。RTL8019支持全双工工作模式,软件兼容8位或16位的NE2000模式;内部集成DMA控制器、ISA总线控制器以及16KBRAM、网络PHY收发器等。其与LPC2292的连接如图2所示。RTL8019使用LPC2292外部存储控制的BANK3部分,其数据地址范围为:0x83400000~0x8340001F。RTL8019的工作电压为+5V,而LPC2292的引脚工作电压为3.3V,所以还应在连接线上串联470Ω的保护电阻。网络传输线采用双绞线。
2.4 人机接口
  硬件部分还包括LED数码管显示和键盘。LED用来显示工作状态,键盘用来根据具体情况修正总线传输速率和网关的IP地址。
3 软件设计
3.1 引入RTOS

  网关对系统的实时性要求比较高,若采用传统的前后台设计方法,设计会显得过于复杂,且实时性不能保证。解决这个问题的最好方法是采用实时操作系统RTOS。μC/OS-II" title="C/OS-II">C/OS-II操作系统是一种源代码公开的嵌入式实时操作系统,具有代码短小精悍、简单易学的特点。针对网关的设计,这是一个理想的选择。
  μC/OS-II完全是占先式的实时内核,基于优先级。即总是让就绪态中优先级最高的任务先运行,因此实时性比非占先的内核要好。其大部分代码是用C语言编写的,可移植性强。
3.2 系统构成
  嵌入式网关的主要功能是进行以太网数据报文与CAN数据帧之间的协议转换,实现以太网与CAN总线的互联;其次是根据应用环境,通过人机交互接口改变网关的IP地址和CAN总线的传输速率。整个嵌入式系统的构成如图3所示。任务设计的前期工作有:
  (1)实时操作系统的移植:μC/OS-II绝大部分代码是用C语言编写的,可移植性强,可以在大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。μC/OS-II在LPC2292上的移植可参考文献[1]
  (2)TCP/IP协议和CAN协议的嵌入:μC/OS-II操作系统只包含了实时内核、任务管理、时间管理、任务间的通信同步(信号量、邮箱、消息队列)和内存管理等功能,用户必须根据需要添加相应的功能模块。网关的设计将TCP/IP和CAN协议嵌入到操作系统中,并提供API接口函数供用户调用。


3.3 系统实现
  采用RTOS使整个设计简单、易调试,各个任务相互独立且具有不同的优先级来保证紧急任务及时响应,从而有效地对任务进行调度。系统软件设计由操作系统和一系列用户应用程序构成。
  主函数是程序首先执行的一个函数,主要实现系统硬件和操作系统的初始化,该函数永远不返回。硬件初始化包括中断、键盘、显示等初始化;操作系统初始化包括任务控制块、事件控制块的初始化,而且在启动多任务调度之前,必须至少创建一个任务。此系统创建了一个启动任务,主要负责时钟的初始化和启动、中断的启动、CAN控制器的初始化与启动、端口与IP地址的初始化、RTL8019的初始化与启动,并且对各个应用任务进行了划分。在交出CPU的使用权后,自做空闲处理。
  (1)任务的划分
  要完成多任务系统的各种功能,必须对任务进行划分。本程序根据各个任务的重要性和实时性,把整个模块分成7个具有不同优先级的应用任务,即系统监控、CAN数据发送、键盘扫描、以太网数据发送、协议转换、LED显示、系统配置。表1为任务划分表。


  除了7个主要应用任务外,还有两个中断服务子程序。一个是时钟节拍中断,用于提供周期性信号源;另一个是接收中断,用于把接收到的数据写入缓冲区。
  (2)任务的具体实现
  任务划分后,各任务便具有独立的堆栈空间,彼此争夺CPU的使用权。一旦获得CPU的使用权,就会独立运行,完成特定的功能。
  CAN总线通信模块包括数据传输和总线管理两部分。数据传输实现的功能有CAN初始化、CAN报文发送和CAN报文接收。CAN初始化及报文的接收在启动任务与中断服务程序中实现,CAN报文发送和总线管理作为一个单独的任务独立运行。总线管理功能块的主要功能是总线检测,判断一路总线是否良好。如否,则进入另一路总线检测;如果冗余总线良好,则采用冗余总线通信。CAN数据发送任务需要系统调度器通知是否有待发送数据进入发送队列,任务的实现如图4所示。
  以太网通信模块由以太网数据收发功能块和数据协议管理功能块构成。数据的收发功能块主要实现RTL8019的初始化、数据报文的发送与接收。同理,RTL8019的初始化在系统的启动任务中实现。数据的接收在RTL8019的中断服务程序中实现。数据协议管理主要实现对接收数据报文的解析及给待发送数据添加协议报头。以太网数据发送与协议管理分别作为独立任务运行。


  以太网数据发送任务同样需要系统调度器通知发送队列中是否有待发送数据。若没有数据发送,则将该任务挂起,系统运行其他任务。以太网数据发送任务主要对RTL8019进行操作,根据RTL8019的状态,将发送队列中数据通过DMA传送到8019的发送缓冲区,启动发送,并根据发送结果对发送队列指针调整。
  以太网协议管理即协议转换任务在用户数据与8019驱动需要的数据报文之间进行协议转换。TCP/IP协议为四层模型:应用层、传输层、网络层和数据链路层,每层具有不同的功能,并有相应的子协议,层与层之间在逻辑上相互独立。在编程时,可以直接调用嵌入的TCP/IP协议的API函数,对数据报文进行分层。该任务对从8019传过来的数据处理过程如图5所示:不同的子协议具有不同的功能号,任务根据功能号对协议进行区别。将用户数据传递给8019驱动的示意图则为图5的逆序表示。


  (3)任务间的同步与调度
  通常多任务操作系统的任务不同于一般的函数,它是一个无限循环,而且没有返回值。如果没有更高优先级的任务进入就绪态,当前任务不会放弃对CPU的使用权。为了实现操作系统的正常运行和有关事件的同步,必须正确处理任务间的通信和事件标志的设置。系统的功能结构如图6所示。
  各任务具有不同的优先级,通过调用系统挂起函数或延时函数,可以启动具有更高优先级的进入就绪态的任务。高优先级的任务(例如1、2、3、4号任务)由于申请某个资源而发生阻塞,进入挂起态。系统调度器启动低优先级的任务,通过对延时参数的设置,每隔一定时钟节拍就启动键盘扫描或LED显示任务。如果其中有任何一事件发生就启动相关的任务。这个过程通过信号量的通信机制实现。对每个事件分配一个信号量,一旦事件发生就启动信号量的等待任务列表中进入就绪态的任务,从而保证任务与事件同步。


  在嵌入式硬件平台的基础上,用μC/OS-II实时操作系统开发应用程序有其独到之处,用户可以直接利用系统的接口函数编写应用程序,毋需另行开发。这极大方便了用户编程,缩短了软件的开发周期,提高了开发效率。基于ARM LPC2292 CAN总线和以太网间的网关,在实验调试过程中,运行状况良好,工作稳定。
参考文献
1 周立功.ARM微控制器基础与实战.北京:北京航空航天大学出版社,2003
2 Jean.Labrosses著,邵贝贝译.嵌入式实时操作系统μC/OS-II.北京:北京航天航空大学出版社,2003
3 饶运涛.现场总线CAN原理与应用技术.北京:北京航空航天大学出版社,2003
4 莫传孟.基于嵌入式系统μC/OS-II的双CAN通信构件.微计算机信息,2004;20(3)
5 Jean J.Labrosses著,袁勤勇译.嵌入式系统构件.北京:机械工业出版社,2002
6 村三公保.TCP/IP网络试验程序篇.北京:科学出版社,2003

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。