微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > OSEK COM通信规范的通信系统研究

OSEK COM通信规范的通信系统研究

时间:06-03 来源:互联网 点击:
OSEK/VDX(简称OSEK)规范是欧洲汽车行业为满足各种软件间的兼容性和协作性而定义的一组带有通用服务接口的开放式软件规范。它主要由操作系统规范、通信规范[1]、网络管理规范[2]和实现语言规范[3]4个部分组成。作为OSEK/VDX规范的一部分,OSEK COM[1]为汽车电控单元应用软件提供了一个统一的通信环境,它定义了独立于所用通信协议之外的应用软件通信接口,规定了内部通信(ECU内部)和外部通信(ECU之间)时的行为方式。OSEK COM隐藏了底层协议和硬件细节,从而增强了应用软件模块的可移植性和可重用性。此外OSEK COM 实现只需要很少的资源就可以在多个硬件平台上运行,不同级别的功能要求都可以满足,体现了可裁减性。

目前随着集成电路和单片机在汽车上的广泛应用,越来越多的ECU被应用到汽车控制领域,如汽车刹车的防抱死系统、动力设备的安全控制等。ECU内部和ECU之间的通信已经成为汽车电子控制系统开发的重要环节,在汽车电子和其他嵌入式领域均有明朗的应用前景。因此对OSEK COM规范的研究与实现具有重要意义。

1  OSEK COM的通信机制

1.1  OSEK COM的通信模型[1,4]

OSEK COM的通信模型分为3个层次:上层为应用层;中间层为交互层;网络层、数据链路层、物理层统称为“下层”。如图1所示, 主要部分是交互层(IL),  该层全权处理内部通信,并通过调用下层服务协议处理外部通信。

本文基于OSEK COM规范3.03,是目前该规范的最新版本。在图1中,OSEK COM覆盖了全部的交互层和部分的网络层和数据链路层。这是因为在规范中交互层的使用被详细地规定,而网络层和数据链路层没有详细的说明,仅仅定义了网络层和数据链路层支持交互层的所有特性的最低要求。


图1  OSEK COM及OSEK体系中位置模型

1.2  OSEK COM的通信过程

OSEK COM是基于消息对象的通信,消息及其属性通过OSEK实现语言(OSEK Implementation Language, OIL)静态配置。在内部通信过程中(即发送内部消息时),应用层调用交互层提供的发送消息API,将发送方的数据传给交互层的消息对象,消息对象直接被复制到接收消息对象;然后接收方调用接收消息API,从接收消息对象中读取消息数据。在外部通信过程中(即发送外部消息时),发送方的一个或多个消息对象的数据按比特位对齐被映射到一个发送IPDU(交互层协议数据单元)的数据区上,交互层调用底层协议将数据发送出去;接收方的接收与发送方的过程相反,在一个接收指示请求后,底层PDU(协议数据单元)的消息根据底层协议收取数据到接收IPDU数据区,然后从IPDU数据区取出各接收消息对象的数据,完成接收过程。

2  通信系统的整体设计


图2  通信系统的结构

基于OSEK COM规范的通信系统主要由4个模块组成(如图2所示):

  ① 由OSEK COM规范定义的各API函数的实现。为应用程序提供用于消息传输服务的COM API。
  ② 交互层和底层之间的调用接口函数的实现。消息从交互层传输给底层,以及消息从底层接收到交互层的接口函数的实现。
  ③ 底层通信协议的实现。本通信系统选择在汽车电子领域应用最广泛的控制器局域网(Controller Area Network,CAN)总线作为底层的通信协议。
  ④ 系统的配置文件[3]。采用Freescale公司提供的完全支持OSEK OIL标准的OSEKBuilder工具生成配置文件,在根据系统实现的需求来配置消息的属性等。

2.1  通信系统核心模块的实现

通信系统主要是实现发送消息和接收消息功能,下面主要介绍ECU之间的通信,即外部消息的接收和发送过程的实现。

2.1.1  外部消息发送过程的实现[56]

发送外部消息时,在交互层消息对象依次通过过滤算法、字节顺序转化,最后根据其传输模式封装到相应的 IPDU。COM规范定义了3种不同的消息传输模式: 直接传输模式、周期传输模式和混合传输模式。下面以周期传输模式为例说明消息的传输过程。

当消息具有周期传输模式时,将其封装到具有周期传输模式特性的IPDU里。在周期传输模式下,每次调用API函数SendMessage()、 SendDynamicMessage()的服务更新传输的消息对象,交互层每隔周期传输模式时间间隔(I_TMP_TPD)执行一次周期传输请求,传输一个IPDU到底层,当有传输请求时才执行IPDU到底层的消息传输。周期传输模式忽略包含在IPDU里面的所有消息的传输特性。当消息已经发送到底层后,如果在规定的时间间隔内,底层没有返回传输确认,那么立刻调用通知机制通知应用层,消息的周期传输失败。周期传输模式传输机制如图3所示。


图3  周期传输模式传输机制

在周期传输模式的具体实现过程中,首先判断该消息是否具有周期传输模式的属性,如果具有,则将周期传输模式的标志位置1;进入中断后,判断此时系统时钟节拍和上次记录的系统时钟节拍的时间间隔是否大于或等于I_TMP_TPD,若大于时间间隔,则获得传输请求,调用底层接口函数立刻传输消息到底层,同时记录此时的系统时钟节拍。若消息传输成功,底层返回传输确认;若在规定时间内没有传输确认,则调用通知机制,表明消息传输失败。至此完成了消息从交互层发送到底层的传输过程。周期传输的实现流程如图4所示。直接传输模式和混合传输模式消息的传输实现过程也类似。


图4  周期传输实现流程

2.1.2  外部消息接收过程的实现[5]

在消息的接收过程中,首先底层接口函数将底层PDU里面的消息取出放入接收IPDU数据区,从底层向 OSEK COM传递成功或失败的状态信息。如果接收指示服务没有产生错误,表明消息已经成功接收到IPDU。然后从IPDU数据区分别取出接收消息对象的数据,在经过字节顺序转化和过滤算法后,放入消息接收对象。消息接收对象分为队列消息和非队列消息,接收到的动态长度的消息都放入非队列消息,接收到的静态长度消息可以放入队列或非队列消息。队列消息将收到的消息数据组合成一个队列,接收时向队尾添加新数据,读取时从队首移走旧数据,即FIFO(先进先出)方式,队列消息仅被读取一次;非队列消息可以被读取多次,直接用新数据覆盖旧数据。


图5  ReceiveMessage()实现流程

应用层调用ReceiveMessage()和ReceiveDynamicMessage()API函数将队列或非队列消息中的消息传递给应用层,实现消息的接收过程。ReceiveMessage()函数的实现流程如图5所示。

2.2  CAN模块的实现

在汽车电子行业中,CAN总线以结构简单,成本低,可靠性高,实时性、抗干扰能力强等特点得到了广泛的应用。CAN总线是一种串行数据通信的多主总线。数据在节点间发送和接收时使用4种不同类型的帧,最基本的信息传送载体是数据帧,它包括11或29位的报文标识、0~8字节的数据域和校验以及控制信息。CAN总线的数据链路层和物理层协议已经被集成到多个控制器芯片或单片处理机中,用户只需定义上面的应用层即可实现一个通信系统。

CAN驱动软件由 CAN初始化程序、CAN发送程序和CAN接收程序3部分组成。CAN初始化程序将CAN模块的相关寄存器初始化。在CAN发送程序中,微处理器将要发送的数据写入CAN模块相应的发送缓冲区中,与主机的ID地址一起组成信息帧按CAN报文结构发送到CAN控制器的发送缓冲器中,并置位命令寄存器中的发送请求标志, 接收到发送请求后发送过程由CAN控制器自动完成。在检测到接收缓冲器中存在有效报文后,中断接收程序将接收缓冲区中的内容读入CPU的数据存储区,接收完毕后检查总线状态及溢出情况等并做相应处理。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top