






















这部分不包括诊断、标定的通信,以CAN为主.
BSW中的Communication主要包含3个部分:
架构关系如下:

子模块:
COM:应用层传下来的数据,首先到这里,应用层无需关心收发的数据是通过什么总线传输,只需要将它传输给COM即可. 收发的数据,由用户DBC文件或ARXML文件定义好(主机厂提供). COM上传输的是单纯的数据,没有附加单位等物理意义的信息,应用层关心该数据的实际意义、数据大小. COM相对于一个信号接口,起网关转发的作用.
PDU Router: PDU——Protocal Data Unit, 协议数据单元. 该模块将COM下发信号数据分配到相应的总线,或者将不同总线上传信号传给COM,起到路由作用.
IPDU Mux: 解析一些特殊协议,比如CAN FD或用户自定义的一些协议,起统一CAN ID、不同信号layout的作用
CAN Tp:分包数据传输与错误检测,通常诊断时才会用到
CAN Interface:配置收发队列、组帧(FlexRay)、管理时间触发总线的调度表(LIN、FlexRay);与硬件无关.
CAN Driver:MCAL中MCU CAN模块的驱动;硬件相关
Trcv Driver:Trcv(Tranceiver),收发器驱动.
APPL SWC➡COM➡PDU Router➡Bus Interface➡Bus Driver➡硬件发送报文

from ref. [1]
接收流程反过来:
硬件接收报文 ➡Bus Driver➡Bus Interface➡PDU Router➡COM➡APPL SWC

from ref. [1]
接收报文,可以用中断,或循环接收. 如果是中断接收:
一般主机厂要求才会用IPDUM.
下图跟前面的架构图略有区别:一般通过PDUR与COM连接,迫不得已才会IPDUM与COM直连.

from ref. [1]
IPDUM将IPDU灵活分割、解析,适用于CAN FD、自定义协议.
IPDUM将IPDU分为:静态部分(static part)、复用部分(multiplexed part). 复用部分可通过一位或多位作为标识符,来使用不同layout,静态部分是固定不变的. 下图黑色或灰色部分代表有效的payload(有效载荷)

from ref. [1]

从COM将IPDU发送给PDUR时,会用到Transmission(TxComMode)Modes的机制,作用:通过对被发送信号数据本身的过滤,自动选择发送机制.
例如,我们要发送一个PWM占空比信号给另1 ECU,周期10ms;但我们想减少总线负载,在占空比长期为0时,可以慢点,如周期100ms. 此时,可判断我们发送的数据是否为0,然后自动调整发送周期.
实际情况,可能还需要考虑IPDU上其他数据,最终形成的机制如下图:

from ref. [1]
对pdu每个信号做Filter判断(见下文);
然后,根据每个信号的判断结果(True/False),进入模式判断;
模式判断会做或运算(or),只要有一个True,就进入Transmission Mode True模式,否则进入... False模式;
最后,在对应模式中进行相应处理.
根据传入信号做True/False判断,Filter判断(COM Signal Filters)有8类判断方式:
1)None
不做Filter,最常用
2)Always
判断结果永远True
3)Never
判断结果永远False
4)MaskedNewDiffersMaskedOld
当 (new & mask) != (old & mask) 时,系统会返回此状态码
old = 00001010b
new = 10111001b
mask = 00001111b -> true
mask = 00001100b -> false
5)MaskedNewEqualsX
当 (new&mask)==x 时,系统返回此状态码
new = 10111001b
x = 9 // 1001b
mask = 00001111b -> true
mask = 10010000b -> false
6)MaskedNewDiifersX
当 (new&mask) !=x 时,系统返回此状态码
new = 10111001b
x = 9 // 1001b
mask = 00001111b -> false
mask = 10010000b -> true
7)NewIsOutside
当 ((new < min) || (new > max))时,系统返回此状态码
8)NewIsWithin
当 ((new >= min) && (new <= max))时,系统返回此状态码
所有Filter判断完后,做所有的Filter结果 或运算(or),然后根据结果进入不同的发送模式.
发送模式有:
1)None
不发送该PDU
2)Direct
可设置重复次数、重复周期,然后直接按配置的次数和周期发送(发送次数完成后,停止发送)
3)Periodic
周期发送. 可设置周期(Period)、偏移(Offset),即延迟Offset之后,按周期发送. 通常使用较多
4)Mixed
混合发送,direct + Period
我们想发送pwm占空比信号(PDU中只有这一个信号)给另一个ECU,每10ms发一次;我们想减少总线负载,在占空比长期为0时,每100ms发一次. 此时,需要判断发送的数据是否为0,然后自动调整发送周期.
1)用 MaskedNewEqualsX 方式Filter,设置Mask=11111111b, x=0
根据 (new&mask)==x 判断方式,new为0,那么结果一定为True,其余时候为False
2)判定结果为True时,设置 Transmission Modes(发送模式)为Periodic,Period1=100ms,offset1=40ms;
判定结果False时,设置 Transmission Modes为,Periodic,Period1=10ms,offset1=0ms
Signal Groups由通信矩阵定义,通常由OEM设计.
信号组(Signal Groups):将作用相近的信号放到一组里方便管理. 如果组中一个信号失效,那么该组所有信号被认为失效.
例如,陀螺仪x,y,z轴3个方向加速度信号,放到一个信号组. 如果陀螺仪失效,其中有一个信号失效,那么这组信号都无意义.
Update Bit 由通信矩阵定义,通常由OEM设计.
signal中保留1bit用做update bit,该bit一般和deadline monitoring超时监控一起使用. 该bit专门指示信号是否被应用层更新了. 如果长时间未更新,那么启用超时处理.
从下图流程,来看update bit作用:

from ref. [1]
Notification Mechanisms(通知机制),有多种类别,常用接收(Rx indication)、发送(Tx confirmation)成功的通知,都在Communication->Signals中配置.
通知机制有以下几种:
重要属性:立即通知(Immediate)、延迟通知(Deferred),在Communication->PDUs中设置.
1. 超时监控(Deadline Monitoring)
可分为2个等级:
Dev、Cfg的COM都能配置Deadline Monitoring的Timeout Time,但最后都要同步到Cfg中做代码生成.
IPDU的Timeout Time的来源是Signal的最小Timeout Time. 例如,IPDU有2个Signal:A和B. 其中,A的Timeout Time=100ms,B的Timeout Time=50ms,那么该IPDU的Timeout Time=50ms.
超时监控监控到超时,如何处理?
这就涉及到超时处理.
2. 超时处理
COM超时处理:
Rte_COMCbkTout_<ComSignalName>RTE超时处理:
Rte_Read_<Pp>_<De>的时候,会返回错误RTE_E_MAX_AGE_EXCEEDEDRte_IRead这类Buffer类型S/R接口时,状态可由Rte_IStatus决定1. 失效机制
失效机制(Invalidation):当一个Signal Groups中任一Signal被设置为无效时,整个Groups被设置为无效,不允许一半有效、一半无效的signal出现. 失效的信号,可通过 Rte_Inmalidate(explicit API)或Rte_IInvalidate(implicit API)来发送一个失效值.
2. 失效处理
有3种方式:
数据映射(Data Mapping)
Cfg中,数据不能直接放在IPDU上,必须要映射到相应的Signals才行. Signals一般由通信矩阵定义,但通信矩阵并不知道APP用哪个数据进行传输,需要我们在Dev中定义数据(Data Elements)和Signal(Network Signals)相应映射,才能正常使用.
Dav中,映射可以至下而上、之上而下,在Cfg和Dev中都能配置这一功能,之后导入另一方即可. 分两种情况:
Delegation Ports(委托端口) 是一种用于组件间通信的机制,主要应用于SWC与ECU抽象层或CDD之间的接口传递.
1)Dev中,做Delegation ports操作:在完成端口的实体化后,可右键> Complete Ports...,然后出现下面对话框,选择Delegation Ports Only,就能看见端口延伸出去了
含义是连接上更高一级的SWC

from ref. [1]
2)在Dev中做Data Mapping后,出现的结果

from ref. [1]
3)Cfg中,也会出现相应提示信息

from ref. [1]
[1] AutoSAR入门到精通系列讲解
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。