autosar学习笔记

AutoSAR是一种汽车电子控制单元的开放系统架构,旨在简化软件开发和复用。其主要分为应用软件层、实时运行环境和基础软件层。应用软件层包括SWC,通过RTE进行通信;RTE提供跨ECU的通信管理;BSW则包含了硬件抽象层、通信功能和存储功能等。文章详细阐述了各层次的组件、接口类型和通信过程。
摘要由CSDN通过智能技术生成

第一章 AutoSAR概述

1 什么是AutoSAR?

AUTOSAR 是AUTomotive Open System ARchitecture的简称,是一款汽车开放系统架构。
他将汽车电子控制单元(ECU)的软件做了标准的封装,使同一套底层软件能够匹配不同的硬件合应用层软件。

2 使用AutoSAR优势?

  1. 缩短开发周期,提高开发效率
  2. 使得代码重用性大大增加
  3. 使得多人同时开发变成较容易的事、同时维护方便
  4. 有图形界面配置工具(比如DaVinci),不需要手写代码,生成的代码质量有保证

3、autosar架构

AutoSAR主要分为3个层级:
1、应用软件层 (AppL):存放我们自己的代码的地方 ,由一个一个SWC组成的,每个SWC咱们可以理解为一个.c文件。
主要的组成就分下面三部分:

  1. 应用软件组件(SWC) :
  2. AutoSAR接口(Ports)和连接器(Connector)
  3. 可运行实体(Runnable)
    2、实时运行环境(RTE):提供应用层所需的资源,同时将应用层和底层隔离。
    3、基础软件层(BSW):将硬件做封装,一直封装到一个标准的操作系统的状态,以便上层可以标准化调用系统服务。
    主要的组成就分下面私部分:
  4. 硬件抽象层(MCAL):将芯片的寄存器操作都封装成一个AutoSAR规定的统一的库API。
  5. ECU抽象层:将硬件上所有硬件都进行了封装。
  6. 服务层:实现RTOS工作,使用ECU抽象层API,再对上层暴露出服务接口。
  7. 复杂驱动(CDD):将AutoSAR未定义的一些功能封装起来,方便应用层提供接口来调用这些功能。

4、DaVinci(Vector)工具链

1、Matlab:用Simulink生成应用层软件
2、DaVinci Developer:设计应用层的程序架构
3、DaVinci Configurator pro:生成RTE、配置BSE。
4、EB Tresos: 主要用来配置MCAL的,可以兼容英飞凌和恩智浦的芯片

第二章 应用软件层

1、应用软件组件(SWC)

1.1 SWC的类型(以后Atomic SWC都简称为SWC)

1.原子级的SWC(Atomic SWC):对应一个.c文件,runnable是其中的函数,SWC中的是最小单元,每个SWC的功能基本都是用来实现特定的算法。
2.集合级的SWC(Composition SWC):将功能相近或者需要整合到一处方便观看的SWC(Atomic SWCC)利用一个component SWC包含起来。
3.特殊的SWC:实际上,需要添加代码的不止是应用层的SWC。在BSW中,IO硬件抽象层(IoHwAb)和复杂驱动(Cdd)都是需要手动添加代 的,而这两个地方也可以算作是SWC,在DaVinci Developer中都是可以作为SWC进行配置和加runnable等操作的。因此,我们将其算成是特殊的SWC来看待。

1.2 SWC的通信

  1. 片内就是通过RTE通信。前面章节说了,一个SWC可以理解为一个.c文件,那么c文件间怎么通信呢------全局变量。所以大家可以把ECU内部 SWC的通信暂时先想象成全局变量.
  2. 片外就通过片外总线通信(一般汽车上都是CAN Bus).

2、AutoSAR接口(Ports)和连接器(Connector)

采用Autosar中文指导手册

2.1 Ports

2.1.1 分类一:按方向分

1、R-Ports(需求接口):接收信息
2、P-Ports(提供接口):提供信息
3、PR-Ports(需求且提供接口):可使用于SWC内部的信息和提供,AUTOSAR4.0以后定义。

2.2.2 分类二:按行为分

(1)Send/Receiver(S/R)接口

作用:传输数据;

通信数据类型:可以传输基础数据类型(int,float等)和复杂数据类型(record,array等);

通信方式: 可实现1:n 或者 n。
① 直接访问:
Std_ReturnType Rte_Read_port_data (OUT DataType *data) ;
Std_ReturnType Rte_Write_port_data (IN DataType data) ;
RTE直接访问数据地址、适用于实时性高的数据;

②使用缓存访问:
DataType Rte_IRead_r_p_d (void) ;
void Rte_IWrite_r_p_d (IN DataType data) ;
在进入runnable之前RTE为数据建立副本,在runnable运行结束之后RTE把副本数据拷贝到实际数据地址;
适用于有一致性要求的数据组,在runnable运行过程中只操作副本,实际数据不会改变。

③使用队列访问:
Std_ReturnType Rte_Receive_p_d (OUT DataType *data) ;
Std_ReturnType Rte_Send_p_d (IN DataType data) ;
通过(event)事件查询接收或等待接收;
RTE从队列中读取数据,等待接收有超时处理;
通信模式
(1)显式:
在这里插入图片描述

(2)隐式:
在这里插入图片描述

(2)Client/Server(C/S)接口

例子:
*1、假如我们的被调函数是:
*Std_ReturnType RunnableServer(int param)
2、那我们的客户中应该写的调用函数就是:
Std_ReturnType Rte_Call_RunnableServer(int *param)
3、执行下面的函数后就能将参数返回回来了
Std_ReturnType Rte_Result
_RunnableServer(int param)

作用:来执行操作,即客户调用服务端操作的接口,用于函数调用关系。比如我想要调用一个函数,这个函数在其他的C文件中,就让RTE帮忙调用。
通信方式:可实现1:1 或 n:1 ;
服务器是操作的提供者,多个客户端可以调用同一个操作,但同一个客户端不能调用多个操作;
一个接口可以提供多个操作,就是一个接口可以包含很多函数;
引用相同类型的端口才可以进行交互;
通信模式
同步:相当于函数直接插入上下文运行,在这里插入图片描述
异步:相当于让函数在另一个线程中运行,运行完了再返回,原上下文依然运行在这里插入图片描述

(3)跨ECU的访问方式

1、在使用 Rte_Write_port_Data() 这样的函数;
2、走runnable( ECU1) ->RTE (ECU1) ->BSW (ECU1) ->外部总线->BSW (ECU2)->RTE (ECU2) ->runnable (ECU2)
列出两个用于COM传输的API:
Com_SendSignal()
Com_ReceiveSignal()

2.2.3 分类三:按标准分

1、AutoSAR 接口
特征:接口的函数名都是可以改变的,但大体的形式是不变的,注:S/R和C/S接口就是AutoSAR接口
如:Std_ReturnType Rte_Read_port_data (DataType *data) ,其中的 port 和data 就是用户自己配置的名字。
位置:SWC<>RTE、RTE<>CDD、RTE<>ECU AB
2、标准接口
特征:函数名是固定不变的,是AutoSAR规定好的C语言API。
如:Com_SendSignal() 、WaitEvent() 。
位置:RTE<>OS、RTE<>COM、OS<>Services、OS<>Com、OS<>ECU AB、ECU AB<>MCAL.

3、标准AutoSAR 接口
特征:官方规定好的C/S、S/R接口,函数名不变。
位置:RTE<>Services

3、可运行实体(Runnable)

Runnable就是SWC中的函数,而在AutoSAR架构在被DaVinci软件生成的时候,Runnable是空函数,需要手动添加代码来实现其实际的功能。
Runnable是需要OS中的Task做载体的,runnable的运行条件由RTE提供,不能由OS直接提供.
Runnable可以被触发,比如被定时器触发、被操作调用触发或者被接受数据触发等。
Runnables的触发条件 :
初始化事件:初始化自动触发
定时器事件:给一个周期定时器,时间到了就触发
接收数据事件(S/R):Receiver Port 一旦收到数据,就触发
接收数据错误事件(S/R)
数据发送完成事件(S/R):Send Port 发送完成,就触发
操作调用事件(C/S):当调用到了该函数的时候
异步服务返回事件(C/S):之前说过C/S可以在异步下运行,就是说当我调用一个Server函数,但是我是异步调用的。那么该被掉函数作为一个
线程和当前的运行程序并行运行,当被调函数运行结束返回(Return)的时候,这时触发异步服务返回事件
模式切换事件
模式切换应答事件

第三章、实时运行环境(RTE)

概述:把BSW比作我们的windows系统,AppL就是开发的应用软件,而RTE更像是一个虚拟机,将上层应用和底层操作系统隔绝开的同时,又兼容了不同厂商开发的软件。
像一个快递中转站或者说是电话接线员(就是上个世界那种要先打电话到接线员那里,然后通过接线员转接电话线到目的地),其作用就是将一个SWC的信息通过RTE连接到其他SWC或者BSW上。
作用:
1、提供跨ECU / ECU内部 的通信管理。
2、作为VFB(虚拟功能总线)的具体实现,在Vector的工具链中,RTE是自动生成的。
3、作为S/R接口的通信实现
4、作为C/S接口的通信实现
5、ECU内部通信/跨ECU(通过COM)
6、实现AR-COM的回调功能,具体实现是在SWC中完成的,RTE负责完成这个回调机制
7、提供对runnable的管理功能(触发、唤醒等,简单说就是runnable需要映射到Task上运行嘛,而这个映射就是通过RTE具体实现的)。

第四章、基础软件层(BSW)

摘用Autosar中文指导手册

1、 I/O功能

摘用Autosar中文指导手册

I/O Signal Interface: 对输入数据的初步处理,比如输入消抖.
Driver for ext ADC ASIC: 外置ADC的驱动.
Driver for ext. I/O ASIC:外置I/O 的驱动.
SPI Handler: SPI处理驱动,将硬件中的SPI封装成API供上层调用(有的使用的是I2C,这里就不单独列出来了,大家把图中的SPI改成I2C就行了).
ADC PWM DIO: MCAL中的驱动,将硬件中的ADC、PWM、DIO分别封装成API供上层调用 .
SPI ADC PWM DIO(Hardware): 就是指芯片中的这些功能模块

2、 通信功能

(1)COM:

从应用层传下来数据首先就进入这里,应用层无需关心收发的数据是通过什么总线传输的,应用只需要将它传输给COM即可。这些收发的数据是由用户的DBC文件或者ARXML文件已经定义好了的(这些文件一般OEM整车厂在整车设计的时候就做出来了,里面有总线的网络拓扑图,每个传输的数据应该走什么总线都有定义,所以应用层是无需关心的,只需要优雅的将数据和COM交换即可)。同样,COM上传的数据也是很单纯的数据,里面没有这个数据是什么总线上传的这样无意义的信息,应用层关心的是这个数据的实际意义和数据大小。所以COM主要就起了一个信号接口和网关的作用 .
PDU Router: PDU------Protocol Data Unit,协议数据单元。这个模块的功能就是将COM下发的信号数据分配到相应的协议总线上去;或者将不同的协议变成同一信号上传给COM。
IPDU Mux: 用于解析一些特殊的协议,比如CAN FD或者用户自定义的一些协议。就是起了一个统一CAN ID,不同信号Layout的作用。
CAN Tp:分包数据传输与错误检测,一般来说只有在诊断的时候才会使用
CAN Interface: 与硬件已经无关了,与硬件相关的是下面两个Driver做的工作,这个Interface主要可以配置收发队列;组帧(FlexRay);管理时间触发总线的调度表(LIN, FlexRay)
CAN Driver: 就是MCAL中对主芯片上CAN模块的驱动封装
Trcv Driver: Trcv------Transceiver的缩写,就是收发器驱动的意思。如果是外置CAN收发器,这里就要用到Trcv Driver这个驱动,而非CAN Driver。

(2)发送流程

  1. 应用层Send一个数据进COM
  2. COM写信号进PDU Buffer中
  3. PDU被PDU
    Router立刻发送或按周期发送(每个PDU都有一个独立的ID),之后PDU Router辨认总线种类,并把PDU发向不同的下级模块
  4. Interface根据不同的通道,把报文写入不同的队列
  5. Driver根据报文的优先级立刻发送报文

(3)接收流程

中断或者循环接收(这里假设为中断):

  1. 硬件接收报文
  2. 由Driver发出Rx中断(函数),之后通过RxIndication,数据被传递到Interface
  3. 传递到PDU Router
  4. 传递到COM(如果SWCs使用Data ReceptionTrigger,就通知RTE;否则暂存到Buffer中)
  5. 信号被RTE读取,然后应用层读取

3、 存储功能

(1)NVRAM Manager: 简称NVM,是应用层访问非易失性数据的唯一接口,提供非易失数据的管理服务。这里是统一按块编写的,不关心是哪种存储类型;写完后有回调函数通知Memory bstraction,然后再通知NVM。
(2)Memory Abstraction Interface: 主要作用是将需要读写的信息解耦,分别分派给EEPROM或FLASH
(3)EEPROM Abstraction: EEPROM的抽象层,主要作用就是进一步封装片外或片内EEPROM驱动,给上层提供统一的API接口 。(Flash EEPROM Emulation: 同理,此为Flash )
(4)External E² Drv: ECU抽象层中片外EEPROM的驱动,下面是SPI的驱动,由于片外的EEPROM要通过SPI通信才能访问。因此,片外EEPROM的驱动要放到 ECU抽象层中。 (Ext Fls Drv: 同理,此为Flash )
(5)SPI Handler Drv: MCAL中对片上SPI的驱动
(6)EEPROM Drv: MCAL中对片上EEPROM的驱动
(7)Flash Drv: MCAL中对片上FLASH的驱动
(8)SPI EEPROM FLASH: 片内的SPI、EEPROM和FLASH功能模块
(9)External E² Memory: 片外EEPROM,就是板载的EEPROM,需要通过SPI访问。
(10)External flash Memory: 片外Flash,就是板载的Flash,需要通过SPI访问。

4、模式管理功能

(1)、ECU State Manager(EcuM): ECU状态机,主要作用是管理的是ECU的上下电功能(还包括休眠、重启等)。
官方手册给出了具体有以下四个功能:
①. 单片机初始化时,初始化OS所需的BSW模块
②. 为单片机的休眠(Sleep)模式和唤醒(wake up)模式做准备
③. 执行关机命令和重启命令
④. 通过唤醒验证协议验证已发生的唤醒
(2)、Basic Software Mode Manager(BswM): 主要作用是定义一系列规则。一旦满足规则,就执行相应的动作。
主要有Communication Control、Ecu State Handing和Module Initialization,而这些都是软件自动生成的。如果要自己添加规则,可以在Miscellaneous中添加(一般自动生成就好)
(3)、Communication Manager(ComM): 主要功能是管理通信的启用和关闭
(4)、Network Management(Nm If, Bus NM): 主要功能是保持总线唤醒和协调总线关闭 。
(5)、Bus State Manager(Bus SM): 切换Bus的状态,比如CAN SM是切换该CAN的启动和关闭 。

5、看门狗功能

(1)WdgM: 为应用层提供安全相关的服务
(2)WdgIf: 看门狗接口,主要功能是触发硬件看门狗
(3)Wdg Drv: Mcal中看门狗的驱动

6、诊断功能

(1)FIM: Function Inhibition Manager,功能禁止管理。也就是当一些error出现的时候,禁止一些功能。比如当检测到控制器过电流的时候,关闭MOS或IGBT,防止炸管。 就是说有一部分SWC是需要使能条件的,这些条件取决于故障内容(就是来源于下面的DEM中),而FIM负责根据故障内容关闭一些SWC或执行一些SWC。
(2)DEM: Diagnostic Event Manager,诊断事件管理。就是用来记录和存储诊断事件的,下面连接NVRAM Manager,就是将这些诊断事件记录到EEP或者Flash中
(3)DCM: Diagnostic Communication Manager,诊断通信管理。实现诊断通信协议,我们通常说的UDS协议(即ISO14229,是Unified Diagnostic Services,统一诊断服务,是诊断服务的规范化标准,比如读取故障码应该向ecu发什么指令,读数据流又是发什么指令),就是在这里配置的。

第五章AUTOSAR运行流程

1. AUTOSAR 系统启动流程(Vector例子)

(1)、执行Os_InitMemory() 初始化OS参数(OS使用到的变量等);
(2)、执行Os_Init() 初始化OS参数(变量,OS中断控制器,MPU等);
(3)、执行EcuM_Init() 初始化部分硬件模块(Port,Dio,Adc…);
(4)、执行EcuM_StartOS() 启动OS;
(5)、再OS开始执行后Task_Init() 会首先被调用. 执行EcuM_StartupTwo() ,此函数会调用BswM_Init() 来初始化其他硬件模块(CAN/LIN/NVM…);
(6)、再BswM_Init() 函数最后执行Rte_Start() 用于启动所有任务。

参考文章

《Autosar中文指导手册》

1.背景 2 2.技术驱动因素 2 3.AP的特点 3 4.经典、自适应和非AUTOSAR ECU的集成 4 1.逻辑视图 5 2.物理视图 7 3.方法论和Manifest 8 5.应用设计 10 6.执行Manifest 10 7.服务Instance Manifest 11 1.概述 11 3.调度 12 4.内存管理 12 5.设备管理 12 1.概览 12 2.系统启动 12 3.执行管理责任 13 4.确定性执行 13 5.资源限制 14 6.应用程序恢复 14 7.受信任的平台 15 1) 可以要求将功能组设置为专用状态 16 2)(部分)网络可被要求取消/激活 16 3) 可以要求机器关闭或重新启动 16 4) 其他自适应(平台)应用程序的行为可能会受到影响 16 5) 可以执行项目特定的动作 16 1.概述 20 2.架构 20 3.组件 20 1.概述 21 2.诊断通信子集群 22 3.事件存储子集群 23 1.概述 25 2.设计 26 3.架构 26 1.网络管理算法概述 26 2.架构 27  图1 NM概述 27 1.术语 40 2.IAM框架的范围和重点 41 3.AUTOSAR规范的内容 41 4.IAM框架的体系结构 ①一般框架 42 (1) 使用加密的密钥或密钥句柄进行操作 46 (2) 尽管可能会损害应用程序安全地管理密钥 46 (3) 限制应用程序对键的访问和允许的操作 46  API扩展说明 47 2.架构 47 1.Safety概述 48 2.信息交换保护(E2E保护) 49 3.平台健康管理 49 Core Types定义了多个功能集群作为其公共 interface 的一部分使用的通用类和功能。定义Core Types的理由之一是包括 Interface 定义中经常使用的常见复杂数据类型。 52 1.错误处理 52 2.高级数据类型 53 3.全局初始化和关闭功能 53
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

提升自我,勇闯天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值