MCAL 架构

目录

一、MCAL架构简介

二、Microncontroller驱动组

2.1 MCU驱动

2.2 WDG驱动

2.3 GPT模式

三、Memory 驱动组

3.1 FLS驱动

3.2 EEP驱动

四、Communication 驱动组

4.1 SPI驱动

4.2 LIN驱动

4.3 CAN驱动

4.4 FlexRay驱动(FR驱动)

4.5 以太网驱动(ETH驱动)

五、I/O驱动组

5.1 PORT驱动

5.2 DIO驱动

5.3 ADC驱动

5.4 PWM驱动

5.5 ICU驱动

5.6 OCU驱动


                       🌈你好呀!我是 程序猿

                   🌌 2024感谢你的陪伴与支持 ~

🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!


一、MCAL架构简介

        MCAL是Micro-Controller Abstraction Layer(微控制器抽象层)的缩写。如下图所示,MCAL位于AUTOSAR软件架构中基本软件(Basic Software,BSW)的底层,是可以直接访问MCU寄存器和内存外设的底层驱动。这样划分的目的是使上层软件(如ECU抽象层、系统服务层等)独立于MCU硬件平台,保证上层软件的标准化和通用性。

AUTOSAR 软件架构

        AUTOSAR规范根据MCU底层驱动功能的相似性,把MCAL抽象为4个驱动组,分别是微控制器驱动组(Microcontroller Drivers Group)、存储器驱动组(Memory Drivers Group)、通信驱动组(Communication Drivers Group)、输入/输出驱动组(I/O Drivers Group)。下图描绘了MCAL这4个驱动组和微控制器内核和外设的映射关系。

MCAL4个驱动组与微控制器内核和外设的映射关系

二、Microncontroller驱动组

        Microncontroller驱动组完成MCU内核及其外设的配置,主要包括MCU驱动(MCU)、看门狗驱动(Watch Dog,WDG)、通用定时器驱动(General Purpose Timers,GPT)。 

2.1 MCU驱动

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

①初始化MCU时钟、PLL、分频器、时钟树分配等;

②初始化RAM;

③设置MCU低功耗模式;

④设置MCU重启模式;

⑤提供硬件复位源查询。

2.2 WDG驱动

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

2.3 GPT模式

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

三、Memory 驱动组

        Memory 驱动组提供对片上存储器(内部Flash、内部EEPROM等)的初始化和控制功能,主要包括内部Flash(FLS)、内部EEPROM驱动(EEP)。

3.1 FLS驱动

        FLS驱动提供读、写、擦除Flash存储器服务,并且当底层硬件支持写、擦除保护时,FLS驱动提供设置该保护机制的配置接口。通常在ECU的应用程序中,FLS驱动仅在Flash模拟EEPROM时使用,把数据写到FLASH存储器中。在应用程序中,FLS驱动不应该写数据到Flash存储器中,这部分功能是在加载引导(Bootloader)时完成的,加载引导不在AUTOSAR规范讨论范畴内。

3.2 EEP驱动

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

四、Communication 驱动组

        Communication驱动组提供对ECU板载通信外设的(如SPI等)的初始化和控制功能,以及对汽车网络的通信外设(如CAN等)的初始化和控制功能,主要包括SPI驱动(SPI)、LIN驱动(LIN)、CAN驱动(CAN)、FlexRay驱动(FR)、以太网驱动(ETH)。

4.1 SPI驱动

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

4.2 LIN驱动

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

        LIN驱动直接访问MCU硬件模块,支持在同一个LIN硬件模块里的多通道LIN通信,提供独立的API函数供上层软件调用。AUTOSAR MCAL规范定义由上层的LIN(LIN Interface)模块访问LIN驱动。如下图所示,使用LIN驱动通信的软件分层架构。

LIN驱动通信软件分层架构

4.3 CAN驱动

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

4.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接口(FlexRay Interface,FrIf)模块与底层FlexRay CC完全独立,而且FR驱动中没有主要功能函数(Main-Function)和中断服务函数(ISR),所有FR驱动的API函数仅在FrIf模块中运行。每个FR驱动都被分配唯一的前缀,FrIf模块通过这些命名规则来访问不同的FlexRay CC。

4.5 以太网驱动(ETH驱动)

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

        一个以太网驱动可以支持多个以太网控制器,但这些以太网控制器必须为同一种硬件实现类型。

五、I/O驱动组

        I/O驱动组万策划给你MCU片上一下输入/输出模块的驱动:端口控制(PORT)驱动、数字I/O引脚(DIO)驱动、模数转换(ADC)驱动、PWM驱动、输入捕获(ICU)驱动、输出比较(OCU)驱动。

5.1 PORT驱动

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

5.2 DIO驱动

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

5.3 ADC驱动

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

5.4 PWM驱动

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

5.5 ICU驱动

        ICU驱动完成MCU内部输入捕获模块的功能,用于调节PWM信号、脉冲计数、测量信号周期和占空比、产生普通中断和唤醒中断等。ICU驱动提供如下服务:

①信号边沿检测、产生相应通知;

②唤醒中断控制;

③周期信号测量;

④信号边沿时间戳(用于非周期信号);

⑤边沿计数。

5.6 OCU驱动

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

        一些MCU并没有专门的OCU驱动,是利用通用计数器完成输出比较功能的。在AUTOSAR MCAL规范中,并没有OCU驱动的硬件架构,只定义了参数和用户接口函数,因此,OCU驱动可以用于任何适合的硬件平台。OCU驱动提供如下服务:

①开始、停止通用计数器比较;

②设置比较阙值;

③使能、关闭通知机制;

④获取通用计数器当前值;

⑤改变输出引脚电平状态;

⑥触发其他硬件资源(ADC、DMA等)。

期待批评指正,共同进步~

  • 33
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿!=程序员

感谢来过,感谢有你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值