深入理解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等)。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 深入理解Autosar MCAL软件架构基本概念

    发表评论