车载双路CAN总线冗余网关的设计

2012-08-21 07:22卢玉传杜志岐樊江滨侯学轶
车辆与动力技术 2012年1期
关键词:中断网关总线

卢玉传,杜志岐,樊江滨,侯学轶

(中国北方车辆研究所,北京100072)

随着电子信息技术和网络技术的发展,现代汽车的功能越来越多,系统也变得越来越复杂,这些优越的功能是通过各种各样的电子设备 (各种电子控制盒、测试诊断、仪表显示等设备)来实现的,许多电子设备之间通常要通信以便进行数据的共享和命令的传达与接收等,当车上的电子设备变得越来越多的时候,布线就变得很繁琐复杂,可靠性大大降低,成本大幅上升.为了解决汽车的上述问题,实现电子设备间快速的信息交换,增强车身电子系统的可靠性和安全性,车载总线网络的概念被提了出来.

在现有的车载网关中,大部分都是单处理器的网关,而比较少见的双处理器网关[1]也是基于单路CAN总线的,为了进一步提高车载网关系统的实时性、稳定性和可靠性,设计中采用了双处理器双路CAN总线冗余设计方案.

1 硬件设计

1.1 系统结构与原理框图

汽车上各种电子设备对网络信息传输速率要求不一,发动机控制器、自动变速器控制器、ABS控制器、安全气囊控制器等对实时性的要求很强,而前后车灯的开关、车门开闭、车窗升降、座位调节等简单事件对实时性的要求要宽松得多.汽车动力系统中采用的高速CAN总线,其信息传输速度设置为500Kbps,其主要连接对象是:发动机、自动变速器、ABS/ASR、巡航系统、电动转向系统,等等[1].动力系统CAN总线的控制对象都是与汽车行驶控制直接相关的系统,对信号的传输要求有很高的实时性,它们之间存在着很多的信息交互.车身系统中采用的低速CAN总线,其信息传输速率为250Kpbs,主要连接对象是:前后车灯控制开关、电动车窗升降开关、中央门锁与防盗控制开关、电动座椅控制开关、电动后视镜控制开关、温度 (空调)控制开关、组合开关及驾驶员操纵信号采集系统、仪表显示器,等等[1].车身系统CAN总线的控制对象主要是低速电机、电磁阀和开关器件,它们对信息传输的实时性要求不高,但数量较多,为了保证动力系统的实时性,应将这些实时性要求低的电控单元与汽车动力系统分开.

为了保证该网关系统的可靠性,防止因为现场环境恶劣致使插头松动、传输介质损坏或CAN总线驱动器损坏而遭致CAN通信的破坏,采用了冗余通信机制.系统在每个CAN子网路都使用2套总线 (CAN 1、CAN 2),每套包含独立的总线电缆、总线驱动器和总线控制器,可以实现物理介质、物理层、数据链路层全面冗余[2].

系统中每个子网的2套总线采用双CAN冗余热备份方式运行:在系统正常上电工作以后,一个CAN控制器作为系统默认的CAN(称之为主CAN 1);另一个为系统的备用CAN(称之为从CAN 2),作为主CAN1的冗余.这样,每一瞬时系统中有且仅有一路CAN通道在工作,另一路处于监听状态 (正常工作时)或故障状态 (发生故障时)[2].当系统正常工作时,主CAN 1处于工作状态.当主CAN 1发生故障时,切换至从CAN 2,使之处于工作状态.如上电检测到主CAN 1故障,则从CAN2自动进入工作状态.这样在一套总线发生故障时,另一套总线自动开始工作,保证整个系统的通信正常进行,提高了系统的可靠性.

系统的结构与原理框图如图1所示.

图1 系统结构与原理框图

1.2 硬件实现

基于对系统结构和功能的分析,按照优先选用片上系统SOC的设计理念,要求内部至少集成了4个CAN控制器的MCU来作为系统的主控芯片,因此,选用Freescale公司的16位112引脚LQFP封装的MC9S12XDP512单片机.该单片机内部集成了5个同时兼容CAN2.0A/B协议的CAN控制模块,同时还将协处理器XGATE模块集成到S12XD系列中,目的是减轻主处理器S12X CPU的工作负担,提高系统的数据吞吐能力,从而支持双处理器的嵌入式开发.XGATE基于RISC内核,能够独立于主中央处理器单元进行编程,可以执行独立的算法完成运算.XGATE能够辅助支持内存RAM与外接设备之间的高速数据传送,同时完成指定的数据处理,例如通信协议的转换,等等.这使得XGATE可以作为DMA控制器[3].此外,MC9S12XDP512单片机内部还有32K的RAM、4K的EEPROM、6个异步串行通信接口SCI、2个数模转换器 (8通道10位数模转换器一个,16通道10位数模转换器一个)、3个串行外设接口SPI、1个IC/OC加强定时器、1个8通道脉冲带宽调制器、1个周期中断定时器、2个内置总线时钟[4].如此丰富的片上资源,方便了硬件的设计,也为系统工作的稳定可靠提供了硬件保障.

图2 CAN网关接口电路原理图

硬件设计中的CAN网关的电路原理图如图2所示.MC9S12XDP512单片机负责对CAN控制器的初始化,并控制数据的接受、数据转发、地址管理、消息拆装与重组、发送,等等.片内的CAN控制器0和CAN控制器1分别连接动力CAN网络的CAN1和CAN2,CAN控制器2和CAN控制器3分别连接车身CAN网络的CAN1和CAN2,这样实现了CAN网关的双路冗余设计.CAN收发器选用Philips公司的TJA1050.TJA1050是CAN协议控制器和物理总线之间的接口,是一种标准的高速CAN收发器.TJA1050可以为总线提供差动发送性能,为CAN控制器提供差动接收性能.TJA1050是PCA82C250和PCA82C251高速CAN收发器的后继产品.在电路设计中,将TJA1050的第8引脚S接地,使其工作在高速模式,第3引脚VCC接+5V直流电源,为了滤掉电源中的电压纹波,得到稳定的电压,在此引脚并联0.1 μF滤波电容.在TJA1050中涉及到一个超时定时器,用以对TXD端的低电位 (此时CAN总线上为显性位)进行监视.该功能可以避免由于系统硬件或软件故障而造成TXD端长时间为低电位时总线上所有其他节点也将无法进行通信的情况出现.这也是TJA1050与82C250相比较改进较大的地方之一.TXD端信号的下降沿可启动该定时器.当TXD端低电位持续的时间超过了定时器的内部定时时间时,将关闭发送器,使CAN总线回到隐性电位状态.而在TXD端信号的上升沿定时器将被复位,使TJA1050恢复正常工作[5].为了消除总线阻抗,提高抗干扰能力,总线两端分别配置120 Ω的匹配电阻.为了提高系统在复杂电磁环境下的抗干扰能力,在CAN控制器与收发器之间添加2个高速光耦6N137,TJA1050的TXD引脚与其中一个6N137的OUT引脚相连,该光耦的IN引脚与MC9S12XDP512的 CAN控制器 TXCANx相连接(x=0,1,2,3),TJA1050的RXD与另一个光耦的IN引脚相连,其OUT引脚连接RXCANx,在2个光耦的OUT与Vdd引脚间连接390Ω的匹配电阻.

2 软件设计

2.1 双处理器技术的网关软件实现

在程序开发中主处理器S12XCPU和协处理器XGATE都要使用内存RAM,这就涉及到了共享和互斥的问题,所以在使用前,必须先对RAM进行分配和保护.

MC9S12XDP512的主处理器和协处理器都可以访问片内32K的RAM.通过设置边界寄存器的值,可以将其划分为 XGATE独享 RAM、S12X独享RAM、XGATE与 S12X共享 RAM和 S12X独享RAM 4 部分[3],如图3 所示.

图3 RAM分配区

其中RAMXGU为XGATE RAM边界高地址寄存器,RAMSHL为S12X与XGATE共享RAM低地址寄存器,RAMSHU为S12X与XGATE共享RAM高地址寄存器.软件设计中的数据结构按照各自的使用特性,分配到不同的RAM块中.值得注意的是,2个处理器共享一部分RAM,在访问时会出现临界区问题,此时要借助系统内集成的8个硬件信号量进行互斥管理.

在芯片RAM中开辟2个缓冲区,分别作为接收缓冲区和发送缓冲区.由于协处理器和主处理器都需要使用这2个缓冲区,所以设在XGATE与S12X共享的区域.接收缓冲区用于存放来自2个子网的未处理的数据,发送缓冲区用于存放处理后等待发送的数据[1].其中,接收缓冲区又进一步分为高速缓冲区和低速缓冲区,分别用来存储来自动力CAN网络和车身CAN网络的数据.系统中数据的流向如图4所示.数据从各个子网接收后,经过过滤,按照源网络的信息速率的高低存放到接收缓冲区的高速区或低速区.经过协议转换、连接管理等处理后的数据存放在发送缓冲区.数据发送过程按照CAN总线规范重组数据帧格式,将其送到与目的子网连接的CAN节点缓冲区以等待发送.

图4 系统内数据流向

为了缓解系统工作时的数据阻塞和延迟问题,采用双处理器工作方式,启用MC9S12XDP512芯片中的协处理器XGATE模块,在主处理器S12X CPU对系统进行初始化 (包括对协处理器的初始化)后,主处理器与协处理器并行协调工作,实现车载网关的功能.其中数据的接收和发送由协处理器XGATE完成.当与子网连接的CAN节点接收到数据后触发接收中断,由XGATE接管,并且进行数据过滤等工作.待初步处理结束后,数据按照源网络的波特率存放到高速或低速接收缓冲区.当主处理器完成数据处理以后,主处理器通过软中断调度XGATE进行数据发送的工作.这样就可以使S12X CPU专心进行数据处理工作了,包括协议转换,连接管理,等等,此过程结束后触发XGATE软中断.综上所述,2个处理器并行协调工作,实现网关功能.2个处理器的工作方式是不同的,S12X CPU的工作是主动的,一直进行的;而XGATE的工作是被动的,是由中断触发的[1].

图5 主处理器工作流程图

主处理器工作流程如图5所示,可以分为2个部分[1]:1)初始化.CAN控制器MSCAN的设置,是将CAN控制器设置为接收数据后触发中断的方式[4];协处理器XGATE的相关寄存器设置,是设定XGATE的中断基地址寄存器XGVBR,这是协处理器能够正确响应中断的基础.同时,通过对应中断的中断请求配置数据寄存器的RQST位置1和PRIOLVL[2∶0]的选择,分别将此中断的处理权交给协处理器,并且设置合适的优先级,最后使协处理器开始工作.2)数据处理.首先分配时间片循环查询高速和低速接收缓冲区,其次取出数据后提取标识符域,作为关键字查路由协议转换表,最后分析可知该数据帧需要简单的数据转发,还是建立连接,抑或是地址声明,等等.按照要求进行处理后,将其和目的子网编号一起存放在发送缓冲区,然后向协处理器触发相应软中断,通知协处理器来发送数据.需要说明的是,高速接收缓冲区需要比低速接收缓冲区分配更多的时间,以保证实时性.

通过协处理器XGATE以响应中断的方式,完成2个CAN子网的数据的接收与发送工作.注意:任意时刻系统中连接动力CAN网络的MSCAN0_12和MSCAN1_12最多只有1个在工作 (系统正常通信时,只有1个工作.当某一CAN子网的两路CAN总线同时故障时,2个CAN控制器都脱离CAN总线,系统通信中断,所以应该及时处理每次故障,避免此种情况的发生),同样连接车身CAN网络的MSCAN2_12和MSCAN3_12也是最多只有1个在工作,它们之间的切换,是通过CAN总线错误报警中断程序来实现的.

开始时需要编写各中断的中断处理程序,并将该程序起始地址和参数存放到协处理器中断向量表的相应位置.CANx(x=0,1,2,3)中断处理线程interrupt void CANx_Thread(DATA *date)的函数功能为从CAN节点接收缓冲区提取数据,对比过滤表 (在数据接收过程中,协处理器XGATE使用数据包过滤表去除各个子网的内部通信,从而降低网络流量,防止系统阻塞).若不是源网的内部通信,按照它所属源网络的波特率存放到高速或低速数据接收缓冲区,同时释放CAN节点接收缓冲区.将该线程地址和参数 (接收缓冲区地址)存放到协处理器XGATE中断向量表的相应域.软中断处理线程 interrupt void Software_Triggerx(DATA *date)完成CANx的发送.提取发送缓冲区内的数据,按照CAN总线规范重新组织数据帧格式,按照目的子网号发送到相应CAN节点的发送缓冲区等待发送.将线程地址和参数 (发送缓冲区地址)存放到协处理器XGATE中断向量表的相应位置[1].

编写完这些子程序以后,让协处理器进入等待状态,当发生接收中断或是主处理器通过软中断通知协处理器发送数据时,协处理器进入工作状态完成数据接收和发送的工作.协处理器工作流程如图6所示.

图6 协处理器工作流程图

2.2 双路CAN冗余机制的软件实现

通过双路总线冗余机制来提高CAN总线通信的可靠性,关键在于故障检测及CAN总线的自动切换.判断总线故障时,利用了CAN总线控制器的故障界定状态机制.图7给出了CAN总线错误处理流程图.当有错误报警中断时,如果总线关闭,则CAN控制器自动与发生故障的CAN总线脱离,然后由通道切换程序启动另一路CAN总线来完成原来的通信任务,同时,要对故障的总线及时处理,以备下次切换使用.数据帧要重新接收或发送,以保证数据帧不丢失.如果总线没有关闭,仅仅是处于错误状态时,通过软件使CAN控制器与发生故障的CAN总线脱离,然后将MSCAN复位,重新初始化MSCAN模块,使其进入正常工作模式,继续完成原来的任务,为保证数据帧不丢失,数据帧还要重新接收或发送[2].总线的故障检测和自动切换由协处理器XGATE来完成.为了保证通信的绝对可靠,当故障的总线关闭以后,要及时对故障处理,以备当目前切换到的新总线出现故障时,也能够重新切换到原来的总线 (已经修复).

图7 总线错误处理流程图

考虑到当2条总线同时故障时,系统将频繁切换CAN通道,为了避免此种情况的发生,在软件设计时设置了一个记录切换次数的变量Switch_Numbers,在设定的时间内,若Switch_Numbers>6,就不再进行通道的软切换,并发送报警信息[2].

3 结束语

通过对当前车载网关的调研,发现当前车载网关绝大多数采用了单处理器技术,并且是单总线结构的,即使是较为少见的基于双处理器技术的车载网关在设计中也是采用单总线结构的,为了提高系统的可靠性、实时性、稳定性,在此设计中基于MC9S12XDP512单片机采用了双处理器双总线方案.

采用了双总线冗余通信机制,即两路CAN总线都连接到系统上,其中一路作为主CAN,另一路作为备用的从CAN,系统上电以后,主CAN自动进入工作状态,从CAN处于监听状态 (正常工作时)或故障状态 (故障时).当主CAN发生故障时,自动切换到从CAN,从而形成了双CAN冗余热备份运行方式,从而可以提高系统的通信可靠性.

设计中采用了嵌入式开发的双处理器技术,使协处理器XGATE全面负责各种中断响应,如数据接收中断、数据发送中断、数据溢出中断和错误报警中断,等等,而主处理器S12X CPU专注与数据的处理,这样可以大大地提高系统的实时性和稳定性.

[1] 李光鑫.基于双处理器的 CAN网关设计与实现[D].吉林大学硕士学位论文,2010.4.

[2] 冯 源,向桂林,李 军.基于C8051的冗余CAN总线智能节点设计 [J].航天计算技术,2008,38(5):107-111.

[3] 邵贝贝,宫 辉,等著.嵌入式系统中的双核技术[M].北京:北京航空航天大学出版社,2008:110-143.

[4] 王宜怀,刘晓升.嵌入式系统——使用HCS12微控制器的设计与应用[M].北京:北京航空航天大学出版社,2008.3.

[5] Philips Semiconductors.TJA1050High speed CAN transceiver datasheet[CP/DK].Philips Electronics N.V.1999.

猜你喜欢
中断网关总线
信号系统网关设备的优化
基于PCI Express总线的xHC与FPGA的直接通信
机载飞控1553B总线转以太网总线设计
基于FPGA的中断控制器设计*
跟踪导练(二)(5)
千里移防,卫勤保障不中断
LTE Small Cell网关及虚拟网关技术研究
CAN总线并发通信时下位机应用软件设计
应对气候变化需要打通“网关”
多通道ARINC429总线检查仪