Autosar软件架构平台工具链

Autosar软件架构平台工具链

  1. AUTOSAR整体架构

应用软件层(Application Layer):执行用户应用层代码的地方【具体功能的实现。例如:制动控制、车身控制、点火控制、刹车控制、天气等等】。

实时运行环境层(Runtime Environment):提供应用层所需要的一些资源,同时将应用层和底层分离【管理和调度SWC。做SWC与BSW之间的映射】。

基础软件层(Basic Software Layer):这一层从图中就可以看出,比其它几层都庞大,它主要是将对硬件的操作封装成统一AutoSAR标准的接口,供上层系统调用,需要将其封装到一个标准操作系统的状态才行【枚举了所有可能用到的所有基本功能】。

AUTOSAR分层架构模型中,最重要且最复杂的是基础软件层 (Basic Software LayerBSW) ,将基础软件层进一步细化后,又分为微控制器抽象层(Microcontroller Abstraction LayerMCALECU抽象层(ECU Abstraction Layer服务层(Services Layer复杂驱动(Complex Drivers。其中,微控制器抽象层(Microcontroller Abstraction LayerMCAL)位于AUTOSAR分层模型中BSW的最底层

2、BSW基础软件层

2.1 什么是BSW

BSW层全称为Basic Software (基础软件层),顾名思义,该层主要是为应用层提供基础服务。

BSW 主要提供了:看门狗服务,存储服务,通信和诊断服务,OS服务,I/O 功能,BswM 和 EcuM 等模式管理功能:

(1)看门狗服务:提供看门狗功能,检测MCU,当MCU挂死的时候可以进行复位重启。

(2)存储服务:提供读写数据到 EEPROM的功能。 通信和诊断服务:提供 Can、Lin、Eth 等通信和诊断功能。

(3)I/O 功能:提供通用GPIO读写功能,ADC、PWM等特殊 Port 外设功能。

(4)OS 服务:提供基础OS服务,任务周期运行、调度等功能。

(5)BswM:管理整个Bsw的模块。

(6)EcuM:管理 Ecu上下电等功能。

2.2 BSW概述

BSW按照层级结构可以分为服务层、ECU抽象层、硬件抽象层(MCAL)和复杂驱动层(CDD)。

(1)微控制器(硬件)抽象层(MCAL)

主要包含了相关的Driver,通过该层次可以访问MCU的资源,比如访问整个芯片的CAN,LIN等控制器,配置MCU的Port脚,配置MCU的时钟等。主要包含下面的内容: MCU,PORT,DIO,ADC,SPI,CAN,LIN,FLEXRAY,PWM,ICU,OCU等。

(2)ECU抽象层

底层驱动的抽象,同时它也是外设的驱动,它提供了可以访问外设和底层MCU的接口,该层次主要包含了下面的内容:CanIf,Can Transceiver Driver, MemIf, Fee, Ea, External Flash/EEPROM Driver, WdgIf等。

(3)服务层

包含操作系统的功能、车辆网络通信管理服务、存储器服务(NVRAM管理)、诊断服务(包括UDS通信、错误存储和故障处理)、ECU状态管理,模式管理、逻辑和时间程序流监控(Wdg管理器)、密码服务(密码服务管理)、调度管理(Schedule Manager)。

(4)复杂驱动

跨越于微控制器硬件层和RTE之间,其主要任务是整合具有特殊目的且不能用MCAL进行配置的非标准功能模块,将该部分功能嵌入到AUTOSAR基础软件层中,从而实现处理复杂传感器以及执行器的特定功能和时间要求。复杂驱动程序跟单片机和ECU硬件紧密相关。其上层程序接口是根据AUTOSAR指定并且实施的;其下层程序接口受标准接口程序的限制。复杂驱动可以使用特定的中断或是复杂的微控制器外设(如PCP/TPU)来直接访问微控制器,从而实现对复杂传感器的评估和执行器的控制,比如喷油控制,电磁阀控制,增量位置检测等。

2.3 详细描述

2.3.1 I/O功能

功能包括了DIO(数字输入输出)、ADC和PWM等:

1I/O Signal Interface 对输入数据的初步处理,比如输入去抖等

2Driver for ext. ADC ASIC 外置ADC的驱动,比如当有外部ADC采样芯片的时候,通过SPI通信,将数据传入主芯片

3Driver for ext. I/O ASIC 同上,只不过这里是I/O

4SPI Handler SPI处理驱动,将硬件中的SPI封装成API供上层调用

5ADC PWM DIO MCAL中的驱动,将硬件中的ADCPWMDIO分别封装成API供上层调用

6SPI ADC PWM DIOHardware): 就是指芯片中的这些功能模块

实际流程实例:

Adc_ReadGroup:是MCAL对上层开放的API函数,Read到的是ADC采样值(比如12位精度最大就是4095
Get_SensorValueIoHwAb中的一个服务函数,主要作用就是通过ADC采样值计算出实际的传感器阻值(多少欧姆)。Sensor SWCIoHwAb是通过C/S接口相连,可以通过Rte_Call_Get_(port)_SensorValue调用
Send_Temperature:将欧姆值计算成实际的温度值,再传递给App SWC

2.3.2 Communication功能(通信功能)

1COM:主要就起了一个信号接口和网关的作用。从应用层传下来数据首先就进入这里,应用层无需关心收发的数据是通过什么总线传输的,只需要将它传输给COM即可

2PDU Router PDU——Protocol Data Unit,协议数据单元。这个模块的功能就是将COM下发的信号数据分配到相应的协议总线上去;或者将不同的协议变成同一信号上传给COM

3IPDU Mux:用于解析一些特殊的协议,比如CAN FD或者用户自定义的一些协议。就是起了一个统一CAN ID,不同信号Layout的作用

4CAN Tp:分包数据传输与错误检测,一般来说只有在诊断的时候才会使用

5CAN Interface:主要配置收发队列;组帧(FlexRay);管理时间触发总线的调度表(LIN, FlexRay)

6CAN DriverMCAL中对主芯片上CAN模块的驱动封装

7Trcv DriverTransceiver driver,收发器驱动

通信流程:

发送流程:

1)应用层Send一个数据进COM

2COM写信号进PDU Buffer

3PDUPDU Router立刻发送或按周期发送(每个PDU都有一个独立的ID),之后PDU Router辨认总线种类,并把PDU发向不同的下级模块

4Interface根据不同的通道,把报文写入不同的队列

5Driver根据报文的优先级立刻发送报文

接收流程:

1)硬件接收报文

2)由Driver发出Rx中断(函数),之后通过RxIndication,数据被传递到Interface

3)传递到PDU Router

4)传递到COM(如果SWCs使用Data ReceptionTrigger,就通知RTE;否则暂存到Buffer中)

5)信号被RTE读取,然后应用层读取

2.3.3 Memory功能(存储功能)

1)ROM存储方式

EEPROM:可以按位操作

FLASH仿EEPROM:相同大小容量下Flash相对便宜一些,但是只能按块擦写,不能按位擦写。想要让Flash做到按位擦写,就需要先将Flash原来的数据备份一份,再修改其中想要修改的位,再按块擦除,最后将改写好的数据再烧录回原块中

而存储可以是片内的,也可以是片外的

2)详细说明

NVRAM Manager
a.应用层访问非易失性数据的唯一接口,提供非易失数据的管理服务
b.NVM模块上层是RTE,下层是对接Flash Driver或者EEPROM Driver的接口
c.NVM里面的数据读写有两种同步机制:Implicit synchronization(隐式同步)和Explicit synchronization(显式同步)

Memory Abstraction Interface:主要作用是将需要读写的信息解耦,分别分派给EEPROMFLASH

EEPROM AbstractionEA):EEPROM的抽象层,主要作用就是进一步封装片外或片内EEPROM驱动,给上层提供统一的API接口

Flash EEPROM Emulation 同上,此为Flash

External E² DrvECU抽象层中片外EEPROM的驱动,下面是SPI的驱动,由于片外的EEPROM要通过SPI通信才能访问。因此,片外EEPROM的驱动要放到ECU抽象层中

SPI Handler DrvMCAL中对片上SPI的驱动

SPI EEPROM FLASH:片内的SPIEEPROMFLASH功能模块

External E² Memory:片外EEPROM,就是板载的EEPROM,需要通过SPI访问

流程:

片内存储                              

   片外存储

  

2.3.4 Watchdog功能(看门狗功能)

WdgM: 为应用层提供安全相关的服务

WdgIf: 看门狗接口,主要功能是触发硬件看门狗

Wdg Drv: Mcal中看门狗的驱动

2.3.5 Diagnostics功能(诊断功能)

一般故障处理过程,如ECU故障发生了,要将故障的内容记录到EEP或者Flash中,communication模块把故障信息传输到CAN或者LIN上,故障发生后需要对故障功能做出应急处理

1FIM

Function Inhibition Manager,功能禁止管理,当一些error出现的时候,禁止一些功能。比如当检测到控制器过电流的时候,关闭MOSIGBT,防止炸管

2DEM

Diagnostic Event Manager,诊断事件管理。就是用来记录和存储诊断事件的,下面连接NVRAM Manager,就是将这些诊断事件记录到EEP或者Flash

3DCM

Diagnostic Communication Manager,诊断通信管理。实现诊断通信协议,我们通常说的UDS协议(即ISO14229,是Unified Diagnostic Services,统一诊断服务,是诊断服务的规范化标准

流程:

1)对故障做出快速响应的功能:
首先由应用层传输数据到DEMDEM判断出是哪个故障,之后发送给FIMFIM立即做出判断,通过回调函数通知SWC或者轮询的方式禁止SW

2)将故障记录的功能:
故障由应用层传输数据到DEMDEM一边是发送给FIM,另一边是发送给NVRAM Manager,然后将故障记录到EEP或者Flash中,方便以后维修诊断

2.3.6 AutoSAR OS(AutoSAR OS操作系统)

OS可以配置为四个等级:SC1、SC2、SC3、SC4 (SC:Scalability Classes,可伸缩的类型)

1)SC1:

包含标准OSEK OS标准,除此之外还定义了标准的计数器接口和轮询式的调度表

(2)SC2

SC2= SC1 + 时间保护。也就是说,当一个任务执行时间过长,它会被停止;SC2同时还定义了时间监控。防止因为一个任务时间过长而影响其他任务的实时性

(3)SC3:

SC3 = SC1 + 内存保护。针对未经授权访问安全相关软件组件的内存区域的防护

(4)SC4:

SC4 = SC1 + 时间保护 + 内存保护 = SC2 | SC3

2.3.7 Mode Management功能(模式管理功能)

模式管理,可以理解为对状态的管理(比如ECU的上电、下电和休眠;CAN通讯的开启和关闭都是状态)。主要管理的对象有ECU、BSW和COM(通信中又可以细分很多)

(1)ECU State Manager(EcuM)
ECU状态机,主要作用是管理的是ECU的上下电功能(还包括休眠、重启等)。
具体有以下四个功能:

1)单片机初始化时,初始化OS所需的BSW模块

2)为单片机的休眠(Sleep)模式和唤醒(wake up)模式做准备

3)执行关机命令和重启命令

4)通过唤醒验证协议验证已发生的唤醒

(2)Basic Software Mode Manager(BswM):
主要作用是定义一系列规则。一旦满足规则,就执行相应的动作。主要有Communication Control、Ecu State Handing和Module Initialization

(3)Communication Manager(ComM):

主要功能是管理通信的启用和关闭

(4)Network Management(Nm If, Bus NM):

主要功能是保持总线唤醒和协调总线关闭

(5)Bus State Manager(Bus SM):

切换Bus的状态,比如CAN SM是切换该CAN的启动和关闭(注意把CAN和COM区分开,COM更高一层,COM不光包含CAN)

3MACL微控制器抽象层

3.1 MACL微控制器抽象层划分

微控制器抽象层(Microcontroller Abstraction LayerMCAL)又可分为:

1)微控制器驱动(Microcontroller Drivers

2)存储器驱动(Memory Drivers

3)通信驱动(Communication Drivers

4I/O驱动(I/O Drivers

各个部分又由具体的与微控制器硬件对应的驱动模块组成。

3.2 MCAL模块的详细介绍

3.2.1 微控制器驱动(Microcontroller Drivers)

(1)通用定时器驱动-GPT驱动(General Purpose Driver,GPT Driver)

该模块使用通用定时器单元的硬件定时器通道,为操作系统或者其他基础软件模块提供计时功能。以达到启动和停止硬件定时器、得到定时器数值、控制时间触发的中断、控制时间触发的中断唤醒的作用。

GPT驱动初始化、控制MCU内部的通用定时器,用来产生一次性(One-shot)或者连续性(Continuous)的定时通知。GPT驱动通常为操作系统(OS)提供定时服务,或者当OS Alarm负担过重时为BSW其他模块提供定时服务。

(2)看门狗驱动-WDG驱动(Watchdog Driver,WDG Driver)

该模块主要功能是初始化和触发看门狗,包括内部WDG Driver 和外部WDG Driver。

WDG驱动控制MCU内部看门狗定时器,提供触发功能和模式选择服务。AUTOSAR规范定义了3种模式:Fast Mode(快速模式)、Slow Mode(慢速模式)、OFF Mode(关闭模式)。

(3)微控制器单元驱动-MCU驱动(Microcontroller Unit Driver,MCU Driver)

该模块可以直接访问微控制器硬件,主要功能是初始化、休眠、复位微控制器以及提供其他MCAL软件模块所需的与微控制器相关的特殊功能。

MCU驱动提供微控制器初始化、断电、重启等基本功能,以及MCAL其他驱动模块所需的特殊函数。MCU驱动特性如下:

  • 初始化MCU时钟、PLL、分频器、时钟树分配等;
  • 初始化RAM;
  • 设置MCU低功耗模式;
  • 设置MCU重启模式;
  • 提供硬件复位源查询。

(4)内核测试(Core Test)

该模块包含周期性测试和启动测试,可以对CPU的所有寄存器进行测试,提供中断控制和异常检测。

3.2.2 存储器驱动(Memory Drivers)

(1)内部EEPROM驱动-EEP驱动

可提供对内部EEPROM进行初始化和读、写、擦除的服务。

EEP驱动除提供读、写、擦除EEPROM服务之外,还提供把EEPROM中的数据块和内存(如RAM)存储的数据块进行比较的功能。

(2)内部Flash驱动-FLS驱动

为初始化和读、写、擦除内部Flash内存提供服务。

FLS驱动提供读、写、擦除Flash存储器服务,并且当底层硬件支持写/擦除保护时,FLS驱动提供设置该保护机制的配置接口。通常在ECU的应用程序中,FLS驱动仅在Flash模拟EEPROM时使用,把数据写到Flash存储器中。

(3)RAM测试

通过软件对RAM存储进行测试,包含后台测试和前台测试。

(4)Flash测试

提供算法来测试诸如数据/程序闪存、程序SRAM等非易失性存储器。

3.2.3 通信驱动(Communication Drivers)

(1)以太网(Ethernet)驱动

为以太网提供统一的接口,对所使用的以太网控制器的硬件特性进行抽象。

在整个以太网协议栈中,ETH驱动的主要任务是给上层模块提供独立于硬件的接口—以太网接口(EthIf)。这个独立于硬件的接口对于所有的以太网控制器(MAC)都是统一的,因此,上层以太网接口以统一行为方式访问底层硬件。以太网驱动提供了对以太网控制器的初始化、设置和数据传输等功能。

一个以太网驱动可以支持多个以太网控制器,但这些以太网控制器必须为同一种硬件实现类型。如下图所示,每个以太网驱动都被分配唯一的前缀,以太网接口通过这些命名规则来访问不同的以太网控制器。

(2)SPI驱动

提供了对通过SPI总线连接的设备进⾏读写的服务、对多个用户(如EEPROM、Watchdog)的SPI通信访问和配置⽚SPI外围设备所需的机制。

SPI驱动提供配置片上SPI外设、通过SPI总线从外部器件读取数据、写入数据到外部器件的服务。除此之外,SPI驱动还提供访问一些特殊SPI器件(如EEPROM、看门狗、I/O专用芯片等)的服务,SPI驱动访问片外器件驱动的调用关系示意如下。

(3)FlexRay驱动-FR驱动

用来抽象不同的FlexRay通信控制器及其硬件相关的特性。FlexRay控制器的所有⽀持特性都封装在FlexRay驱动模块中,并且只能通过这个统⼀的接⼝访问。

芯片厂商根据FlexRay协议标准设计了FlexRay通信控制器(FlexRay Communication Controller,FlexRay CC),而FR驱动则抽象了FlexRay CC的硬件实现,也就是说FlexRay CC的特性都被囊括在了FR驱动中。对FlexRay CC一系列的访问被抽象成了统一的接口(API),上层软件模块只能通过这些接口来访问FlexRay CC。一个FR驱动可以支持多个FlexRay CC,但这些FlexRay CC必须为同一种硬件实现类型。作为FR驱动的调用者,FlexRay接口(FlexRay Interface,FrIf)模块与底层FlexRay CC完全独立,而且FR驱动中没有主要功能函数(Main-Function)和中断服务函数(ISR),所有FR驱动的API函数仅在FrIf模块中运行。每个FR驱动都被分配唯一的前缀,FrIf模块通过这些命名规则来访问不同的FlexRay CC。

(4)LIN驱动

微控制器抽象层(MCAL)的⼀部分,可执⾏硬件访问,并向上层提供与硬件⽆关的API,唯⼀能访问LIN驱动程序的上层是LIN接⼝。

LIN驱动只适用于主节点应用(Master Mode),从节点应用(Slave Mode)并没有在LIN驱动中实现,在AUTOSAR MCAL规范中,LIN驱动主节点的行为均符合LIN 2.1协议标准,不影响LIN总线的行为逻辑,因此,可以和当前任何LIN驱动从节点通信。另外,LIN驱动适用于SCI/UART硬件模块或者完整的LIN控制器,并不适用于软件模拟UART的实现方式。

LIN驱动直接访问MCU硬件模块,支持在同一个LIN硬件模块里的多通道LIN通信,提供独立的API函数供上层软件调用。

(5)CAN驱动

针对微控制器内部的CAN控制器,可以实现对CAN控制器进行初始化、发送和接收报文、对报文的数据和功能进行通知(对接收报文的指示、对发送报文的确认)、溢出和错误处理及唤醒检测功能。

与LIN驱动类似,CAN驱动直接访问MCU硬件模块,提供独立的API函数供上层软件调用。AUTOSAR MCAL规范定义由上层的CAN接口(CAN Interface)模块访问CAN驱动。CAN驱动提供控制CAN控制器行为和状态机等服务。另外,独立于硬件本身,CAN驱动还提供发起CAN通信、调用上层CAN接口回调函数进行事件通知等服务。

3.2.4 I/O驱动(I/O Drivers)

(1)PORT驱动

对微控制器的整个PORT模块进行初始化配置,许多端⼝和端⼝引脚可以分配到各种功能,如通用I/0(General Purpose I/O)、模数转换(ADC)、脉宽调制(PWM)等功能。

PORT驱动实现片上端口配置和引脚复用的功能,提供配置和初始化MCU所有端口/引脚的服务。例如,将引脚功能配置为通用I/OADCSPI等。

(2)DIO驱动

通过DIO通道(DI channel)、DIO端口(DIO port)以及DIO通道组(DIO channel)提供读写服务。

作为DIO驱动使用的引脚首先需要在PORT驱动中配置和初始化,然后才能使用DIO驱动读/写引脚上的逻辑状态。

(3)ADC驱动

该模块初始化和控制微控制器内部的模拟数字转换器单元,提供启动和停⽌转换的服务,以启⽤和禁⽤转换的触发器源。

ADC驱动实现初始化、控制MCU内部的ADC模块的功能,可以使能触发源发起模数转换,以及关闭触发源停止模数转换。此外,ADC驱动提供通知机制(Notification)查询模数转换的状态和结果。

(4)PWM驱动

为微控制器PWM模块提供初始化和控制服务,可生成周期和占空比都可变的脉冲。

PWM驱动提供MCU芯片内部PWM模块初始化和控制的功能。PWM驱动中定义的PWM通道,都与MCU内部模块的PWM硬件通道对应。PWM驱动能产生可变脉宽的脉冲信号,支持设置占空比和周期。但是,AUTOSAR MCAL规范并未对PWM类型(中心对称PWM、左边对称PWM等)做出规定,PWM类型是由驱动提供商的具体实现方案决定的。

(5)ICU驱动

控制微控制器的输入捕获单元(Input Capture Unit),可提供信号边沿检测及通知、中断唤醒、周期性信号时间的测量、边沿时间戳捕获、边沿/脉冲计数服务。

ICU驱动完成MCU内部输入捕获模块的功能,用于解调PWM信号、脉冲计数、测量信号周期和占空比、产生普通中断和唤醒中断等。ICU驱动提供如下服务: 信号边沿检测、产生相应通知; 唤醒中断控制; 周期信号测量; 信号边沿时间戳(用于非周期信号); 边沿计数。

(6)OCU驱动

对输出⽐较单元(Output Compare Unit)进⾏配置,为微控制器内部OCU外设的初始化和控制提供服务。

一些MCU并没有专门的OCU驱动,是利用通用计数器完成输出比较功能的。OCU驱动完成MCU内部输出比较模块的初始化和控制的功能。OCU驱动中定义的软件通道,与MCU内部的输出比较硬件通道对应。当通用计数器的值与预设阈值匹配时,OCU驱动自动做出相应动作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值