汽车电子autosar系列50篇(二)-AUTOSAR通信服务
1. 通信服务组成部分
为了简化车内ECU的通信服务,AUTOSAR基于汽车通信协议(如CAN,LIN以及FlexRay等)定义了一个由多个模块组成的通信协议栈,如图 1.1所示。
图 1.1 COM通信栈示意图
在通信协议栈中,位于服务层的有通信层(以下简称Com)、诊断通信层(以下简称Dcm)、路由层(以下简称PduR)、协议数据单元复用层(以下简称IpduM)以及总线相关的传输层(以下简称Tp,包括CanTp、LinTp以及FlexRayTp);位于ECU抽象层的是总线相关的接口层(以下简称If,包括CanIf、LinIf以及FlexRayIf);位于微控制器抽象层的是总线相关的驱动层(包括Can、Lin以及FlexRay)和收发器层(CanTrcv、LinTrcv以及FrTrcv)。
1.1 Com模块
Com模块为应用程序提供基于信号的数据服务接口,并根据信号自身预定义的发送类型来发送报文。为了支持应用程序的复杂类型(如结构体这种数据量大又要保证整体发送原子性从而不便在一个信号封装或者拆分到多个信号中),Com模块还定义了信号组的概念。Com模块还提供了附加的服务接口可用于检测是否成功发送报文、成功接收报文以及报文是否超时等。对于多个通信通道的ECU,Com模块还提供了一个用于不同通信总线之间的信号路由即信号网关的功能。
1.2 Dcm模块
Dcm模块根据ISO 14229-1(Unified diagnostic services即UDS)实现诊断通信。诊断请求分为两块:一部分被直接送往Dcm模块(包括诊断会话的管理,读取故障码,重启ECU等);另一部分通过配置的端口转发到对应的软件组件(读,写,数据标志控制,例程执行等)。
1.3 IpduM模块
IpduM模块负责支持对协议数据单元(以下简称PDU)的多重使用。因此,PDU有一个专有部分的值(多路网关)用于定义PDU其余部分的语义内容,就像编程语言中的变量记录或者联合体的标签元素那样。在接收方,多路PDU由PduR提交给IpduM用于多重使用。在发送方,PDU从Com提交给PduR,然后由PduR提交这个PDU给IPduM并用于多重使用。IpduM返回多路的PDU给PduR,然后经PduR把多路的PDU转发到对应的目的地。
1.4 PduR模块
PduR模块主要提供两方面的服务。第一个方面是承上启下衔接上层和下层:发送时派发从高层模块的PDU到低层模块;接收时派发从底层模块如If或者TP接收的PDU给高层模块(COM,PduR)。第二个方面是通信网络中的网关功能。其中网关功能有两种:从一个接口层到另外一个相同或者不同总线类型的接口层;从一个TP到另外一个相同或者不同总线类型的TP层。其中路由协议是基于一个静态的路由表和PDU ID的概念。
1.5 总线相关的TP模块
TP模块的核心功能是大协议数据单元的拆包和组包。在AUTOSAR中,主要是为了支持DCM的诊断数据处理,同时TP是总线相关的。CanTp符合ISO标准15765-5,管理发送方的数据打包和接收方的数据解包。LinTp负责在发送节点将大数据分割成Lin帧,在接收节点将Lin帧组合还原。FlexRayTp负责在发送节点将大数据分割成FlexRay帧,在接收节点将FlexRay帧组合还原。TP模块都要对数据流控制以及诸如报文丢失、重发和顺序错误之类的错误检测负责。
1.6 总线相关的If模块
If模块使用驱动层的基于帧的服务,向上提供PDU的发送和接收服务。同时,If模块通过PDU和硬件缓冲区的映射提供硬件缓冲区的复用功能。每类If模块可以处理同一种总线的不同类型的通信控制器驱动模块。如果一个ECU支持CAN和FlexRay总线,最多会使用两类If模块,分别支持对CAN和Fr的抽象管理。当然,If模块也会提供对多种不同收发器驱动模块的支持,这和对多种驱动模块的支持类似。
1.7 总线相关的Driver模块
驱动模块(Can、Lin以及Fr)提供了对应接口层的基础,通过简化通信控制器的帧的发送和接收行为向上层提供服务。驱动模块被设计为处理同一种总线类型的一类通信控制器。因此,如果一个ECU包含两种类型的CAN控制器,就需要两个CAN Driver模块。
1.8 总线相关的Trcv模块
Trcv模块即收发器层(CanTrcv、LinTrcv以及FrTrcv)提供了对应接口层的基础,负责控制外部收发器的运行状态,包括唤醒和休眠功能。收发器层被设计为处理同一种总线类型的一类外部收发器。因此,如果一个ECU包含两种类型的外部CAN收发器,就需要两个CANTrcv模块。
2. 通信服务关键技术
2.1 分层模型机制
AUTOSAR通信协议栈参考了OSI的7层模型的概念。如图 2.1所示,分层模型中下层(第N-1层)向上层(第N层)提供服务;只有同层之间才会进行数据单元(简称SDU)交互。但是AUTOSAR通信协议栈和OSI分层模型的主要区别是在OSI 7层模型中,每一层的PDU的协议控制部分即图 2.1中的的协议控制信息(简称PCI)动态添加,而AUTOSAR通信协议栈中的协议控制部分通过静态配置实现。
图 2.1 PDU、SDU以及PCI在分层模型中的使用
2.2 通信路径分配机制
基于信号的通信路径如图 2.2所示,发送路径由Com模块启动,经过PduR进行路由,派发到对应总线的接口模块,最后由对应的总线驱动模块把信号发送到总线上;接收路径反之。
图 2.2 基于信号的通信路径
Dcm的诊断信息通信路径如图 2.3所示。发送路径由Dcm模块启动,经过PduR进行路由,派发到对应总线的TP模块,经过Tp的拆包功能经对应总线的接口层发送到驱动模块,最后由对应的总线驱动模块把信号发送到总线上;接收路径反之。
图 2.3 Dcm诊断信息通信路径示意图
PDU的网关路径如图 2.4所示。第一种网关路径是不同总线的接口层之间的,先由驱动接收到帧,经接口层提交给PduR模块,然后PduR模块根据之前配置的网关路径转发给另一种总线的接口层,接口层提交给目标总线的驱动层,最后由驱动层把PDU发布到总线上。另外一种网关路径是不同总线的TP层之间的,和第一种相比是在路径中增加了TP节点,同时也多了拆包组包的消耗。
图 2.4 PDU的网关路径示意图
PDU广播路径如图 2.5所示。多播路径由Com模块启动,根据PduR对这个PDU的配置,使用多条路径进行路由,之后派发到对应总线的接口模块,最后由对应的总线驱动模块把信号发送到总线上,从而达到多播效果。
图 2.5 PDU多播路径示意图
2.3 PDU ID映射机制
在每一层,PDU都有一个全局的识别号(简称全局ID)和一个本地的识别号(简称本地ID)。其中全局ID由ECU配置(简称EcuC)全局分配,一条通信路径上的PDU 的全局ID相同。为了方便本层管理PDU,会使用本地ID连续的机制,为每个PDU分配一个本地ID。
通信协议栈中上层在使用下层服务时,先根据PDU在自己层的本地ID,查找到这个PDU的全局ID,然后根据这个全局ID,查找这个PDU在下层对应的本地ID,最后根据得到的本地ID使用下层服务。
通信协议栈的下层在使用上层服务时,先根据PDU在自己层的本地ID,查找到这个PDU的全局ID,然后根据这个全局ID,查找这个PDU在上层对应的本地ID,最后根据得到的本地ID回调上层。
2.4 消息数据提供的方式
为了兼容不同的总线通信,AUTOSAR支持两种数据提供方式。如图 2.6所示,一种是直接的数据提供方式,主要用于CAN通信,调用传输函数时附上要发送的数据;另一种是基于触发的数据提供方式,用于Lin或者Fr通信,在传输时先缓冲要发送的数据,然后根据底层机制如Lin或Fr的静态的周期性的调度表来触发缓冲的数据的传输。
图 2.6 两种数据提供方式的对比示意图
2.5 消息的过滤机制
COM模块应在发送端和接收端为每个消息计算过滤条件。接收端会丢弃没有通过过滤机制的消息。虽然发送端不丢弃消息,但消息的过滤条件可以被用作消息的发送条件。提供的过滤算法如表 2.1所示。
表 2.1 消息过滤算法
算法 |
描述 |
ALWAYS |
每次都能通过过滤 |
NEVER |
每次都不能通过过滤 |
MASKED_NEW_EQUALS_X |
新的发送的值和配置的掩码相与等于一个配置的值的时候才能通过过滤 |
MASKED_NEW_DIFFERS_X |
新的发送的值和配置的掩码相与不等于一个配置的值的时候才能通过过滤 |
MASKED_NEW_DIFFERS_MASKED_OLD |
新的发送的值和配置的掩码相与后的结果不等于之前发送的值和配置的掩码相与后的结果的时候才能通过过滤 |
NEW_IS_WITHIN |
新的发送的值在一个配置的范围之内才能通过过滤 |
NEW_IS_OUTSIDE |
新的发送的值不在一个配置的范围之内才能通过过滤 |
ONE_EVERY_N |
每隔N(配置的一个值)次才能通过过滤一次 |
2.6 传输性质和发送模式
传输性质是消息的性质,发送模式是PDU的性质。传输性质和发送模式的的结合情况如表 2.2所示。
表 2.2 传输性质和发送模式的结合
传输性质/发送模式 |
触发性质 |
等待性质 |
直接N次模式 |
直接N次 |
|
周期模式 |
周期 |
|
混合模式 |
直接N次 |
周期 |
非发送模式 |
从消息的角度来说,配置为触发性质的消息,会引起装载它的PDU的立即发送,除非对应的PDU的发送模式是周期性的或者是不可发送的;配置为等待性质的消息,不会引起对应的PDU的立即传输。
从PDU的角度来说,对于直接N次模式的PDU,只有触发性质的消息才能引起它被传输N次;对于非发送模式的PDU,只有通过显式地调用触发发送服务才能引起自身的传输;对于周期模式的PDU,根据配置的周期进行周期性的发送;混合模式的PDU则是周期模式和直接N次模式的叠加。
每个PDU在配置的时候可以配置两种发送模式,分别对应PDU的发送模式的选择结果(以下简称TMS)为TRUE或FALSE的情况。其中TMS计算公式为公式(2.1)
公式(2.1)
即如果这个PDU关联的任意一个消息的传输模式条件(以下简称TMC)是TRUE,这个PDU的TMS结果就是TRUE,否则为FALSE。其中TMC是一个消息的发送条件,引用的是消息的过滤结果。
PDU的TMS的计算过程如图 2.7所示,首先计算得到信号的TMC,然后更新PDU中的信号,并根据公式(2.1)计算出TMS。
图 2.7 PDU的TMS的计算过程
- 点赞
- 收藏
- 关注作者
评论(0)