Autosar软件架构平台工具链
- AUTOSAR整体架构
应用软件层(Application Layer):执行用户应用层代码的地方【具体功能的实现。例如:制动控制、车身控制、点火控制、刹车控制、天气等等】。
实时运行环境层(Runtime Environment):提供应用层所需要的一些资源,同时将应用层和底层分离【管理和调度SWC。做SWC与BSW之间的映射】。
基础软件层(Basic Software Layer):这一层从图中就可以看出,比其它几层都庞大,它主要是将对硬件的操作封装成统一AutoSAR标准的接口,供上层系统调用,需要将其封装到一个标准操作系统的状态才行【枚举了所有可能用到的所有基本功能】。
在AUTOSAR分层架构模型中,最重要且最复杂的是基础软件层 (Basic Software Layer,BSW) ,将基础软件层进一步细化后,又分为微控制器抽象层(Microcontroller Abstraction Layer,MCAL)、ECU抽象层(ECU Abstraction Layer)、服务层(Services Layer)和复杂驱动(Complex Drivers)。其中,微控制器抽象层(Microcontroller Abstraction Layer,MCAL)位于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等:
1)I/O Signal Interface: 对输入数据的初步处理,比如输入去抖等
2)Driver for ext. ADC ASIC: 外置ADC的驱动,比如当有外部ADC采样芯片的时候,通过SPI通信,将数据传入主芯片
3)Driver for ext. I/O ASIC: 同上,只不过这里是I/O
4)SPI Handler: SPI处理驱动,将硬件中的SPI封装成API供上层调用
5)ADC PWM DIO: MCAL中的驱动,将硬件中的ADC、PWM、DIO分别封装成API供上层调用
6)SPI ADC PWM DIO(Hardware): 就是指芯片中的这些功能模块
实际流程实例:
Adc_ReadGroup:是MCAL对上层开放的API函数,Read到的是ADC采样值(比如12位精度最大就是4095)
Get_SensorValue:IoHwAb中的一个服务函数,主要作用就是通过ADC采样值计算出实际的传感器阻值(多少欧姆)。Sensor SWC和IoHwAb是通过C/S接口相连,可以通过Rte_Call_Get_(port)_SensorValue调用
Send_Temperature:将欧姆值计算成实际的温度值,再传递给App SWC
2.3.2 Communication功能(通信功能)
1)COM:主要就起了一个信号接口和网关的作用。从应用层传下来数据首先就进入这里,应用层无需关心收发的数据是通过什么总线传输的,只需要将它传输给COM即可
2)PDU Router: PDU——Protocol Data Unit,协议数据单元。这个模块的功能就是将COM下发的信号数据分配到相应的协议总线上去;或者将不同的协议变成同一信号上传给COM
3)IPDU Mux:用于解析一些特殊的协议,比如CAN FD或者用户自定义的一些协议。就是起了一个统一CAN ID,不同信号Layout的作用
4)CAN Tp:分包数据传输与错误检测,一般来说只有在诊断的时候才会使用
5)CAN Interface:主要配置收发队列;组帧(FlexRay);管理时间触发总线的调度表(LIN, FlexRay)
6)CAN Driver:MCAL中对主芯片上CAN模块的驱动封装
7)Trcv Driver:Transceiver driver,收发器驱动
通信流程:
发送流程:
1)应用层Send一个数据进COM
2)COM写信号进PDU Buffer中
3)PDU被PDU Router立刻发送或按周期发送(每个PDU都有一个独立的ID),之后PDU Router辨认总线种类,并把PDU发向不同的下级模块
4)Interface根据不同的通道,把报文写入不同的队列
5)Driver根据报文的优先级立刻发送报文
接收流程:
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:主要作用是将需要读写的信息解耦,分别分派给EEPROM或FLASH
EEPROM Abstraction(EA):EEPROM的抽象层,主要作用就是进一步封装片外或片内EEPROM驱动,给上层提供统一的API接口
Flash EEPROM Emulation: 同上,此为Flash
External E² Drv:ECU抽象层中片外EEPROM的驱动,下面是SPI的驱动,由于片外的EEPROM要通过SPI通信才能访问。因此,片外EEPROM的驱动要放到ECU抽象层中
SPI Handler Drv:MCAL中对片上SPI的驱动
SPI EEPROM FLASH:片内的SPI、EEPROM和FLASH功能模块
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上,故障发生后需要对故障功能做出应急处理
(1)FIM:
Function Inhibition Manager,功能禁止管理,当一些error出现的时候,禁止一些功能。比如当检测到控制器过电流的时候,关闭MOS或IGBT,防止炸管
(2)DEM:
Diagnostic Event Manager,诊断事件管理。就是用来记录和存储诊断事件的,下面连接NVRAM Manager,就是将这些诊断事件记录到EEP或者Flash中
(3)DCM:
Diagnostic Communication Manager,诊断通信管理。实现诊断通信协议,我们通常说的UDS协议(即ISO14229,是Unified Diagnostic Services,统一诊断服务,是诊断服务的规范化标准
流程:
(1)对故障做出快速响应的功能:
首先由应用层传输数据到DEM,DEM判断出是哪个故障,之后发送给FIM;FIM立即做出判断,通过回调函数通知SWC或者轮询的方式禁止SW
(2)将故障记录的功能:
故障由应用层传输数据到DEM,DEM一边是发送给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)
3、MACL微控制器抽象层
3.1 MACL微控制器抽象层划分
微控制器抽象层(Microcontroller Abstraction Layer,MCAL)又可分为:
(1)微控制器驱动(Microcontroller Drivers)
(2)存储器驱动(Memory Drivers)
(3)通信驱动(Communication Drivers)
(4)I/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/O、ADC、SPI等。
(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驱动自动做出相应动作。