MCAL存在的意义?

MCAL(Micro-Comtroller Abstraction Layer)微控制器抽象层
AutoSAR软件架构大家都不陌生,陌生了看下图再熟悉一下。
image.png
对于我这种搞嵌入式出身的,比较喜欢硬件相关的东西,也喜欢从根子上去抛,从下往上看,距离硬件最近的就是-微控制器抽象层,也就是MCAL了。
image.png
但是单纯的配置微控制器(芯片)的相关外设,这和使用CubeMAX配置32也没啥区别啊,为啥这就是AutoSAR了呢?
其实你要真这么理解也没错,本质上确实没啥区别,都是对芯片外设的相关配置。
但区别在于——规范!!
你按照AutoSAR规范,使用相关配置软件(EB),配置出来的MCAL,生成的代码能够用在汽车上,甚至说哪一天你想要更换硬件了,上面的应用层与系统层都不用改,只改自己就行。
等于说BSW,或者MCAL一个人承担了所有!

MCAL长什么样?

一句话,长得很条理清晰。如下所示红框标出来的部分:
image.png
知道大家都不喜欢看英文,所以我这还有中文的,希望有一天我能看上用中文来描述的属于中国人的汽车软件架构。
image.png
从上图可以看出来,MCAL麾下是有四大天王的!
微控制器驱动组、存储器驱动组、通信驱动组、输入输出驱动组。

四大驱动组

Microcontraller驱动组

Microcontraller驱动组主要负责完成MCU的内核及其外设的相关配置,也是大家在做项目时,需要最先配置的东西。
image.png
当然一个组织下肯定不是只有一个人,一定是有着众多的驱动外设。

MCU驱动

负责微控制器的初始化、断电、重启等基本的功能。
最重要的比如我们的MCU时钟、PLL、分频器、时钟树也是这里配置。
image.png
还有一些工作模式什么的,这里不细说了,太多。

WDG驱动

顾名思义,大家都不陌生,看门狗!
各种触发,各种模式选择。一般情况下很少用到,我接触少,暂时还没遇到。

GPT驱动

这个就重要了!通用定时器驱动!
定时器是一个多么强大的外设,没人不清楚
image.png

Memory驱动组

主要负责对片上存储器(内部的Flah、内部的EEPROM)的初始化和控制功能。
image.png

FLS驱动

对Flash进行读、写、擦除,保护机制等。

EEP驱动

读、写、擦除,与内存RAM的数据进行比较。

Communication驱动组

对ECU板载通信外设的初始化以及控制。
SPI、CAN、LIN、FlexRay、以太网……
很多不详述了

I/O驱动组

和引脚功能配置有关的都需要。
Port,端口配置,引脚复用;
DIO,没实际作用,主要是对Port配置过的端口进行命名或者连接;
ADC,初始化、控制,触发源,查询机制
PWM,初始化,通道选择,设置占空比、周期
ICU,输入捕获,信号的边沿检测、对PWM进行解调,测量占空比和周期,唤醒中断,边沿计数
OCU,输出比较,用计数器来实现,设置比较的阈值……

MCAL配置完到底是什么?

其实你配置完成,最后生成的.c.h文件,可以简单地理解成32标准函数库里面的库函数
如下图所示:
image.png
是一个配置完成之后生成的代码,IO驱动组——PWM驱动——PWM初始化函数
也就是各种符合AutoSAR规范的API接口函数
这么一看好像也挺好理解的。

总结

如果详细来讲,每一个驱动组下的每一个驱动都是一个大的课题,细节太多,有机会咱单独拿出来分享。