您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
AUTOSAR 通信栈分析
 
 
   次浏览      
 2023-11-24
 
编辑推荐:
本文主要介绍了AUTOSAR 通信栈分析相关知识。希望对你的学习有帮助。
本文来自于微信公众号北京市高级别自动驾驶示范区,由火龙果软件Linda编辑,推荐。

01 通信栈架构概述

相信大多数工程师接触AUTOSAR都是从CAN通信开始点点点,如上图所示,通信栈由通信服务层、通信硬件抽象层以及通信驱动层构成;

具体而言,包括CAN、LIN、FlexRay、Eth的通信,如下图所示:

可以看到,在上图的通信链路出现了I-PDU、N-PDU、L-PDU等等,这些名词是什么意思呢?我们进一步进行分析。

1.1 SDU、PDU及命名规则

1.1.1 SDU、PCI和PDU

AUTOSAR通信栈参考了OSI的7层模型概念:

SDU:全称Service Data Unit

PCI :全称Protocol Control Information

PDU:全称Protocol Data Unit

PDU = PCI | SDU

一般来说,我们最常讨论的就是PDU,为什么不单独把SDU拉出来说呢?因为SDU是针对通信层级来说,抽象一点讲,就是当本层收到上层传来的原始数据之后,需要在本层做处理,那么这个原始数据就叫做SDU,处理添加的信息就叫做PCI;处理完成要发送给下一层,这个时候把PCI和SDU组合成PDU传递给下一层,接收数据是同样的流程。如下图所示:

Layer N收到Layer N+1传来的PDU,这时候在Layer N层,这个PDU就叫做SDU,这个SDU在Layer N层添加完PCI后,发送给Layer N-1层,发送的就是PDU,而Layer N-1接收到是Layer N的PDU,但在它这一层又叫做SDU。换句话说,只有同层级的才能叫SDU。

这个例子最常见就是TP层和IF层之间的通信,如下:

1.1.2 SDU\PDU命名规则

有了上述概念,我们再来看看I\N\L-PDU是什么意思。根据AUTOSAR规范,S\PDU的命名规则均按如下格式:<bus prefix><layer prefix>-PDU。因此,对于AUTOSAR架构,不同层级的PDU命名如下:

根据上表,我们可以把PDU命名规则以图形的方式表达出来,如下

以普通CAN通信为例,其PDU命名如下:

以诊断通信为例,添加了网络层的东西,因此命名如下:

1.2 通信方式

直接数据传输方式

该方式主要用在外部ECU的交流;

以普通CAN报文为例

通常路线为 Com->PduR->CanIf->Can模块

对应API为 PduR_ComTransmit->CanIf_Transmit->Can_Write

数据缓冲方式

该方式主要的用于Lin或者FlexRay通信,在传输时先缓冲要发送的数据,然后根据底层机制如Lin或Fr的静态的周期性的调度表来触发缓冲的数据的传输。

数据转换流程

目前,基于SOA架构的兴起,AUTOSAR也相应作了一些改变,如下:

RTE首先通过SOME/IP转换数据格式,然后再通过E2E进行功能安全级别的封装,最后通过AUTOSAR COM栈进行数据传输。这里面最重要的就是S2S(Signsal to Service Translation),这也是传统控制类ECU与SOA架构下的不同ECU的通信基础。

02 Com层基本概念解析

2.1 基本功能介绍

Com层位域AUTSOA BSW架构中的服务层,主要就是处理信号,为SWC提供信号级别(Signal)的通信数据服务接口,或者根据信号自定义发送类型来发送PDU。

因此这一层提供的API通常是以signal为主,如下:

Com_SendSignal

Com_ReceiveSignal

Com_SendSignalGrou

Com_UpdateShadowSignal

....

2.2 Signal/I-PDU Group

AUTOSAR提供了信号组和PDU组的方式,以满足SWC的复杂数据类型,比如说一个非常复杂的结构体数据量很大,不容易在一个信号里进行封装,但为了保证发送数据的整体原子性,就以信号组的概念来满足。

信号组使用shadow buffer的机制来管理信号数据一致性,RTE或者SWC通过这个shadow buffer去访问信号组里的信号,

如果该buffer需要与I-PDU进行同步,RTE或者SEC可以通过Com_SendSignalGroup\ComReceiveSignalGroup显式地触发同步,这种就是原子级的同步方式。

具体步骤如下:

此外,在I-PDU层级也有PDU Group的概念,RTE或者SWC可以控制针对某些PDU Group的收发禁用,这在首帧NM报文实现上非常有用。 如下图:

2.3 发送模式

在AUTOSAR规范里,报文的发送模式总共可以分为四种,如下表

直接\N次发送和周期发送很好理解,如下图:

混合类型的,就是平时按照周期去发送,如果有事件触发后立即发送,不管此时周期是否到了。

2.4 发送模式选择

有了以上基本概念之后,我们最后来发送模式选择,为什么要定义发送模式的选择呢?主要是I-PDU里包含了不止一个信号,这种发送模式选择就是根据I-PDU里的信号状态来选择发送模式。这里有两个概念,TMC(Transmission Mode Condition)和TMS(Transmission Mode Selector)

AUTOSAR COM模块在发送端使用过滤机制作为TMC,但不会过滤掉发送端的信号。

最终根据TMC的真假从而选择发送模式,这就到我们配置时常见的ComTxModeTrue/False。

整体流程如下:

03 小结

本章内容,我们将通信栈的整体结果做了一个描述,并详细讨论了Com层常用的几个概念,例如发送模式、发送模式选择、信号组和PDU组等,但还有很多细节没有讲,比如说Update Bits、deadline监控、动态长度的信号等等,这需要在项目工程中具体问题具体分析;

在下节内容,我们将继续介绍PduR、以CAN通信为例介绍发送接收流程。

我们了解了通信栈中服务层Com模块的基本功能,对PDU、SDU等做了解析,那么今天就来讲解通信栈的PduR,并以CAN通信栈为例,讲解一下CanNM、CanSM、CanTP是如何协同工作的。

01.PduR概述

PduR全称PDU Router,顾名思义,它在AUTOSAR中负责PDU的路由,向上承接应用模块如DCM\COM等,向下承接接口层如CanIf、LinIf并分发到不同的总线硬件驱动,如下图所示:

对于PduR有多重用法,如下:

1.1 PduR多播功能

如下图所示:

单路由模式

Com层通过PduR将PDU路由到CanIf或者路由到LinIf层

多路由模式

Com层通过PduR将PDU路由到CanIf和LinIf层

1.2 PduR网关路由功能

所谓网关路由,即可以在一个接口层(If层)到另一个接口层(If层),也可以同时传到上层,如Com、DCM等,如下图:

例如,从LinIf接收到数据到PduR,PduR经过配置可以上传到Com,同时也可以路由到CanIf进行传输,实现网关功能。

1.3 PduR和IpduM

除了上述功能,在PduR这一层级还有一个IpduM(I-PDU Multiplexer) ,用于同一个PDU ID的复用,其基本原理如下:

此外,还可以多个PDU组合成一个容器PDU,然后这个容器PDU经由PduR传输出去,这样一帧传的数据就更多了,如下:

02.CAN通信栈介绍

上面讨论了这么多内容,我们还是来看看一个具体示例:以CAN为例,一个比较完整的通信栈包括如下模块:

首先简单介绍下每个模块基本概念,后面具体讲细节

ComM:管理所有通信channel的通信模式,与CanSM、CanNM相关

CanNM:处理网络管理相关问题

CanSM:处理CAN通信栈的状态管理问题

Com:CAN报文信号的拆解组包等

CanTP:诊断PDU的分段

CanIf:对MCU内部CAN的不同驱动进行抽象

Can:实际硬件CAN驱动访问

2.1 ComM、CanSM、CanNM概述

ComM主要是通信状态、网络管理的控制,具体控制框图如下:

具体来讲,主要有以下功能 :

管理每个通信channel的通信模式

协调来自通信请求者的总线通信请求

提供API关闭某些特定信号的发送

唤醒总线

总线错误处理

所谓通信通道,是对 物理通信controller的抽象,每个通道都有自己的通信模式,如下面所示:

简化后的状态机如下:

最开始,状态为No_COM,当被动唤醒或者接收到Full com请求时(做NM报文首发的同学是不是很熟悉)进入到Full COM,在Full COM子状态里,首先进NetReq状态,如果请求一直在,那没问题,待在里面玩吧;如果没有请求了,进Ready Sleep;这里就需要结合CanNM进入到Silent COM或者NO_COM了。

这里还是没有把ComM怎么和CanSM、CanNM联动了,举个例子,当有Full_COM请求

2.2 PDU和HOH

在AUTOSAR中,硬件被抽象成为HOH(Hardware object handles),通常来讲一个HOH表示CAN controller里的一个消息buffer。

CanIF把不同PDU映射到不同的HOH上,如下:

如果当前HOH被占用了,在CanIf层通常也会有一个buffer用于缓存,如下:

2.3 CAN消息TX\RX模式

在CAN的基础配置中,message的处理方式有两种:

中断

在OS中配置相应的ISE

轮询

调度器周期调度Can Mainfunction

除了上述功能,还有如下功能:

TxConfirmation

RxIndication

BusError Handle

WakeUp Hanlde

03.小结

本节内容主要是对CAN通信栈、PduR做了介绍,把ComM如何与CanSM、NM、CanNM协调做了一个概述,下一节将详细介绍NM的状态机。

 
   
次浏览       
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
SysML和EA系统设计与建模 7-26[特惠]
Python、数据分析与机器学习 8-23[特惠]
软件架构设计方法、案例与实践 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
Linux内核编程及设备驱动 7-25[北京]
 
 
最新文章
中央计算的软件定义汽车架构设计方案解析
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
智能汽车车用基础软件的内核和中间件
最新课程
Auto SAR原理与实践
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发(域控模式)
人工智能助力汽车行业升级
基于UML和EA进行系统分析设计
SysML和EA进行系统设计建模
更多...   
成功案例
奇瑞商用车 购买建模工具EA完全版
航空发动机研究院 购买建模工具EA完全版
联创汽车 购买建模工具EA完全版
江淮汽车 购买建模工具EA
更多...