6路独立CAN总线的实现方案

 2018-11-16     作者:黄志超    [nemail]    
[lablebox]

  CAN(Controller Area Network)即控制器局域网,由于具有高性能、高可靠性以及简单的网络结构,在工业系统中越来越受到人们的重视,并迅速成为了目前国际上应用最广泛的现场总线之一。英创公司推出了各种以支持通讯接口为特色的工控主板,ESMARC系列的主板都能够支持2路CAN总线,为了满足客户现场对多路CAN总线的需求,英创公司利用主板上的ISA总线,设计出扩展4路CAN总线的扩展底板ETA704,再配合ESMARC系列主板上板载的2路CAN总线,就能够实现6路CAN总线的方案,支持ISA总线的主板型号如下:


主板型号板载CAN总线ISA总线
ESM33542路支持
ESM68022路支持
ESM70002路支持


硬件组成


  ETA704是通过四片SJA1000和一片逻辑控制器扩展出四路CAN总线。SJA1000是一款独立的控制器,主要用于汽车和一般工业环境中的控制器局域网络(CAN)芯片。它是PHILIPS半导体PCA82C200 CAN控制器(BasicCAN)的替代产品,而且它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特性的CAN 2.0B协议。 通过主板上的ISA总线接口,就能够把ETA704和主板连接起来,为了方便客户评估,ETA704设计有专用的评估底板,可通过带线与ESMARC底板上的精简ISA总线接口连接,同时ETA704的硬件设计,可以让客户方便的将ETA704作为一个可插拔的模块嵌入在整体产品中,这样可以获得最佳的数据传输性能。对于实现CAN总线通讯所引出的接口电路,用户可以参考相应开发评估底板的电路原理图和PCB图。下表是ETA704和ESMARC评估底板ISA总线连接的接口定义:


ISA总线接口信号

ISAISA总线接口信号

PIN#

PIN#

RESET#,复位,低电平有效

12

ISA_ADV#,地址锁存,低电平有效

ISA_SD0,地址数据总线

34

ISA_SD4,地址数据总线

ISA_SD1,地址数据总线

56

ISA_SD5,地址数据总线

ISA_SD2,地址数据总线

78

ISA_SD6,地址数据总线

ISA_SD3,地址数据总线

910

ISA_SD7,地址数据总线

MSL#,模块选择

1112

ISA_WE#,数据写,低电平有效

GPIO9,中断IRQ4,上升沿有效

1314

ISA_RD#,数据读,低电平有效

GPIO8,中断IRQ3,上升沿有效

1516

ISA_CS#,总线片选,低电平有效

GPIO25,中断IRQ2,上升沿有效

1718

+5V,电源输入

GPIO24,中断IRQ1,上升沿有效

1920

GND,公共地


  ETA704的专用评估底板将四路CAN总线接口全部引出,并且设计有带隔离的驱动电路,可直接与设备相连进行测试。下面展示了ETA704专用评估底板将CAN总线通讯接口引出和CAN总线驱动电路的原理图:


6路CAN总线实现方案.png


6路CAN总线实现方案.png

CAN接口和驱动电路


  由上图可以看出,从ETA704引出的CAN总线收发管脚,通过评估底板上的磁耦器件ADuM1201隔离后,和CAN驱动芯片TJA1050连接,就组成了一个典型的CAN总线通讯电路,同时还能够通过跳线选择是否介入匹配电阻。客户可以直接参考ETA704评估底板的方法进行设计。带隔离CAN总线通讯模块的CAN收发器端的所有信号和电源与其它部分完全隔离,可承受至少1Kv(有效值)的电压冲击,有效的保护了电路的安全。


软件开发


  ETA704的驱动程序已经以模块的形式放在文件系统中,只是没有加载,因此在需要使用时,可通过加载文件系统中的ko文件eta704_of_platform.ko来激活ETA704,通过modprobe命令就可以方便的加载驱动了:


6路CAN总线实现方案.png

加载驱动


  ESMARC系列主板自带有2路CAN总线,在系统中为can0、can1节点,所以加载完驱动程序后,系统就会识别出can2-can5,如下图:


6路CAN总线实现方案.png

CAN总线节点


  ETA704的驱动程序接口和标准socketcan完全一致,因此用户使用扩展CAN总线的方式和标准CAN接口保持不变,即使用标准的socketcan编程。在此基础上,客户可利用英创公司提供的基本CAN通讯应用程序源代码,快速评估四CAN扩展单元的基本性能是否满足其具体的应用需求。只是需要注意CAN设备名称的序号,对于扩展网络ETA704所接出的四路CAN接口分别对应can2-can5。对于socketcan接口的详细说明可以参考专门的资料和英创公司的介绍:《Linux Socket CAN驱动简介》

[lablebox]