您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

基于ARM的CAN总线和以太网通讯模块的实现

发布日期:2011-05-26

< arm处理器 arm11处理器 arm架构处理器 arm9处理器 arm处理器功耗 arm微处理器 arm处理器模式 arm处理器的优点 arm 协处理器 arm a8处理器 P>  近20 年来产业测控体系生长的趋势是:疏散控制和会合办理、标准化和开放性。产业测控体系从传统的会合丈量控制体系转向网络化的集散控制体系。随着现场总线技能高速生长和标准化程度不绝进步,以现场总线技能为底子的开放型集散测控体系—现场总线测控体系得到了遍及的应用。同时,以太网的应用也敏捷向产业测控体系渗入渗出,在产业主动化应用中异军突起。

   这种趋势的出现与谋略机技能、信息技能、网络通讯技能的高速生长相干。当代产业体系信息互换的需求也已经从办理层内部敏捷包围到控制、现场配置等各个层次,连接上层网络和现场总线的通讯配置成为工厂主动化体系中的关键配置之一。CAN-Ethernet通讯模块,是一种直连续接以太网和CAN现场总线的配置,有效办理了控制体系中现场总线和上层信息办理层的互联题目,使主动化体系中的信息互换可以深入到现场配置一级。

  1  CAN 总线和以太网的连接

  现有的CAN 总线到以太网的通讯实现方案中,采取较多的是利用一台连接以太网的谋略机,在谋略机中安置一块内置式CAN通讯板卡;大概通过谋略机并行和串行接口外接CAN 的通讯模块。这种要领有肯定范围性,比方,利用谋略机体积大,本钱高;谋略机妨碍后的重启速率慢,这大概紧张影响体系的事变。采取基于ARM微处理惩罚器的单板机体系创建CAN-Ethernet 通讯模块,可以很好地办理上述题目,低落体系的本钱,进步其性能。CAN-Ethernet通讯模块连接以太网和CAN 总线的布局如图1 所示。在以太网和CAN 总线之间,可以挂接一个通讯模块连接两种网络,也可以利用多个通讯模块形成多个通路。对付第二种环境,以太网上的谋略机可以通过指定IP地点和上层协议的端口选择通路。

通过通讯模块连接以太网和CAN 总线

图1  通过通讯模块连接以太网和CAN 总线

  2  通讯模块的硬件计划

   信模块的硬件内核采取高性能的ARM处理惩罚器S3C44B0x。它是一种精简指令处理惩罚器,可以在32位指令字的ARM模式下和16位指令字的Thumb模式下事变,计划者可以根据必要在性能和代码大小之间举行折衷;片内有8KB的高速静态RAM,既可以作为高速缓存,也可以作为片内存储器利用;片表里设包括异步和同步串行接口、I2C接口、LCD控制器及接口、及时时钟等。ARM处理惩罚器还具有低能耗和高性价比,非常实用于构建性能较高的嵌入式体系。

    通讯模块利用2片39VF040芯片,位扩展后构成512K/16bit共1MB的Flash ROM作为步伐和配置数据的存储空间,利用1片62LV25616芯片构成256K/16bit 共512B的静态随机存储器。CAN总线通讯控制芯片选用了Philips公司的SJA1000T,它是一种独立的CAN 总线通讯控制器,仅必要CPU给出须要的指令,控制器就可以主动完成链路层以下的收发事变,并关照CPU总线的事景况态。以太网通讯控制芯片采取了台湾Realtek公司的RTL8019as,它是一种ISA 接口的10Mb/s以太网卡芯片,内部包括了以太网媒体访问控制和物理层驱动,并带有16KB的片上缓冲RAM。

  2. 1  处理惩罚器和5 V 体系数据线的连接

  体系中的处理惩罚器S3C44B0x 和存储器芯片都利用3.3 V 的IO电压,CAN总线接口、以太网接口则利用5V的事变电压。 S3C44B0x 的数据、地点和控制信号线可以直接驱动这些外围电路芯片(参考S3C44B0x、SJA1000、RTL8019as 数据手册) ,但是外围电路芯片输出的高电平大概损弊端理惩罚器和直接挂接在处理惩罚器数据线上的其他芯片。因此,数据线上应该利用总线转换器举行3.3/5V电平转换。体系选用了兼容3.3 V和5V的信号电平的双向总线收发器LCX245芯片。LCX245 的控制信号包括方向控制端DIR(0 :B →A ,1 :A →B) 和使能控制端OE(0 :接通,1 :隔绝) ,这些控制信号将利用GAL芯片孕育产生。图2 为体系的硬件连接表示图。

体系的硬件连接表示图

图2  体系的硬件连接表示图

  GAL 芯片选用GAL16V8D-15LP ,它的传播耽误时间为15ns ,反馈耽误时间为7ns ,适于较高速率的事变。除了孕育产生总线收发器芯片的控制信号外,同一片GAL 还用来孕育产生SJA1000 必要的控制信号。根据处理惩罚器S3C44B0x 的输出信号, 包括为SJA1000分派的地点组选通讯号nGCS3和RTL8019分派的地点组选通讯号nGCS4、读写信号线nOE和new,可以孕育产生总线收发器LCX245所必要的DIR和OE信号,各信号如图3 所示。

LCX245 控制信号的孕育产生

图3  LCX245 控制信号的孕育产生

       nGCSx 是处理惩罚器的地点组选通讯号,S3C44B0x 将外部地点空间从地点0 开始,每32M分别为一个组(Bank ) ,外部寻址时地点线A0 ~ A24 输出组要地本地点,该地点地点的组的组选通讯号同时有效。图中虚线代表写操纵时的DIR 信号,实线为读操纵的信号。从图中可以得到利用ABEL 语言形貌的的信号天生逻辑式为:   
  

      OE = (nOE &new) # (nGCS3 &nGCS4 &nGCS5) ; 
       DIR = nOE # (nGCS3 &nGCS4 &nGCS5) ;   
  

       但是为了使体系越发稳固地事变,应包管OE 信号有效时DIR 信号不产生变革,也便是说举行读操纵时图中OE 低电平脉冲的前沿应晚于DIR ,后沿应早于DIR ,如许将出现反馈逻辑,可以利用雷同于同步时序电路的计划要领计划。图4 是OE 信号和DIR 信号的次态卡诺图,次态切合上述请求,并且在输入肯定的状态下,OE 信号和DIR 信号总是每次变化一个,逐次进入末了的稳态状态(粗体字表现) 。图中“×”表现不会出现的输入状态。

OE 和DIR 次态卡诺图

图4  OE 和DIR 次态卡诺图

  根据卡诺图重新写出的次态逻辑孕育产生式,消除单独输入(包括OE 和DIR 确当前状态) 变革大概引起的竞争- 冒险征象后为:

  Oen = (nOE &new) # (nOE & ! DIR) # (new &DIR) # (nGCS3 &nGCS4 &nGCS5) ; ///

  DIRn = ( ! OE &DIR) # (nOE &DIR) # (nOE &OE) # (nGCS3 & nGCS4 &nGCS5) ;

  编译GAL 逻辑时应严格根据逻辑式天生与或逻辑。

  2. 2  CAN 总线通讯控制芯片SJA1000 的读写

   CAN总线通讯控制芯片SJA1000 没有提供单独的地点线,而利用可以与Intel 和Motorola系列微控制器兼容的分时复用地点/ 数据线。在一个读写周期内,微控制器起首输出操纵地点并使地点锁存信号ALE 有效,SJA1000 在ALE 信号的降落沿将操纵地点锁在片内;之后微处理惩罚器发出读写信号举行数据传输。但S3C44B0x 的数据线和地点线是疏散的,对SJA1000 的读写操纵必要模仿微控制器,先在数据线上写一个操纵地点,并模仿孕育产生一个ALE 信号锁存这个地点,之掉队行正常的读写操纵。体系利用地点线ADDR0 区分地点传输和数据传输:写奇地点时,不选通SJA1000 芯片,但给出一个有效的模仿ALE 信号;读写偶地点时,选通SJA1000 读写数据。别的,体系同时有两路CAN 总线接口,读写操纵根据地点线ADDR1 区分两个SJA1000 芯片,两个片选信号和ALE 信号都要通过GAL 芯片孕育产生,各信号如图5所示。

SJA1000 控制信号的孕育产生

图5  SJA1000 控制信号的孕育产生

  图中虚线是向SJA1000 传输和锁存地点的进程,实线是读写操纵的进程。用ABEL 语言誊录的各信号孕育产生逻辑式为:

  CAN-CS = nGCS4 # ADDR0 ;

  ALE = ! new &ADDR0 & ! nGCS4 ;

  对SJA1000 的操纵地点如下:地点锁存向0x08000001端口写地点;数据读写通过地点0x08000000。

  3  通讯模块的软件计划

   通讯模块和CAN 总线上的配置节点之间直接通过SJA1000收发CAN 总线报文举行通讯,报文中的数据格局可以是基于CAN 总线的上层标准协议,也可以由用户定义。为了方便与以太网上谋略机的通讯,CAN-Ethernet 通讯模块在以太网一端利用UDP协议,如许,谋略机上的软件可以利用操纵体系提供的网络访问办事。

  每一个CAN-Ethernet 通讯模块必要设置局域网内一个惟一的IP地点,通过牢固的UDP端口和谋略机通讯。模块和谋略机之间既可以利用对单点IP的通讯,也可以在UDP端口发送广播报文。在以太网一端,通讯模块吸取到UDP 报文后,将此中的信息构导致CAN 总线报文发往CAN 总线;在CAN 总线一端,通讯模块吸取报文标识可以或许通过本节点吸取码和吸取掩码设置的CAN 总线报文,并封装为UDP 报文,转发到以太网上。各节点IP 地点、UDP事变端口和CAN报文吸取掩码等设置在体系初始化时举行。

      3. 1  通讯控制芯片的初始化和收发操纵

  对SJA1000T的根本操纵如下:

  ①初始化:硬件复位,进入复位方法; 设置为BasicCAN 模式,CDR = 0x08 ;设置波特率控制字BTR0 ,BTR1 ;设置吸取码和吸取掩码ACR、AMR;完成设置,进入事变模式,CR = 0x1E。   

  ②发送:将CAN 总线报文写入SJA1000T 发送缓冲区TX2IDR1~2 , TXDR1~8 ;写发送下令,CMR = 0x01。

  ③吸取:从RXIDR1~2、RXDR1~8 读出CAN 一帧CAN 总线报文;将SJA1000T 的吸取缓冲区窗口滑动到下一帧,CMR =0x04。

  RTL8019AS内部有页地点为0x40~0x79 的256个缓冲页,每页256B。这些缓冲页的一部分作为吸取缓冲区,肇始页地点和结束页地点通过PSTART、PSTOP 寄存器配置,剩余可以作为发送缓冲区利用。硬件把吸取缓冲区作为环形缓冲区利用,CURR寄存器和BNRY寄存器分别指明缓冲区中未利用部分的肇始和结束页地点。硬件吸取到数据后会主动修改CURR 的值,而BNRY必要读出一帧数据后由软件修改;对RTL8019AS的根本操纵如下:

  ①初始化:硬件复位操纵,进入克制方法;写入物理地点到PR0~PR5 ,写入0x00 到多点吸取地点寄存器MAR;设置内部发送缓冲区器起止页地点到PSTART、PSTOP;写入当前 
页地点到CURR和页地点界寄存器BNRY中;进入正常事变方法,CR =0x02。

  ②发送:将以太网报文加载在RTL8019AS中设置的发送缓冲区中;写发送肇始页地点到TPSR ,写发送内容长度到TBCR0~1 ;写发送下令,CMR = 0x1A。

  ③吸取:从在RTL8019AS中设置的吸取缓存页中读出一帧以太网报文;根据报文长度变化页地点边界BNRY的值。

  3. 2  UDP 和CAN 报文的转换

  CAN - Ethernet 通讯模块收到CAN 总线报文时,将整个报文封装在一帧UDP 报文中;吸取到目标端口与本身的事变端口符合的UDP 报文时,取出此中的数据段作为一帧CAN 总线报文。以太网报文到CAN 总线报文的详细转换进程如下:

  ①要是吸取到的以太网报文包括IP 报文,分析出IP 报文,不然扬弃这帧报文;

  ②要是IP 报文的目标地点立室,并且包括一帧UDP 报文,分析出UDP 报文,不然扬弃;

  ③要是UDP 报文的目标端口立室,分析出此中的CAN 总线报文,不然扬弃。

  CAN 总线报文到UDP 报文的转换进程是:

  ①吸取到的CAN 总线报文装入UDP 报文的数据段,谋略校验和,完成UDP报文封装;

  ②加上IP 报文头部,谋略校验和,完成IP报文封装;

  ③加上以太网报文的头部,报文尾部的校验和不必要软件完成,RTL8019AS在发送时会主动添加。

  为了淘汰在转换进程中的数据拷贝,定义了如下数据布局。从CAN总线上收到的报文直接放在Frame布局体的can[ ]成员中,并记录长度,封装为UDP报文的进程便是添补Frame布局体中其他成员的进程;从以太网上收到的报文逐字节放入Frame布局体中,CAN 报文就包括在can[ ]成员中。

  struct EthHead {
unsigned char DstPhyAddr[6 ] ;  / / 以太网目标地点
unsigned char SrcPhyAddr[6 ] ;  / / 以太网源地点
unsigned short Prt ;  / / 协议标识
} ;
struct IPHead {
unsigned char VerLen ;  / / 版本号和头长度
unsigned char ServType ;  / / 办事范例
unsigned short Len ;  / / 长度
unsigned short ID;  / / 报文ID
unsigned short FlagAndFrag ;  / / 标记和分段
unsigned char TTL ;
unsigned char Prt ;  / / 协议标识
unsigned short HdChksum;  / / 头校验和
unsigned char srcIP[4 ] ;  / / 源IP 地点
unsigned char dstIP[4 ] ;  / / 目标IP 地点
} ;
struct UDPHead {
unsigned short srcPort ;  / / 源端标语
unsigned short srcPort ;  / / 目标端标语
unsigned short Len ;  / / 长度
unsigned short Chksum;  / / 校验和
} ;
struct Frame {
 struct EthHead ethhd ;
 struct IPHead iphd ;
 struct UDPHead udphd ;
unsigned char can [ 10 ] ;  / / 安排CAN 报文 

  short canlen ;  / / 记录收到的CAN 报文长度
} ;

      3. 3  通讯步伐的实现

  处理惩罚器对SJA1000T和RTL8019AS 的操纵都利用了停止方法,通讯模块的软件步伐可以分成SJA1000T 停止办事步伐、RTL8019AS停止办事步伐和主步伐3 个部分,是典范的前、背景处理惩罚布局。在停止办事步伐中,将收到的CAN 总线报文和以太网报文读入内存中的缓冲区,并累加缓冲区内还未处理惩罚的报文计数。在主步伐循环中,轮番处理惩罚两个缓冲区中的报文,并减小报文计数值。图6 是SJA1000T的停止办事流程、RTL8019AS停止办事流程、主步伐的流程。由于SJA1000T内部的吸取缓冲区只有64B ,以是在步伐中定义了容纳32个Frame布局体数组can- rbuf [ ]并构成环形缓冲区。同时也定义了雷同大小的数组eth- rbuf [ ]构成以太网吸取的环形缓冲区。

通讯模块软件流程图

图6  通讯模块软件流程图

  在调试进程中发明,要是转发进程被特定的停止步伐打断,大概产生报文计数错误;要是向RTL8019AS写入待发送报文的进程被以太网吸取停止打断,就无法规复写入进程了。因此在转发进程中应屏蔽相应的停止。

  4  结束语

  采取上述要领实现的CAN-Ethernet 通讯模块,办理了以太网和现场总线CAN 总线之间互联题目,可以根据应用的需求,举行机动的配置和改造,进步体系的性能和可靠性。实际证明,在局域网环境下模块事变可靠,在以太网负载适中时,只有很小的通讯耽误。它为CAN-Ethernet 的互联提供了低本钱、高性能及机动的办理方案。