DIY编程器网
标题:
一种基于Salvo的通用CAN/LIN网关
[打印本页]
作者:
liyf
时间:
2012-1-16 16:21
标题:
一种基于Salvo的通用CAN/LIN网关
1? 引言CAN(Controller Area Network,即控制器局域网)是上世纪80年代初由德国Bosch公司提出专用于汽车的串行总线。由于其数据传输率高,传输距离远,实时性好,可靠性高等众多优点已在汽车工业、航空工业、工业测控等领域广泛应用。在某些通信性能要求不高的场合为了降低网络控制的成本,1998年由汽车制造商奥迪、宝马等汽车公司、火山通信技术公司以及半导体生产商摩托罗拉(Motorola)公司共同创建了LIN协会,其目的是为汽车网络系统提供一个开放的A类(低速率、低成本)串行总线通信标准。由于LIN总线性价比极高,非常适合用于车灯、车门、座位等对通信要求不高,对成本敏感的部件。目前,高级汽车一般采用分级网络控制,对发动机、传动系统、制动系统等重要,且对通信性能要求高的部件采用CAN总线控制;对车身,如车灯、车门等对通信性能要求不高,而对成本敏感的部件采用LIN总线控制,CAN总线与LIN总线间通过CAN/LIN网关数据转换以实现CAN设备与LIN设备的相互访问。这种分级网络控制模式也适用于工业控制、安全防护等领域。本文讨论一种基于实时操作系统Salvo的通用CAN/LIN网关。2? 网关模型网关是连接两个通信协议和结构不同的网络设施。对于CAN/LIN网关,它的工作就是对信息拆除封装和重新封装,以使它们能被CAN总线和LIN总线上的网络节点读取,即实现CAN总线和LIN总线之间协议数据单元(PDU)的转换。CAN/LIN网关的模型如图1所示。
3? 网关硬件CAN总线和LIN总线协议数据单元的数据量小,系统采用高速8位微处理器――Microchip新型增强FLASH单片机PIC18F4680。PIC18F4680片内集成64KB FLASHROM作为程序存储器、3KB RAM作为数据存储器,能满足处理CAN总线和LIN总线协议数据单元转换所需的程序代码和数据存储的需求;PIC18F4680片内集成1KB EEPROM可用于存放系统状态信息,即使掉电重启也能恢复到掉电前状态。另外,PIC18F4680片内集成支持CAN2.0B的CAN控制模块,CAN数据链路层协议可由CAN控制模块执行,从而减轻MCU处理CAN协议的数据处理压力;PIC18F4680还集成可支持LIN1.3的USART,进一步减轻MCU处理LIN协议的数据处理压力。???? 为增强CAN总线的抗干扰能力,CAN总线驱动器MCP2551与PIC18F4680间采用高速光偶6N137隔离,并且独立供电,PIC18F4680采用LIN总线驱动器MCP201的电源模块供电;MCP2551采用专用DC/DC变换器供电。实时多任务系统对于相同优先级任务采用以时隙为单位的时间片循环方式(round-robin)切换。为提高时隙精度,从而提高切换时间精度,PIC18F4680的定时计数器1(TMR1)外接标准时钟晶振32768Hz。系统时基由TMR1通过标准时钟晶振振荡产生。网关硬件电路如图3所示。
4? 网关软件CAN总线与LIN总线比较相似,协议数据单元比较接近,网关软件数据处理量不大;而且,网关软件本身功能相对单一,一般不需要操作系统支持。但本文讨论的是一个通用网关,针对不同场合系统功能需要适当的裁剪和扩充,有操作系统的支持更便于系统功能的裁剪和扩充,提高系统的可移植性,增加系统通用性。另外,有操作系统的支持系统开发时间大大缩短,而且可靠性也大大提高。4.1? 实时操作系统Salvo系统软件开发采用实时操作系统RTOS会占用部分系统硬件资源,目前大多数RTOS 适用于ARM 或X86 等可配备丰富硬件资源的微处理器系统。实时操作系统Salvo 占用系统硬件资源少,且功能强大,适合硬件资源相对贫乏的单片机,尤其是存储器资源贫乏的PIC 系列单片机。Salvo 占用程序存储器容量取决于用户调用的系统函数,一般典型系统占用1~2K 程序存储器。占用数据存储器容量取决于用户定义的变量、任务和事件的数量,以PIC16 系列单片机为例,每个全局变量占10b,任务占5b,事件占3b,一般典型系统占用50~100b 数据存储器。Salvo 是一个基于优先级任务切换,支持事件驱动的多任务实时操作系统。Salvo 共支持16 个任务优先级,且多个任务可以共用一个优先级,任务按优先级高低切换,对于多个同一优先级的任务,以时间片循环方式切换。Salvo 支持任务和事件的数量不限,取决于RAM 的大小。4.2? 任务分割及功能确定基于RTOS 的软件开发主要工作是任务分割、任务功能确定和任务代码编写。任务分割的基本原则是任务内的内聚度强而任务间的偶合性弱。为减少Salvo在任务切换时占用过多的系统资源,任务分割尽量减少任务数,系统分割成5个任务(参见图4):
CAN_TXD任务:由ENCANTXD信号触发,将经PDU_Conversion任务转换的数据送到CAN模块的发送缓冲寄存器,并启动CAN发送器发送数据。CAN_RXD任务:由ISR_CANRXD中断服务程序发送ENCANRXD事件触发,接收CAN模块接收缓冲器的数据,发送CANTOLIN信号触发PDU_Conversion任务。LIN_RXD任务:由ISR_LINRXD中断服务程序发送ENLINRXD事件触发,接收USART模块发送来的数据。根据LIN协议分析标识场确定报文的内容和长度,分析校验和场确定报文的正确性,发送LINTOCAN信号触发PDU_Conversion任务。LIN?_TXD任务:由ENLINTXD信号触发,将经PDU_Conversion任务转换的数据送到USART模块,并控制USART模块安LIN协议发送数据。PDU_Conversion任务:由LINTOCAN或CANTOLIN信号触发,将服务数据单元SDU转换成CAN协议数据单元或LIN协议数据单元,并通过ENCANTXD信号或ENNLINTXD信号触发CAN_TXD任务或LIN_TXD任务向CAN总线或LIN总线发送数据。4.3? 任务间通信及任务优先级现场总线一般对实时性要求较高,为提高系统的实时性,减少数据在网关的延时,系统采用中断方式接收CAN总线和LIN总线的数据。若CAN总线上有节点发送数据,网关的CAN模块接收器接收数据,存于信息集中缓冲器MAB,同时根据接收屏蔽器信息,比较接收过滤器与接收信息标示区是否相符,若相符将信息集中缓冲器信息装入接收缓冲器(RXB0或RXB1,PIC18F4680的CAN模块有两个接收缓冲器),并通过中断标志寄存器PIR3的RXB0IF或RXB1IF(CAN模块接收缓冲器中断标志位)申请中断,CPU进入ISR_CANRXD中断服务程序,在ISR_CANRXD中发送ENCANRXD事件触发CAN_RXD任务启动。CAN_RXD任务读取接收缓冲器中SDU数据,存入一个CANSDU全局数组,并发送CANTOLIN信号触发PDU_Conversion任务启动。PDU_Conversion任务接收全局数组CANSDU数据,转换成LIN总线的协议数据单元,存于LINPDU全局数组,并发送ENLINTXD信号触发LIN_TXD任务启动。LIN_TXD任务接收全局数组LINPDU数据,控制USART模块按LIN总线协议发送数据。以上是CAN/LIN网关从CAN总线接收数据发送到LIN总线的各任务同步及通信过程,CAN/LIN网关从LIN总线接收数据发送到CAN总线的各任务同步及通信过程基本与其相似。
各任务和中断服务程序优先级的设置对系统完成正常功能影响较大。为防止CAN总线和LIN总线上数据丢失,接收任务(CAN_RXD任务和LIN_RXD任务)优先级高于发送任务优先级(CAN_TXD任务和LIN_TXD任务)。为防止大量数据在网关中来不及转换或发送而丢失,系统开辟了多个接收缓冲器(CANSDU和LINSDU数组)和发送缓冲器(LINPDU和CANPDU数组)。PIC18F4680的CAN模块是独立的硬件电路,可以不依赖于CPU独立工作,且内有3个接收缓冲器(包括MAB)和3个发送缓冲器,而LIN协议的数据处理由CPU的程序控制USART完成,为防止LIN总线数据丢失,LIN总线任务(LIN_RXD任务和LIN_TXD任务)优先级高于CAN总线任务(CAN_RXD任务和CAN_TXD任务)。系统各任务和中断服务程序的优先级参见表1。
5? 结论基于CAN/LIN总线的分级网络控制系统正逐渐从汽车电子领域推广到其它,如:工业测控、安全防护等邻域中应用,在基于CAN/LIN总线的分级网络控制系统中CAN/LIN网关是一个核心部件,它为CAN总线设备和LIN总线设备的互访提供连接桥梁。本文讨论的基于Salvo的通用CAN/LIN网关采用新型集成CAN2.0B模块和可支持LIN1.3的USART模块的PIC18F4680微处理器,软件设计采用商用RTOS――Salvo,大大提高了系统的稳定性和可靠性,增加了系统的可移植性和可扩展性,通过系统功能的裁剪和扩充可应用于各种分级网络控制领域,是一种通用性很强的CAN/LIN网关。本文作者创新点:采用RTOS――Salvo设计一个通用CAN/LIN网关,传统的CAN/LIN网关主要专用于汽车电子通用性不强,采用RTOS设计的网关功能裁剪和扩充方便,可移植性和通用性大大增强。
欢迎光临 DIY编程器网 (http://diybcq.com/)
Powered by Discuz! X3.2