在AUTOSAR的架构中,将其划分为三层,如下:

在RTE以下的,由四个大的components组成,
1. Microcontroller Abstractions Layer : 这一层是基础软件的最底层,主要是包括MCU的外设驱动,比如:ADC,GPT, DIO等等一系列驱动,通常称为MCAL层。这部分的驱动都是由芯片厂商提供。
2. ECU Abstraction Layer :这一层主要负责将MCAL层的驱动接口进行抽象封装,当然也包括除了MCU的驱动接口。这一层负责提供API给更上层模块提供接口来访问MCU的外设驱动以及和MCU的联系。
3. Complex Drivers :复杂驱动,可以看到这一层是直接连接Microcontroller层与RTE的。通常有复杂驱动,比如Rtc,SBC这些复杂驱动,这些是根据实际项目来决定有没有这些功能,不属于AUTOSAR定义的标准模块。因此,AUTOSAR预留出这一层来给用户自己编写这类驱动,然后集成到AUTOSAR的架构中。通常这些复杂驱动都是对时间严格的限制或者是模块移植。
4. Service Layer : 服务层是BSW的最高层,也有提供服务给Application。服务层主要提供的服务有:
a) 操作系统
b) 整车网络通信管理
c) 存储服务
d) 诊断服务,包括UDS服务和错误事件管理
e) ECU状态管理
f) ECU模式管理
g) 看门狗管理
在AUTOSAR中,通常是以Stack为划分标准,比如有ComStack,MemStack和IO Stack等等(在往后的文章会讲解这些Stack),于是将AUTOSAR划分为以下几个Stack:

我们就以这些Stack为单位,简单的介绍一下这些Stack分别涉及到哪些module。
首先是MCAL(微处理器抽象层):
相信只要是接触过嵌入式软件开发的人都清楚,每个MCU都包括许多个外设。在上图,在Microcontroller中,代表MCU所拥有的外设,当然不是所有的MCU都能拥有这里列举的全部外设,这个需要根据具体的MCU来判决。下面我们简单介绍一下每个driver的作用:

首先是I/O Drivers Group:
1. Port Driver:这个是MCU最为普遍的外设之一,每个MCU肯定需要我们去配置每个引脚的属性,比如说,方向是输入还是输出,引脚类型是GPIO还是ADC等等。每个要用到的MCU引脚必须要在Port中有被定义,后续模块才能正常使用。
2. DIO Driver:每个MCU都有引脚作为普通的输入或者输出引脚,这个模块就是把所有要用到的输入输出定义出来,方便上层应用。
3. ADC:这个也是比较普遍的IO口类型,用来将模拟输入转换成数字信号。这个模块主要是配置ADC的通道,转换模式等等。
4. PWM:在某种情况下,可能需要MCU输出一个脉冲,脉冲的占空比可以配置成固定或者变化,周期同样可以配置成固定或者变化,再或者占空比和周期都配置成固定或者可改变,这时候就需要这个模块了。
5. ICU:输入捕获单元,这个主要是用来捕获IO口上边缘变化,包括上升沿和下降沿。可以用来作为信号边沿检查,中断唤醒,边沿或者脉冲计数,边沿时间戳计算。
6. OCU,输出比较单元,当计数器到达设定的阈值是,OCU便会自动开始比较并执行相应的操作,可以用来启动或者禁止某个通道的通知,获取计数器值,或者启动停止输出通道。
Wireless Communication Driver Group:
1. Wireless Ethernet Driver : 无线以太网驱动,主要负责无线网的发送和接收,以及一些错误处理机制,将无线以太网抽象为上层使用。
Communication Drivers Group:
1. Ethernet Driver : 将多个同等的Ethernet控制器抽象,并提供给上层一个独立于硬件接口。其中包括初始化,配置和数据的传输。一个以太网驱动仅能支持一种类型的Ethernet控制器,如下图

2. FlexRay Driver: 将不用的FlexRay通讯控制器以及其硬件特性封装起来给FlexRay interface使用去访问FlexRay硬件。我们需要在这个模块配置数据处理单元,控制指令和信息数据的传输以及接口状态数据的规定
3. Can Driver :Can在汽车上应用是最为广泛,Can驱动是对Can处理器的抽象,主要需要配置波特率,采样点,报完ID,报文ID过滤器,mail box的使用,唤醒检查以及错误处理机制等等
4. Lin Driver :Lin是基于UART/SCI协议演变出来的,属于单线通讯。而Lin驱动就是针对Lin通讯的硬件抽象,给上层提供报文的发送与接受接口,以及唤醒和总线错误处理机制。
5. SPI Handle Driver:也是我们常说的SPI驱动,是MCU每部同步通讯串行接口驱动,可以为不同的设备(EEPROM或者Wdg)提供读写访问服务。而我们需要配置好SPI的模式包括Clock的空闲电平,数据的采样边缘,波特率等基本属性,当然还包括数据的缓冲区以及不同SPI通道的优先级。
今天就先介绍这么多,剩下的一些group请期待小编下次更新。
这些目前的介绍是有点简单或者枯燥,但是个人觉得首先简单了解一下每个模块的功能,对后面实际的配置有很大的帮助,当然如果你已经了解过了不妨再次加深印象。在后续的更新中将会着重针对每个Stack展开详细的介绍。