摘要 OSEK/VDX规范在汽车电子控制系统开发中具有重要地位,其中OSEK/VDX通信规范(OSEK COM)为汽车电子通信系统的构建提供了依据和参考。本文介绍了OSEK COM 3.03规范基于消息的通信机制,设计并实现了一种基于CAN总线的通信系统,并对该系统的功能进行了测试。测试表明,该通信系统可以很好地实现消息的发送和接收功能。
关键词 嵌入式实时操作系统 OSEK/VDX规范 OSEK COM 传输机制
引言
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.2 OSEK COM的通信过程
OSEK COM是基于消息对象的通信,消息及其属性通过OSEK实现语言(OSEK Implementation Language, OIL)静态配置。在内部通信过程中(即发送内部消息时),应用层调用交互层提供的发送消息API,将发送方的数据传给交互层的消息对象,消息对象直接被复制到接收消息对象;然后接收方调用接收消息API,从接收消息对象中读取消息数据。在外部通信过程中(即发送外部消息时),发送方的一个或多个消息对象的数据按比特位对齐被映射到一个发送IPDU(交互层协议数据单元)的数据区上,交互层调用底层协议将数据发送出去;接收方的接收与发送方的过程相反,在一个接收指示请求后,底层PDU(协议数据单元)的消息根据底层协议收取数据到接收IPDU数据区,然后从IPDU数据区取出各接收消息对象的数据,完成接收过程。
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所示。
在周期传输模式的具体实现过程中,首先判断该消息是否具有周期传输模式的属性,如果具有,则将周期传输模式的标志位置1;进入中断后,判断此时系统时钟节拍和上次记录的系统时钟节拍的时间间隔是否大于或等于I_TMP_TPD,若大于时间间隔,则获得传输请求,调用底层接口函数立刻传输消息到底层,同时记录此时的系统时钟节拍。若消息传输成功,底层返回传输确认;若在规定时间内没有传输确认,则调用通知机制,表明消息传输失败。至此完成了消息从交互层发送到底层的传输过程。周期传输的实现流程如图4所示。直接传输模式和混合传输模式消息的传输实现过程也类似。
2.1.2 外部消息接收过程的实现[5]
在消息的接收过程中,首先底层接口函数将底层PDU里面的消息取出放入接收IPDU数据区,从底层向OSEK COM传递成功或失败的状态信息。如果接收指示服务没有产生错误,表明消息已经成功接收到IPDU。然后从IPDU数据区分别取出接收消息对象的数据,在经过字节顺序转化和过滤算法后,放入消息接收对象。消息接收对象分为队列消息和非队列消息,接收到的动态长度的消息都放入非队列消息,接收到的静态长度消息可以放入队列或非队列消息。队列消息将收到的消息数据组合成一个队列,接收时向队尾添加新数据,读取时从队首移走旧数据,即FIFO(先进先出)方式,队列消息仅被读取一次;非队列消息可以被读取多次,直接用新数据覆盖旧数据。
应用层调用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的数据存储区,接收完毕后检查总线状态及溢出情况等并做相应处理。
3 通信系统的实现
3.1 通信系统的构成
基于CAN总线的通信系统在软件上使用CodeWarrior编译器,硬件上选择Freescale公司的16位单片机HCS12DP256B。
在Main()函数中调用CAN初始化程序和系统定时器的初始化程序,使用API函数startcom()来初始化各消息对象并启动通信。调用SendMessage()、SendDynamicMessage()、 ReceiveMessage()、ReceiveDynamicMessage()等API函数可以实现消息的发送和接收。
3.2 通信系统的测试界面
使用主机、周立功USB/CAN转化器、HCS12DP256B开发板进行连接,对消息发送和接收的情况进行测试,并使用周立功ZLGCANTest测试软件的界面来监控消息发送和接收的情况。
图6是在应用层调用API函数SendMessage()发送直接传输消息底层接收消息的界面。SendMessage()通过调用底层接口函数将消息传给开发板上的CAN模块,再通过CAN模块的输出接口与周立功USB/CAN的工具相连,将应用层发送的数据传到上位机PC的USB接口,并通过ZLGCANTest软件显示消息的接收情况。在图6中序号表示接收到的消息的条数,数据表示应用层发送出去的消息的值。
测试的结果表明:该通信系统各API函数的功能均可以实现,数据传输准确及时,经过合理的参数配置,可以很好地实现消息的发送和接收功能。
结语
由于OSEK规范本身的优点和许多国际嵌入式软件公司的加盟,它逐渐占据了汽车电子软件平台的主导地位,并成为ISO国际标准。开发出具有自主知识产权的符合该标准的系统,加深对OSEK规范的认识,并结合我国国情参与OSEK规范的制定,对我国汽车电子行业的发展有着重要意义。本文在基于OSEK COM规范的通信系统的研究和实现方面进行了初步的尝试,下一步将把该通信模块应用到RS485总线上,以增强通信模块的可移植性。
参考文献
[1] OSEK/VDX Organization. OSEK/VDX communication specification 3.0.3[EB/OL],20040720[200805]. http: //www.osekvdx.org.
[2] OSEK/VDX Organization. OSEK/VDX network management specification2.5.3[EB/OL],20050201[200805]. http://www.osekvdx.org.
[3] OSEK/VDX Organization.OSEK/VDX system generation,OIL:OSEK implementation language. Version2.5[EB/OL],20040701[200805].http: //www.osekvdx.org.
[4] Joseph L.OSEK/VDX汽车电子嵌入式软件编程技术[M].罗克露,译.北京:北京航空航天大学出版社,2004.
[5] Labrosse Jean J.嵌入式实时操作系统μC/OS-II[M].邵贝贝,等译.第2版. 北京:北京航空航天大学出版社,2003.
[6] Morton Todd D.嵌入式微控制器[M].严隽永,译.北京:机械工业出版社,2005.
李萍(硕士研究生),研究方向为嵌入式系统设计开发。
(收修改稿日期:2008-06-06)
评论
查看更多