AUTOSAR软件体系结构包含了完全独立于硬件的应用层(Application Layer)和与硬件相关的基础软件层(Basic Software,BSW),并在两者中间设立了一个运行时环境(Run Time Environment),从而使两者分离,形成了一个分层体系架构。一方面,OEM可以专注于开发特定的、有竞争力的应用层软件(位于RTE之上),另一方面,它使OEM所不关心的基础软件层(位于RTE之下)得到标准化。基础软件层(BSW)的结构如下图所示。
如上图所示,基础软件层主要包括四部分:微控制器抽象层(MCAL),ECU抽象层,服务层以及复杂驱动。其中微控制器抽象层包含了跟硬件相关的驱动程序,可以用来访问内存、通信和I/O等;ECU抽象层负责提供统一的访问接口实现对通信、内存或者I/O的访问,从而无须考虑这些资源由微处理器提供还是由外部设备提供;服务层提供各种类型的后台服务,例如网络服务、内存管理和总线通信服务等,操作系统就位于这一层。
AUTOSAR基础软件层主要用于提供基础软件服务,包括标准化的系统功能以及功能接口,并且由一系列的基础服务软件组件构成,包括系统服务、内存服务、通信服务等,如下图所示。
基础软件层的组件及其功能对应如下:
(1)系统:提供标准化的规定(针对操作系统、定时器以及错误存储器)、ECU特定的服务(ECU状态管理、看门狗管理)和库函数;
(2)内存:对内部和外部的内存(非易失性存储器)的访问入口进行标准化;
(3)通信:对汽车网络系统、ECU通信系统以及ECU内部软件的访问入口进行标准化;
(4)输入/输出:对传感器、执行器以及ECU外设的访问入口进行标准化;
同时,基础软件层模块按照类型可以分为驱动模块、接口模块、处理模块以及管理器。
1、驱动模块
驱动模块包含了控制和使用内部或者外部器件的功能,分为内部驱动和外部驱动。
(1)内部驱动
内部器件位于微控制器(单片机)的内部,不如内部EEPROM、内部CAN控制器、内部ADC模块等。
内部驱动程序就是针对单片机内部器件资源的驱动程序,这部分驱动程序属于微控制器抽象层(MCAL)。
(2)外部驱动
外部器件是指单片机外部的ECU硬件,比如外部EEPROM、外部看门狗、外部Flash等。外部驱动程序就是针对单片机外部硬件资源的驱动程序,属于ECU抽象层。外部驱动程序需要通过微控制器抽象层(MCAL)驱动程序来实现对外部器件的驱动。这种方法下AUTOSAR也支持嵌入在系统基础芯片(SBCs)中的组件,像收发器以及看门狗等。例如,使用SPI通信接口的外部EEPROM驱动程序是通过SPI总线处理程序来驱动外部EEPROM的。但是有一种例外,对于和内存映射相关的外部器件(如外部Flash存储器),其驱动程序是可以直接对微控制器进行存取访问的,所以这部分驱动程序属于微控制器抽象层(MCAL)。
2、接口模块
接口模块包含了对其次级模块进行抽象的功能,比如对一个特定功能的硬件进行抽象。它提供一个通用的接口函数(API)来访问一种特定的器件类型,且与该类型器件的数目无关,同时也与器件的具体硬件实现无关。
接口模块不会改变数据的内容。一般来说,接口属于ECU抽象层。例如,CAN通信系统的接口模块提供一个通用的接口函数来访问CAN通信网络,并且与ECU上CAN控制器的数目以及硬件实现无关。
3、处理模块
处理模块是一个专用的接口,它控制一个或多个客户端对一个或多个驱动程序进行并行、多重以及异步地访问。也就是说,它起着缓冲、队列、仲裁以及多路复用的功能。同时,处理程序也不会改变数据本身的内容。处理模块通常会并入驱动程序或是接口模块中(如SPIHandlerDriver、ADC Driver等)。
4、管理器
管理器为多重的客户端提供特定的服务。当单纯的处理程序不能满足对多重的客户端进行抽象时,就需要用到管理器来进行处理。除了处理功能外,管理器还可以对数据内容进行评估、改变或是适应数据内容。
一般而言,管理器属于服务层。例如,非易失性随机存储器(NVRAM)的管理器负责对内部或是外部存储设备进行并行的访问,如Flash、EEPROM存储器等。同时,它也可以完成分布式并且可靠的数据存储、数据校验以及默认值的规定等。