一种汽车车身can-lin网关的设计的制作方法

文档序号:7751799阅读:202来源:国知局
专利名称:一种汽车车身can-lin网关的设计的制作方法
技术领域
本发明属于汽车通信网络系统技术领域,特别涉及CAN总线与LIN总线的网关设计。
背景技术
汽车通信系统是现代汽车的重要标志。如今,为了减少汽车车身线束,现场总线技术已经广泛应用于车身电子控制系统。目前汽车上普遍采用的车载总线有局部互联协议 LIN、控制区域网CAN。CAN-LIN网关是将两个使用不同协议的网络段连接在一起,它的作用就是对两个网段中的使用不同传输协议的数据进行互相的转换。在CAN\LIN网关中,所需要实现的就是将CAN总线上,属于该网关下属LIN局域网设备的消息中的数据,按照LIN协议的形式打包,按CAN消息ID查转换表得到的目的地址发给相应LIN设备;如果LIN设备有消息发向CAN总线上的高速设备,则需经由网关提取数据,打包,之后按LIN消息ID查转换表得到的目的地址发给相应CAN设备。在国内对于汽车网关安全性及容错性的研究属于初步阶段,本发明将实时操作系统引入汽车网络具有创新意义。

发明内容
本发明目的是设计实现一种基于操作系统的CAN-LIN网关。针对汽车车身控制的强实时要求,根据实时操作系统uC/OS-II的中断延时可预知性,提出了基于实时操作系统的CAN/LIN网关的设计,详细地给出了该网关硬件、软件的实现方法。针对网关节点在垂直网络中的特殊地位,其协议转换导致的延时容易造成消息丢弃的现象,本发明构造了消息缓冲队列结构,降低了系统消息丢包率。同时,成功将多关键度任务调度算法引入本系统, 使得系统在过载时,仍能保证高关键任务优先调度的情况下让尽可能多的次关键或非关键任务得到执行。本发明在硬件设计上不仅需要考虑选择带有CAN、LIN收发器,CAN控制器和MCU 的芯片,还需考虑到uC/OS-II对硬件平台的要求,所以选择MC9S12D64。硬件结构如图1。本发明的软件构架有三部分组成,总线驱动层,操作系统层和应用层。驱动层由基本的API构成,在实现芯片功能的基础上,进一步讨论了两类网络速率不匹配问题的解决机制-接收缓冲机制。并采用了基于时间的先进先出原则进行排队,有效地降低了速度差异引起的丢包率,同时,也保证了消息报文处理时先来先服务的时序性。操作系统层采用当前流行的实时操作系统uC/OS-I I。在将uC/OS-I I移植到 MC9S12单片机的过程中,除了要做必要的底层修改之外,本发明解决了瞬时过载情况下的任务调度问题,尤其是解决了不能在保证高关键任务优先调度的情况下让尽可能多的次关键或非关键任务得到执行的问题。为解决这一问题引入了任务关键度这一概念,并定量地描述了任务错过时限的关键度。将任务集划分为三种状态正常状态、紧急状态、失效状态。 从而明确地提出任务调度器设计目标让多级关键度任务尽可能地处在正常状态,偶尔处于紧急状态,但绝对不能处于失效状态。
应用层主要负责收发CAN/LIN消息,然后进行消息的协处理。前者首先检查消息 ID是否为该节点应收消息,然后检验消息内容的正确性,最后将消息内容(消息标识和数据)送入协议缓冲中。后者查消息转换表,判断该消息是否需要协议转换(部分消息是发送给网关节点的,不需要进行消息转发),如果不需要转换,直接调用消息处理函数;否则, 调用消息转换函数。本发明的积极意义是将实时操作系统引入汽车网关中,适用于汽车车身控制系统等对安全关键度要求较高的实时环境。该系统将CAN、LIN网络有机结合起来,完成了一个完整透明控制网络的构建,降低了系统消息丢包率,并且保证高关键任务优先调度的情况下让尽可能多的次关键或非关键任务得到执行。


图1CAN/LIN网关硬件结构框2CAN/LIN网关消息转换系统结构图
具体实施方案本发明在硬件上选用MC9S12D64芯片。由于CAN/LIN网关具有CAN节点和LIN主节点的双重身份,它的传输是基于两个基本假设的1.任何CAN节点都可以发送一串预先准备好的信息流,在发送相邻的两条信息之间不需要释放总线。在发送前一个消息帧后进行仲裁,只有失败时才会释放总线。2.任何CAN节点的内部消息都先进行整理,如果有多条信息等待发送,那么具有最高优先级的信息将先被发送出去。以上功能在只有一个发送缓冲时是不可实现的。要满足两个基本假设中的第1条,就必须至少有3个发送缓冲。而对于第2条, 要求所选用的CAN控制器具有对优先级进行整理和区分的功能。对于本系统,选择的 MC9S12D64内部集成的CAN控制器,具有3个发送缓冲结构,并具有对优先级进行整理和区分的功能,满足了基于两个基本假设提出的要求。本发明在软件设计的驱动层API函数如图2。1. Sys_Init()CAN发送控制器M0NCAN08的配置,包括通信波特率、采样率、发冲区数量的配置, 消息ID接收滤波器、标识符屏蔽寄存器的初始化LIN总线的初始化,与CAN总线相似。2. CAN_Send ()由于M0NCAN08具有三个发送缓冲,首先要查询发送缓冲当前状态,可用缓冲,按发送优先级顺序,选择一个并将数据(消息ID、消息数消息长度)装入缓冲区,之后置发送标志位,启动发送。3. CAN_Receive()请求CAN消息接收信号量(该信号量在CAN接收中断中释放),如果缓冲区中有待收消息,接收任务将调用该函数,将消息收入协议缓冲(protocal Buffer)中;如果未有新到消息,随接收任务挂起。4. LIN_MsgConvert ()消息转换函数,将CAN消息转化为LIN消息。首先查询消息转换表,收到的CAN消息是否应执行转换,若需要转换,则将消息数据抽取,查询转换表,将消息ID转换为LIN消息ID,之后消息打包,发送到LIN总线上;如不需转换,交由网关处理。5. CAN_MsgConvert ()消息转换函数,将LIN消息转化为CAN消息。与LIN_MsgC0nVert ()类CAN_ ProtocalBufLoad()将消息数据送入协议缓冲中。等待系统处理(发送/接收)。6. CAN_ISR_Error ()故障检测函数。用于检测总线物理层以及数据链路层的故障状态,并进应处理。7. CAN_ISR_Receive()CAN消息接收中断。释放消息接收信号量,用于唤醒接收处理任务。本发明为了解决CAN总线与LIN总线速率不匹配的问题,并以及系统RAM资源的折中考虑,设置4个CAN消息缓冲。Struct {Unsigned char can_rcvidbuf[4];Unsigned char can_rcvdatabuf[8];Unsigned char ept ;Unsigned char old ;}can_rcvbuf [4];其中can_rcvidbuf[4]用于接收 CAN 消息标识。can_rcvdatabuf[8]用于接收 CAN 消息数据。ept 标记量,标记所在接受缓冲是否为空。若空(印t = 0),可用于存放新到达的消息;否则(印t = 1),等待消息处理。old 标记量,记录消息的年龄。与印t标记量配合使用。如果消息未被处理(印t= 1),在每个接受中断中进行增1运算055时不再增1)。 作用为消息处理提供选择依据(率先处理年龄最大的消息);如果消息被取走(印t = 0), 不作动作,直到所在消息缓冲再次被存入新到达消息。本发明利用MC9S12自带的CAN模块实现数据链路层错误检测。数据链路层检测是通过MCU中集成的CAN控制器MSCAN_S12进行的。错误检测种类1.溢出接收缓冲区消息溢出时触发。2.接收错误接收错误计数器达到96时报警。3.发送错误发送错误计数器达到96时报警。4.接收被动错误接收错误计数器达到127时,MSCAN08进入接收被动状态。5.发送被动错误发送错误计数器达到127时,MSCAN08进入发送被动状态。6.总线关闭发送错误计数器达到255时,总线关闭其中任意一种故障发生,都会触发CAN数据链路层错误中断(中断号19)。在中断服务程序中,将错误类型记录下来,在数据链路层故障处理任务(Task_CAN_ErrDealD)中进行相应处理。本发明操作系统层在保留uC/OS-II的功能代码同时,按照车内网络的强实时性要求,采用基于多级关键度的调度机制,改写了任务调度函数。以下是各任务的具体描述
1. CAN 消息接收任务 TASK_CAN_Rcv ()
[4,5]消息接收任务由接收中断唤醒,如果超过时限,意味着网关节点丢包。但是如果连续接收,N+1个消息,会造成缓冲队列溢出,根据上文采用的动态优先级策略,此任务在连续N+1次触发时,任意N次在时限内完成,即可。(本系统中,N = 4)2. CAN 消息转换任务 TASK_CAN_MsgConvert ()[1,4]由于LIN总线的可靠性较低,应用中通常连发3条同样的消息帧,因此,此任务关键度看似为[1,3],但这一因素并不影响到任务的关键度。错过时限并不意味着不成功。对于转发CAN消息来说,没有定义其时限。所以,还是定为[1,4],原因该任务应在4 个消息到来之间至少执行一次。收到4个CAN消息,仍没有执行一次LIN消息转换,那么消息队列即将溢出。3. LIN 消息接收任务 TASK_LIN_Rcv ()[1,1]由于LIN总线协议并没有提供出错重发机制,因此,LIN消息的接受任务的关键度一定要置为[1,1]。4. LIN 消息转换任务 TASK_LIN_MsgConvert ()[1,3]原因同任务2LIN连发三条。如果收到3个LIN消息,仍没有执行一次CAN 消息转换,那么该LIN消息失效。5. CAN 物理层故障处理任务(Task_CAN_ErrDeal)[1,1]故障一旦出现,说明CAN总线通信已经不可靠,应马上响应,做出相应处理.
6. CAN数据链路层故障处理任务(Task_CAN_ErrDealD)[1,2]故障一旦出现,说明CAN总线通信已经不可靠,应及时响应,做出相应处理。应用层主要负责收发CAN/LIN消息,然后进行消息的协处理。前者首先检查消息 ID是否为该节点应收消息,然后检验消息内容的正确性,最后将消息内容(消息标识和数据)送入协议缓冲中。后者查消息转换表,判断该消息是否需要协议转换(部分消息是发送给网关节点的,不需要进行消息转发),如果不需要转换,直接调用消息处理函数;否则, 调用消息转换函数。还要保证任务之间的通信。
权利要求
1.一种汽车车身CAN-LIN网关的设计,其特征是采用UCOS-II操作系统,构造了消息缓冲队列结构,引入多关键度任务调度算法,完成对网关的软硬件设计。
2.根据权利要求1所述的系统,其特征是本发明在硬件设计上选择带有CAN控制器的 MC9S12D64 芯片。
3.根据权利要求1所述的系统,其特征是本发明的软件构架有三部分组成,总线驱动层,操作系统层和应用层。
4.根据权利要求1所述的系统,其特征是驱动层API有SysJnit()、CAN_Send()、 CAN_Receive ()、LIN_MsgConvert ()、CAN_MsgConvert ()、CAN_ISR_Error ()、CAN_ISR_ Receive ()。
5.根据权利要求1所述的系统,其特征是本发明为了解决CAN总线与LIN总线速率不匹配的问题,并以及系统RAM资源的折中考虑,设置4个CAN消息缓冲。
6.采用基于多级关键度的调度机制,改写了任务调度函数。各任务的描述为CAN消息接收任务TASK_CAN_Rcv ()、CAN消息转换任务TASK_CAN_MsgConvert ()、LIN消息接收任务TASK_LIN_Rcv ()、LIN消息转换任务TASK_LIN_MsgConvert ()、CAN物理层故障处理任务 (Task_CAN_ErrDeal)、CAN 数据链路层故障处理任务(Task_CAN_ErrDealD)。
全文摘要
一种汽车车身CAN-LIN网关的设计,本发明属于汽车通信系统中的车载总线网关技术,其方式是基于实时操作系统uC/OS-II,运用虚拟CAN节点的设计思想,实现了混合网络一致、透明的数据通讯,完成了对CAN-LIN网关的软硬件设计。针对网关节点在垂直网络中的特殊地位,其协议转换导致的延时容易造成消息丢弃的现象,本发明构造了消息缓冲队列结构,降低了系统消息丢包率。同时,成功将多关键度任务调度算法引入本系统,使得系统在过载时,仍能保证高关键任务优先调度的情况下让尽可能多的次关键或非关键任务得到执行。本发明积极地效果是将实时操作系统引入汽车网关中,适用于汽车车身控制系统等对安全关键度要求较高的实时环境。
文档编号H04L12/40GK102291334SQ20101020384
公开日2011年12月21日 申请日期2010年6月21日 优先权日2010年6月21日
发明者姜义成, 姜博, 范振 申请人:哈尔滨工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1