Autosar MCAL软件架构基本概念
MCAL架构介绍
Autosar整体架构图如下所示:
MCAL是MicroController Abstraction Layer(微控制器抽象层)的缩写。如下图所示,MCAL位于AUTOSAR软件架构中基本软件(Basic Software,BSW)的底层,是可以直接访问MCU寄存器和内部外设的底层驱动。这样划分的目的是使上层软件(如ECU抽象层、系统服务层等)独立于MCU硬件平台,保证上层软件的标准化和通用性。
AUTOSAR规范根据MCU底层驱动功能的相似性,把MCAL抽象为4个驱动组,分别是微控制器驱动组(Microcontroller DriversGroup)、存储器驱动组(Memory Drivers Group)、通信驱动组(Communication Drivers Group)、输入/输出驱动组(I/O DriversGroup)。将结构示意图更进一步划分,如下图所示。
Microcontroller驱动组
Microcontroller驱动组完成MCU内核及其外设的配置,主要包括MCU驱动(MCU)、看门狗驱动(Watch Dog,WDG)、通用定时器驱动(General Purpose Timers,GPT)。
1.GPT驱动
GPT驱动初始化、控制MCU内部的通用定时器,用来产生一次性(One-shot)或者连续性(Continuous)的定时通知。GPT驱动通常为操作系统(OS)提供定时服务,或者当OS Alarm负担过重时为BSW其他模块提供定时服务。
2.WDG驱动
WDG驱动控制MCU内部看门狗定时器,提供触发功能和模式选择服务。AUTOSAR规范定义了3种模式:Fast Mode(快速模式)、Slow Mode(慢速模式)、OFF Mode(关闭模式)。
3.MCU驱动
MCU驱动提供微控制器初始化、断电、重启等基本功能,以及MCAL其他驱动模块所需的特殊函数。MCU驱动特性如下:
- 初始化MCU时钟、PLL、分频器、时钟树分配等;
- 初始化RAM;
- 设置MCU低功耗模式;
- 设置MCU重启模式;
- 提供硬件复位源查询。
Memory驱动组
Memory驱动组提供对片上存储器(内部Flash、内部EEPROM等)的初始化和控制功能,主要包括内部Flash驱动(FLS)、内部EEPROM驱动(EEP)。
1.FLS驱动
FLS驱动提供读、写、擦除Flash存储器服务,并且当底层硬件支持写/擦除保护时,FLS驱动提供设置该保护机制的配置接口。通常在ECU的应用程序中,FLS驱动仅在Flash模拟EEPROM时使用,把数据写到Flash存储器中。
2.EEP驱动
EEP驱动除提供读、写、擦除EEPROM服务之外,还提供把EEPROM中的数据块和内存(如RAM)存储的数据块进行比较的功能。
Communication驱动组
Communication驱动组提供对ECU板载通信外设的(如SPI等)的初始化和控制功能,以及对汽车网络的通信外设(如CAN等)的初始化和控制功能,主要包括SPI驱动(SPI)、LIN驱动(LIN)、CAN驱动(CAN)、FlexRay驱动(FR)、以太网驱动(ETH)。
1.SPI驱动
SPI驱动提供配置片上SPI外设、通过SPI总线从外部器件读取数据、写入数据到外部器件的服务。除此之外,SPI驱动还提供访问一些特殊SPI器件(如EEPROM、看门狗、I/O专用芯片等)的服务,SPI驱动访问片外器件驱动的调用关系示意如下。
2.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函数供上层软件调用。
3.CAN驱动
与LIN驱动类似,CAN驱动直接访问MCU硬件模块,提供独立的API函数供上层软件调用。AUTOSAR MCAL规范定义由上层的CAN接口(CAN Interface)模块访问CAN驱动。CAN驱动提供控制CAN控制器行为和状态机等服务。另外,独立于硬件本身,CAN驱动还提供发起CAN通信、调用上层CAN接口回调函数进行事件通知等服务。
4.FlexRay驱动(FR驱动)
芯片厂商根据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。
5.以太网驱动(ETH驱动)
在整个以太网协议栈中,ETH驱动的主要任务是给上层模块提供独立于硬件的接口—以太网接口(EthIf)。这个独立于硬件的接口对于所有的以太网控制器(MAC)都是统一的,因此,上层以太网接口以统一行为方式访问底层硬件。以太网驱动提供了对以太网控制器的初始化、设置和数据传输等功能。
一个以太网驱动可以支持多个以太网控制器,但这些以太网控制器必须为同一种硬件实现类型。如下图所示,每个以太网驱动都被分配唯一的前缀,以太网接口通过这些命名规则来访问不同的以太网控制器。
I/O驱动组
I/O驱动组完成MCU片上以下输入/输出模块的驱动:端口控制(PORT)驱动、数字I/O引脚(DIO)驱动、模数转换(ADC)驱动、PWM驱动、输入捕获(ICU)驱动、输出比较(OCU)驱动。
1.PORT驱动
PORT驱动实现片上端口配置和引脚复用的功能,提供配置和初始化MCU所有端口/引脚的服务。例如,将引脚功能配置为通用I/O、ADC、SPI等。
2.DIO驱动
作为DIO驱动使用的引脚首先需要在PORT驱动中配置和初始化,然后才能使用DIO驱动读/写引脚上的逻辑状态。
3.ADC驱动
ADC驱动实现初始化、控制MCU内部的ADC模块的功能,可以使能触发源发起模数转换,以及关闭触发源停止模数转换。此外,ADC驱动提供通知机制(Notification)查询模数转换的状态和结果。
4.PWM驱动
PWM驱动提供MCU芯片内部PWM模块初始化和控制的功能。PWM驱动中定义的PWM通道,都与MCU内部模块的PWM硬件通道对应。PWM驱动能产生可变脉宽的脉冲信号,支持设置占空比和周期。但是,AUTOSAR MCAL规范并未对PWM类型(中心对称PWM、左边对称PWM等)做出规定,PWM类型是由驱动提供商的具体实现方案决定的。
5.ICU驱动
ICU驱动完成MCU内部输入捕获模块的功能,用于解调PWM信号、脉冲计数、测量信号周期和占空比、产生普通中断和唤醒中断等。ICU驱动提供如下服务: 信号边沿检测、产生相应通知; 唤醒中断控制; 周期信号测量; 信号边沿时间戳(用于非周期信号); 边沿计数。
6.OCU驱动
一些MCU并没有专门的OCU驱动,是利用通用计数器完成输出比较功能的。OCU驱动完成MCU内部输出比较模块的初始化和控制的功能。OCU驱动中定义的软件通道,与MCU内部的输出比较硬件通道对应。当通用计数器的值与预设阈值匹配时,OCU驱动自动做出相应动作。
在AUTOSAR MCAL规范中,并没有规定OCU驱动的硬件架构,只定义了参数和用户接口函数,因此,OCU驱动可以用于任何适合的硬件平台。OCU驱动提供如下服务:开始、停止通用计数器比较;设置比较阈值;使能、关闭通知机制;获取通用计数器当前值;改变输出引脚电平状态;触发其他硬件资源(ADC、DMA等)。
更多推荐
所有评论(0)