0、前言
随着汽车功能需求日益增加,稳定安全的AUTOSAR分层软件架构逐渐作为一个热词呈现在汽车电子软件开发领域。那么AUTOSAR分层软件架构到底包括了哪些内容?架构之间的是什么关系?本篇博文旨在介绍分层软件架构的概念,不涉及到软件架构的详细设计和动态的软件接口。作为一个AUTOSAR软件开发工程师需要具备有全局视野,先了解顶层设计再找准自己的技术栈,才能更好的在整个架构中理解自己的角色。
1、综述
1.1 AUTOSAR应用范围及拓展性
AUTOSAR,为汽车ECU而生!这些ECU都会有如下共同的特征:
- 与硬件强交互,如传感器,执行器;
- 连接到车辆网络上,像CAN,LIN,FlexRay 或者 以太网;
- 典型的16位/32位微控制器,其通常只有有限的计算能力和内存资源;
- 实时操作系统;
- 从片内/片外的闪存中执行程序指令。
NOTE:在 AUTOSAR 概念中,ECU通常是指一个微控制器加上一些外设和一些软件配置。
AUTOSAR 拓展性:
AUTOSAR 软件架构是总体的方法论:
- 模块是标准的,但功能是可以扩展的;
- 当前架构中不存在的模块,可以集成到复杂驱动模块,即 Complex Drivers,CDD;
- 未来标准模块也会继续拓展。
1.2 架构总体介绍
在前面章节介绍了AUTOSAR的软件架构,在最高的抽象级别上被划分为三层,从上到下依次是:应用层(Application Layer)、运行时环境(Runtime Environment,RTE)、基础软件层(Basic Software,BSW)。
AUTOSAR基础软件层可以进一步划分为四个部分:服务层(Services Layer)、ECU抽象层(ECU Abstraction Layer)、微控制器抽象层(Microcontroller Abstraction Layer)、复杂驱动层(Complex Drivers)。
AUTOSAR基础软件层可以进一步划分为功能组,例如系统服务层、内存和通信服务等。
一、基础软件层,Basic Software Layer:
微控制器抽象层(Microcontroller Abstraction Layer),位于基础软件层的最底层。它主要包含一些内部驱动程序,可以实现对微控制器和外设的直接访问,如内存,通信,I/O接口等。其主要任务,就是制作出一个更高级别的软件层,使其独立于微控制器而存在。这样做的好处是,当平台切换不同的芯片时,软件架构基本上不需要大的改变。
ECU抽象层(ECU Abstraction Layer),为微控制器抽象层提供接口,也会包含了一些外部设备的驱动。它主要负责提供诸多的应用层接口(API),使其被调用时便可以直接访问一些外设和设备,而不去管这些设备的位置(在μC内部/外部)和连接方式(pin脚,或者其它)。其主要任务,就是制作一个更高级别的软件层,使其独立于ECU硬件的布置。这样做的好处是,当平台切换不同的硬件时,比如EE存储,摄像头等,软件架构基本上不需要大的改变。
复杂驱动层(Complex Drivers Layer),范围从硬件跨越到RTE层。其主要任务,是为集成一些特殊功能组件提供可能性,比如设备的驱动:
- 这些驱动未曾出现在AUTOSAR的标准模块;
- 带有非常高的时效性;
- 出于移植目的。
服务层(Services Layer),位于基础软件层的最上层,其主要应用于应用层软件相关的:当访问属于ECU抽象层内的I/O信号时,服务层(Services Layer)主要提供如下功能: - 操作系统功能组件;
- 车辆网络通讯和管理服务;
- 内存服务(NVM管理);
- 诊断服务(包括UDS通讯、错误内存和故障处理);
- ECU状态管理和模式管理;
- 逻辑和临时程序流监控(看门狗管理);
其主要任务是为了应用程序、RTE和基础软件模块提供基础服务。
二、运行时环境,Runtime Environment,RTE:
RTE是为应用层软件提供通讯服务的一层,应用层软件主要为(AUTOSAR软件组件,SWC、传感器/执行器组件)。通过RTE,可以实现AUTOSAR应用组件和其它组件之间的通信。其主要任务,就是将应用层组件独立于特定ECU的映射。
软件架构—服务类型介绍:
- 输入/输出,Input/Output(I/O):访问传感器、执行器和板载外设的标准接口;
- 内存,Memory:访问内/外部内存(非易失性存储)的标准接口;
- 加密,Crypto:对加密原语的标准化访问,包括内部/外部硬件加速器;
- 通讯,Communication:访问:车辆网络系统,ECU车载通信系统,ECU内部软件;
- 车外通讯,Off-board Communication:访问:车到端通信、无线网络系统、ECU车外通讯;
- 系统,System:提供标准化(操作系统,计时器,错误内存)、提供ECU特定服务(ECU状态管理,看门狗)和库函数;
基础软件层模块类型—内部驱动介绍:
内部驱动(驱动包含了控制和访问内部和外部设备的功能),位于微控制器抽象层。而内部设备位于微控制器上,例如:
- 内部EEPROM;
- CAN控制器;
- ADC;
基础软件层模块类型—外部驱动介绍:
外部驱动,位于ECU抽象层,其通过微控制器抽象层来访问外部设备。外部设备位于微控制器之外,比如:
- 外部EEPROM;
- 外部看门狗;
- 外部闪存;
比如:带有SPI接口的外部EEPROM的驱动通过SPI总线的处理程序/驱动程序,来访问外部EEPROM设备。
基础软件层模块类型—接口介绍:
接口模块,Interface (interface module) 包含了从模块中抽象出来的功能,这些功能都被架构性的放置在接口里面。例如,接口模块从特定设备的硬件实现中抽象出来。它可以提供一个通用的API,可以来访问特定类型的设备,与该类型的现有设备的数量无关,与不同设备的硬件实现也无关。
接口不会改变数据的内容。
一般来说,接口位于ECU抽象层。
举例:CAN通信系统的接口提供了一个通用的API,来访问CAN通信网络,这与ECU内部的CAN控制器的数量无关,与硬件实现(片上或片外)也无关。
基础软件层模块类型—处理程序介绍:
处理程序是一个特定的接口,它控制一个或多个客户端对一个或多个驱动程序的并发、多重和异步访问。也就是说,它执行缓冲、排队、仲裁和多路复用。
处理程序不改变数据的内容。
处理程序功能通常包含在驱动程序或接口中(例如SPI HandlerDriver, ADC driver)。
基础软件层模块类型—管理模块介绍:
管理模块为多个客户提供特定的服务。在单纯的处理程序功能不足以从多个客户端抽象的所有情况下,都需要它。
除了处理程序功能之外,管理模块还可以评估、更改或调整数据的内容。
一般来说,接口位于服务层。
案例:NVRAM管理模块,管理着内/外部存储设备(如闪存和EEPROM存储器)的并发访问。它还执行分布式和可靠的数据存储,数据检查,提供默认值等。
软件层—库介绍:
库是服务于某些功能的函数集合,库:
- 可由BSW模块(包括RTE)、SW-Cs、库或集成代码调用;
- 在同一保护环境中的调用者的上下文中运行;
- 只能调用库函数;
- 没有内部状态;
- 不需要任何的初始化;
- 同步,无需等待点;
在AUTOSAR中,指定了如下的库文件:
- 不动点数学;
- 浮动点数学;
- 不动点数据拟合;
- 浮动点数据拟合;
- 扩展函数(如, 64位运算);
- 位扩展;
- 端到端的通信;
- CRC计算;
- 原子性多核安全操作。