AUTOSAR笔记:通信
这部分不包括诊断、标定的通信,以CAN为主.
通信基础
架构、术语
BSW中的Communication主要包含3个部分:
- 通信服务(Communication Service)
- 通信硬件抽象(Communication Hardware Abstraction)
- 通信驱动(Communication Driver)
架构关系如下:

子模块:
-
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]
- 应用层SWC send 1个数据到COM
- COM写信号到PDU Buffer
- PDU被PDU Router立刻发送或按周期发送(每个PDU都有一个独立的ID),之后PDU Router根据不同总线,将PDU下发
- Interface根据不同通道,将报文写入不同队列
- Driver根据报文优先级立刻发送报文
接收流程
接收流程反过来:
硬件接收报文 ➡Bus Driver➡Bus Interface➡PDU Router➡COM➡APPL SWC

from ref. [1]
接收报文,可以用中断,或循环接收. 如果是中断接收:
- 硬件接收报文
- Driver发出Rx中断,通过RxIndication,数据传输到Interface
- 传递到PDU Router
- 传递到COM,如果SWC使用Data Reception Trigger,就通知RTE;否则,暂存到Buffer
- 信号被RTE读取,然后应用层读取
协议数据单元PDU
一般主机厂要求才会用IPDUM.
下图跟前面的架构图略有区别:一般通过PDUR与COM连接,迫不得已才会IPDUM与COM直连.

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

from ref. [1]
PDU转换图
- I-PDU: Interaction PDU
- N-PDU: Networkd PDU
- L-PDU: Link PDU

信息发送的Filter机制
Filter机制
从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模式;
最后,在对应模式中进行相应处理.
Filter判断
根据传入信号做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))时,系统返回此状态码
信息发送模式(Transmission Modes)
所有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
Signal Groups由通信矩阵定义,通常由OEM设计.
信号组(Signal Groups):将作用相近的信号放到一组里方便管理. 如果组中一个信号失效,那么该组所有信号被认为失效.
例如,陀螺仪x,y,z轴3个方向加速度信号,放到一个信号组. 如果陀螺仪失效,其中有一个信号失效,那么这组信号都无意义.
Update Bit
Update Bit 由通信矩阵定义,通常由OEM设计.
signal中保留1bit用做update bit,该bit一般和deadline monitoring超时监控一起使用. 该bit专门指示信号是否被应用层更新了. 如果长时间未更新,那么启用超时处理.
从下图流程,来看update bit作用:
- sender在应用层更新signal A的数据,然后COM模块自动将update bit置位,代表该信号被更新;signal B未被更新,对应update bit是0;
- 将signal A、B通过通信传送给接收方;
- 接收方接收到signal A、B之后,开始解析,发现
1)signal A被更新过了可用数据(update bit=1),就进入signal notification处理;
2)signal B未被更新,进入监控超时处理.

from ref. [1]
Notification Mechanisms
Notification Mechanisms(通知机制),有多种类别,常用接收(Rx indication)、发送(Tx confirmation)成功的通知,都在Communication->Signals中配置.
通知机制有以下几种:
- 接收成功通知
- 发送成功通知
- 超时通知
- 错误通知
- 失效通知
- 更新位通知
重要属性:立即通知(Immediate)、延迟通知(Deferred),在Communication->PDUs中设置.
- 立即通知:接收/发送成功,立即中断方式进入通知函数
- 延迟通知:在下一次Task中调用Com_MainFunctionRx()或Com_MainFunctionTx(),触发通知
Deadline Monitoring
1. 超时监控(Deadline Monitoring)
可分为2个等级:
- IPDU级:当一个Rx IPDU没有在规定时间内收到有效数据,就启动超时处理
- Signal级:如果没有收到Update Bit,就启动超时处理
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超时处理:
- 超时后,会有超时的Notification被调用:
Rte_COMCbkTout_<ComSignalName> - 可选,可选择将超时信号复位为初始值(需配置ComRxDataTimeoutAction)
RTE超时处理:
- 超时后,可触发一个Runnable来处理
- 使用相关
Rte_Read_<Pp>_<De>的时候,会返回错误RTE_E_MAX_AGE_EXCEEDED - 使用
Rte_IRead这类Buffer类型S/R接口时,状态可由Rte_IStatus决定
Invalidation
1. 失效机制
失效机制(Invalidation):当一个Signal Groups中任一Signal被设置为无效时,整个Groups被设置为无效,不允许一半有效、一半无效的signal出现. 失效的信号,可通过 Rte_Inmalidate(explicit API)或Rte_IInvalidate(implicit API)来发送一个失效值.
2. 失效处理
有3种方式:
- Keep:保持原值不变
- Replace:用一个初始值替换
- None:不做任何处理,相对于失效机制未起作用
Data Mapping
数据映射(Data Mapping)
概述
Cfg中,数据不能直接放在IPDU上,必须要映射到相应的Signals才行. Signals一般由通信矩阵定义,但通信矩阵并不知道APP用哪个数据进行传输,需要我们在Dev中定义数据(Data Elements)和Signal(Network Signals)相应映射,才能正常使用.
Dav中,映射可以至下而上、之上而下,在Cfg和Dev中都能配置这一功能,之后导入另一方即可. 分两种情况:
- ECU SW Composition层级中,Cfg和Dev中都能配置Data Mapping,但需要做Delegation Ports,将我们的通信ports做一个逻辑上的与其他ECU相连的操作
- Atomic SWCs层级中,只能在Cfg中配置,同时不需要Delegation Ports
配置
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入门到精通系列讲解

浙公网安备 33010602011771号