AUTOSAR通信篇—AUTOSAR COM模块

2021年12月7日汽车技术评论14,4172阅读模式

AUTOSAR COMAUTOSAR通讯的重要组成部分,它是从OSEK COM标准的基础上发展而来的。它提出了一个不同速率的总线网络之间进行数据交换的方法,为汽车控制单元应用软件提供了统一的通信环境,为内部和外部通信定义了公共的软件通信接口和行为,增强了应用软件模块的可移植性。

AUTOSAR通信篇—AUTOSAR COM模块

              图1  AUTOSAR COM在分层架构中的位置
AUTOSAR COM提供了基本的通信服务,它有明确的上层模块RTE(Runtime Environment)和下层模块PDU Router

上下层关系

上层RTE
RTE使用AUTOSAR COM模块的功能来发送和接收信号,AUTOSAR COM模块为RTE提供面向信号的数据接口,主要包括:
  • 将AUTOSAR信号打包传送给I-PDUs

  • 将接收到的I-PDUs打包并将接收到的信号提供给RTE

  • 将接收到的I-PDUs信号路由到I-PDU进行传输

  • 将接收到的I-PDUs中的信号簇路由到I-PDU中进行传输

  • 通信传输控制(I-PDU组的启动/停止)

  • 发送请求的复制

  • 保证传输I-PDUs之间的最小距离

  • 接收信号监控(信号超时)

  • 传入信号的过滤机制

  • 不同的通知机制

  • 提供初始值和更新指示

  • 字节顺序的转换

  • 符号扩展

  • 每个I-PDU支持两种不同的传输模式

  • 基于信号的网关

  • 支持大型和动态长度数据类型

  • 支持I-PDU计数器和I-PDU复制

AUTOSAR通信篇—AUTOSAR COM模块

                          图2  COM和RTE的通信

下层PDUR

AUTOSAR COM模块使用两组PDU Router上层模块API的联合,即用于使用TP的上层模块API和用于不使用TP的上层模块API。由于AUTOSAR COM模块通过简单未片分的L-PDUs或通过片分的TP来传输I-PDUs,所以从这点来看,还是非常有必要的。

AUTOSAR通信篇—AUTOSAR COM模块

                            图3 COM和PDUR的通信

来自底层PDU Router对AUTOSAR COM模块的功能需求包括:

  • 输入I-PDUs的指示
  • 用于发送I-PDUs的发送接口,包括通信控制器是否已发送I-PDU的确认
  • 触发接口,使PDU router能够引起来自AUTOSAR COM模块的传输
  • 用于TP通信的缓冲区处理

AUTOSAR通信篇—AUTOSAR COM模块

                    图4  COM和RTE、PDUR的通信

信号值

AUTOSAR  COM的信号值包括三种:

初始值:AUTOSAR COM模块使用配置参数ComSignalInitValue的低N位初始化发送方和接收方的每个N位的信号类型, 配置的ComSignalInitValues也用于I-PDU的初始化信号。一个信号的ComSignalInitValue可以与ComSignalDataInvalidValue值相同。初始化阶段会清空所有update-bits值。默认情况下,所有I-PDU组应在停止状态,不得由Com_Init()调用启动。

数据无效值:通过调用Com_InvalidateSignal, AUTOSAR COM模块将在内部执行带有配置ComSignalDataInvalidValueCom_SendSignalComTransferProperty和传输模式决定了ComSignalDataInvalidValue在总线上的传输。内部执行的带有数据无效值的Com_SendSignal,会决定被用作过滤器的数据无效值和TMS当前值。VFB仅为复杂数据类型定义一个属性。因此,一个失效的复杂数据类型到一个失效的信号簇的最佳映射是使一个信号簇的所有信号失效。因此,RTE还可以通过调用Com_InvalidateSignalGroup来请求使整个信号簇无效。

正常值:初始化阶段之后的有效值,包括COM部分收发的信号值。

信号发送属性和初始化

发送信号有Triggered属性和Pending属性。

Triggered属性:调用Com_SendSignal( )服务请求具备Triggered属性的信号发送,可以触发相关I-PDU的发送,但是如果该I-PDU的发送模式被配置为Peiodic时,只更新信号的值,不会触发相关I-PDU的立即发送,而是在下一周期到来时触发发送。

Pending属性:Com_SendSignal( )服务请求调用具备Pending属性的信号发送,不会触发相关I-PDU的发送。

AUTOSAR COM在Com_Init()执行时,将初始化所有I-PDU内容,首先用默认值(ComTxIPduUnusedAreasDefault)表示字节,然后根据所包含信号的初始值(ComSignalInitValue)和更新位来表示位。当然,初始化过程中,无法使能ECU内部的通信功能。

信号的收发

发送过程

在发送过程中,应用层调用COM层提供的信号或信号簇发送函数,根据配置,信号或信号簇的数据经过字节序转换后被更新到I-PDU中相应的位置。AUTOSAR COM规范中同一I-PDU可以设置两种发送模式,对其中各信号的传输模式条件进行计算,I-PDU选择其中一种发送模式进行发送。然后启动发送死限监控,调用PduR_ComTransmit()函数将I-PDU发送到底层。

另外,还要根据该信号的配置,判定是内部消息还是外部消息。

对于内部发送,直接将信号数据复制到接收信号数据区,并执行通知操作;对于外部发送,若该信号发送属性为触发,则该信号所属的I-PDU将立即发送(除非该I-PDU发送模式为周期传输模式),若该信号发送属性为延迟,则不进行传输,发送时,信号经过字节顺序转换后数据被复制到I-PDU中,同时设置相关更新位信息,然后根据该I-PDU的TMS切换传输模式,进行传输并设置启动相关定时器。各传输模式的传输过程与OSEK COM中大致相同。

接收过程

在接收过程中,当底层接收到I-PDU时,底层将调用COM层提供的指示函数Com_RxIndication(),取消并重启接收死限监控,将I-PDU的数据从底层拷贝到COM中。调用信号或信号簇的接收函数后,该I-PDU中的信号或信号簇将经过字节顺序转换、符号扩展和接收过滤后,数据被拷贝到应用层。

类似地,接收过程要判断是内部信号还是外部信号。

对于内部接收,直接将信号数据复制到接收信号数据区;对于外部接收,首先判断对于的I-PDU组是否启动,若启动,返回E_OK,否则返回COM_STOP,取消并重启该I-PDU的相关死限监控定时器,将数据复制到I-PDU数据区,I-PDU中的信号经过字节书序转换、符号扩展和过滤机制后,复制到接收信号数据区,再执行通知操作,通知上层软件调用相关API函数接收信号。

字节序转换和符号扩展

AUTOSAR  COM 支持以下数据类型:boolean,uint8,uint16,uint32,uint64,sint8,sint16, sint32,sint64,uint8[n],float32和float64,其中uint8[n] 对应于UINT8_N或UINT8_DYN。

AUTOSAR  COM支持所有有符号和无符号整型数据类型的字节序转换,同时会将非整型数据类型视为对应匹配的整数数据类型,或者不解释它们的内容,防止它们的ComSignalEndianness被配置为OPAQUE。对于不透明数据的转换,必须配置为OPAQUE。AUTOSAR  COM会扩展接收信号ComSignalType的大小。

AUTOSAR COM会在接收端滤出想要过滤的信号,并评估每次过滤的条件。同时,会在发送端对发送模式条件(TMC)采用过滤机制。如果在发送API编写相应的信号之前对过滤器进行评估,则需要一种方法来确定该信号的过滤器状态。有些过滤器需要新值来计算过滤器的值。但是,只有在使用一个发送API更新信号之后才能使用它。因此,有必要在第一次发送之前定义新值过滤器使用的值。

传输模式切换

COM模块主要实现信号或信号簇的收发功能,下面以信号发送的实现展开。首先简要介绍一下AUTOSAR COM中特有的传输模式切换。

AUTOSAR COM定义了4种信号传输模式:

1. 直接/N次传输模式(Direct/n-times模式)

包含于该I-PDU的任何具备Triggered属性的信号及信号组的更新都会触发I-PDU的立即发送,当上层面模块调用Com_SendSignal( )/Com_SendSignalGroup( )更新信号或者信号组时,Com层根据配置需求发送n次该I-PDU

2. 周期传输模式(Periodic 模式)

用户配置发送周期,只有该I-PDU的周期到来时才会触发该I-PDU的发送,上层模块调用Com_SendSignal()/Com_SendSignalGroup( )只更新信号及信号组的内容

3. 混合传输模式(Mixed模式)

Direct/n-times和Periodic的混合模式,当上层模块调用Com_SendSignal( )/Com_SendSignalGroup( )请求该I-PDU包含的信号/信号组的发送时,将会触发该I-PDU的直接n次发送,同时,用户配置的周期到来也会触发该I-PDU的发送

4. None传输模式

无论何时COM层不能够触发拥有该发送模式的I-PDU的发送,只有PduR模块调用Com_TriggerTransmit()服务才能够触发该I-PDU的发送

在AUTOSAR COM规范中允许为每个I-PDU静态配置两种不同的传输模式,ComTxModeTrue和ComTxModeFalse。在AUTOSAR COM规范中通过传输模式切换,来选择I-PDU中的其中一种传输模式进行传输。

首先使用过滤机制判断I-PDU中各信号的发送模式条件,同时更新I-PDU中的信号。

再通过各信号的判断结果来计算该I-PDU的TMS(transmission mode selector)。若至少有一个C( Si,IPDUk)为True,则TMS为True,对应I-PDU以用户配置的ComTxModeTrue的发送模式发送;若所有C(Si,IPDUk)都为False,则TMS为False,对应I-PDU以用户配置的ComTxModeFalse的发送模式发送。其中C(Si,IPDUk)为传输模式条件,该条件与IPDUk中的信号Si相关。

举个例子,简要说明传输模式的切换。

用例中进行周期传输和直接/N次传输之间的切换(N=3)。

根据I-PDU的传输配置,当TMS(transmission mode selector)判断为真时,设置传输模式为周期传输,反之为直接/N次传输。上层给定值V=a(此时TMS判断为真),进行周期传输;当值V更新为b时(此时TMS判断为假),进行直接/N次传输模式,传输三次。由图3可知,随着V值的更新该I-PDU的传输模式在这两种传输模式之间切换。

TMC和TMS

发送模式条件: TMC

发送端信号的TMC(发送模式条件)的计算与接收端的信号过滤机制相同,但是,在发送端信号过滤并不会丢弃任何的信号,而只是用于计算信号TMC的值。

COM提供了如下八种信号过滤机制:

  • ALWAYS: 总是通过,若一个信号的过滤算法配置为ALWAYS,那么这个信号的TMC永远为True

  • NEVER: 总是不通过,若一个信号的过滤算法配置为NEVER,那么这个信号的TMC永远为False;

  • MASKED_NEW_EQUALS_X: 若一个信号的过滤算法配置为MASKED_NEW_EQUALS_X时,只有当新值与掩码按位与后等于设定的某一值时,这个信号的TMC才等于True;

  • MASKED_NEW_DIFFERS_X: 若一个信号的过滤算法配置为MASKED_NEW_DIFFERS_X时,只有当新值与掩码按位与之后不等于设定的某一值时,这个信号的TMC才为True;

  • MASKED_NEW_DIFFERS_MASKED_OLD: 若一个信号的过滤算法配置为MASKED_NEW_DIFFERS_MASKED_OLD时,只有当新值与掩码按位与之后的值不等于旧值与掩码按位与之后的值时,这个信号的TMC才为True;

  • NEW_IS_WITHIN: 若一个信号的过滤算法配置为NEW_IS_WITHIN时,只有当新值在某一设定的范围内时,这个信号的TMC才为True;

  • NEW_IS_OUTSIDE: 若一个信号过滤算法配置为NEW_IS_OUTSIDE时,只有当新值不在某一设定的范围内时,这个信号的TMC才为True;

  • ONE_EVERY_N:若一个信号的过滤算法配置为ONE_EVERY_N时,该信号值每更新N次,这个信号的TMC值为True;

发送模式选择TMS

发送端的TMS,一个I-PDU的TMS的值是根据其所有下属的信号的TMC结果决定的,若一个I-PDU下属的信号中至少有一个信号的TMC计算为True,那么这个I-PDU的TMS为True,只有该I-PD下属的所有的信号的TMC都计算为False时,该I-PDU的TMS才为False。

AUTOSAR通信篇—AUTOSAR COM模块

               图5  通过TMS将两个信号传递给I-PDU

总结来看,可以为每个I-PDU配置两种发送模式,在程序运行过程中,某I-PDU的发送模式是由TMS来决定,若一个I-PDU的TMS根据上述的算法计算为True,那么该I-PDU将以配置的True状态下的发送模式进行发送。当一个I-PDU下属的某个信号的过滤算法配置为ALWAYS,那么这个I-PDU将一直以用户配置的TMS为True状态下发送模式进行发送。

信号网关

AUTOSAR COM提供了集成式信号网关,用于以1:n形式发送信号和信号簇。

AUTOSAR通信篇—AUTOSAR COM模块

                 图6  COM模块对信号发送的影响

如图7和图8所示,集成的信号网关充当接收器,用于所有被配置为网关信号源的信号或信号簇。信号网关在接收到用于路由的信号或信号簇后,立即充当这些信号或信号簇的发送器。如图6和图8所示。如果集成的信号网关转发信号/信号簇或SWC发送信号,则信号处理没有区别。

AUTOSAR通信篇—AUTOSAR COM模块

                     图7  COM模块对信号接收的影响

由于网关关系是静态配置的,一个优化的信号网关可能会跳过一些具体配置的处理阶段。例如,字节序转换在某些情况下是不必要的。当然,优化以提高信号网关性能为目的,不会导致任何不同的逻辑行为或目标总线上的不同表示。

AUTOSAR通信篇—AUTOSAR COM模块

             图8  COM模块对集成信号网关的影响

如图7所示,接收到的信号或信号簇可能在本地ECU上接收,同时也是网关动作的源。图6和图7只显示了RTE接收到的信号簇的缓冲。集成的信号网关当然要确保一致地处理信号簇,但没有预先确定的实现方法。

 

 

缩略词:

CAN Communication Matrix:CAN通信矩阵,用来描述完整的CAN网络,包括:涉及的CAN节点;CAN PDU的定义(ID和数据长度DLC);PDU的发送和接收信息。

Physical Channel:物理通道。代表CAN网络的接口,不同CAN硬件单元的不同物理通道可以访问不同的网络。

DLCData Length Code,描述SDU长度的CAN信息。

L-PDUData Link Layer ProtocolData Unit,数据链接层的协议数据单元,包含标识符(ID), 数据长度(DLC)和数据(L-PDU)

L-SDU:Data Link Layer ServiceData Unit,数据链接层服务数据单元,它其中的数据传输到L-PDU中。

Hardware Object :硬件对象。硬件对象定义为CAN硬件单元的CAN RAM中的消息缓冲区。也常称为消息对象。

HOH:Hardware ObjectHandle,硬件对象处理。硬件对象处理由CAN驱动程序定义和提供。通常每个HOH表示一个硬件对象。HOH被CAN接口层用作发送和读取的参数,向CAN驱动程序请求。

L-PDU Handle:L-PDU处理被定义并放置在CAN接口层中。通常,每个L-PDU Handle包含Tx/Rx处理信息的常量结构。

CAN Controller:CAN控制器。一个CAN控制器直接服务一个物理通道。

N-PDU:CAN传输层的网络协议数据单元

N-SDU:CAN传输层的服务数据单元。其中的数据传输到N-PDU中。

PDU Router:协议数据单元路由。将I-PDU从一个模块传递到另外一个模块,PDURouter可以用于网关运行或内部路由。

Confirmation:通过确认,PDU路由器报告AUTOSAR COM模块的请求已经成功完成。它是对COM请求的响应。例如,当PDU已成功传送。

Data Invalid Value:数据无效值。由AUTOSAR COM模块发送的值,指示发送方AUTOSAR软件组件无法提供有效的值。

Dynamic Length Signal:动态长度信号是在运行时长度可以变化的信号。

Dynamic Length I-PDU:动态长度I-PDU是包含动态长度信号的I-PDU。它的长度取决于所包含的动态长度信号的长度。

Indication:一个指示是从PDU路由器到COM的异步信息,例如,确认某物已经被接收。

Init Value:启动后,AUTOSAR COM模块将I-PDUs和信号设置的初始 值。此值将一直使用到被覆盖为止。

I-PDU group:I-PDU组是COM模块中相同方向(即发送或接收)的I-PDU的任意集合。

Large Signal:大信号是指信号太大,无法装入基础通信协议的单个L-PDU中。

Endianness Conversion:字节序转换

Sign Extension:符号扩展

TMC:Transmission ModeConditions,传输模式的条件

TMS :Transmission Mode Selector,传输模式选择器

weinxin
扫码关注公众号
关注公众号领精彩彩蛋!
AutoSar之方法论Methodology 汽车技术

AutoSar之方法论Methodology

AUTOSAR为汽车电子软件系统开发定义了通用的技术方法,即AUTOSAR方法论。该方法论描述了从系统底层配置到ECU可执行代码产生过程的设计步骤。AUTOSAR开发方法是基于虚拟功能总线的开发方法。...

发表评论