autosar学习笔记

第一章 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学习笔记_第1张图片

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)显式:
autosar学习笔记_第2张图片

(2)隐式:
autosar学习笔记_第3张图片

(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 ;
服务器是操作的提供者,多个客户端可以调用同一个操作,但同一个客户端不能调用多个操作;
一个接口可以提供多个操作,就是一个接口可以包含很多函数;
引用相同类型的端口才可以进行交互;
通信模式
同步:相当于函数直接插入上下文运行,autosar学习笔记_第4张图片
异步:相当于让函数在另一个线程中运行,运行完了再返回,原上下文依然运行autosar学习笔记_第5张图片

(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学习笔记_第6张图片

1、 I/O功能

autosar学习笔记_第7张图片

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中文指导手册》

你可能感兴趣的:(学习,笔记)