一万字解读AUTOSAR
导读:
AUTOSAR旨在改善汽车电子系统软件的更新与交换,同时更方便有效地管理日趋复杂的汽车电子软件系统。AUTOSAR规范的运用使得不同结构的电子控制单元的接口特征标准化,应用软件具备更好的可扩展性以及可移植性,能够实现对现有软件的重用,大大降低了重复性工作,缩短开发周期。本文主要介绍一下内容:
1、AUTOSAR的背景介绍
2、AUTOSAR的分层模型
3、AUTOSAR的方法论
4、AUTOSAR的接口类型
5、AUTOSAR的基础软件层
1
AUTOSAR的背景介绍
1)建立分层的体系架构
2)为应用程序的开发提供方法论
3)制定各种应用接口规范
2
AUTOSAR的分层模型
AUTOSAR软件体系结构包含了完全独立于硬件的应用层(APP)和与硬件相关的基础软件层(BSW),并在两者中间设立了一个运行时环境(RTE),从而使两者分离,形成了一个分层体系架构。RTE是专门为应用软件(AUTOSAR软件组件和/或AUTOSAR传感器/执行器组件)提供通信服务的层。在RTE之上,软件架构风格从“分层”转变为“组件风格”。AUTOSAR软件组件通过RTE与其他组件(内部和/或内部ECU)或服务进行通信。所以,这样的分层结构带来两个最大的好处,一方面,OEM可以专注于开发特定的、有竞争力的应用层软件(位于RTE之上),另一方面,它使OEM所不关心的基础软件层(位于RTE之下)得到标准化。
AUTOSAR的方法论
AUTOSAR设计和开发流程分为三个阶段:系统配置、ECU设计与配置阶段、代码生成阶段。
第一阶段:定义系统配置文件,这是系统设计者或架构师的任务。包括选择硬件和软件组件,定义整个系统的约束条件。AUTOSAR通过使用信息交换格式和模板描述文件来减少初始系统设计时的工作量。系统配置的输入是XML类型的文件,输出是系统配置描述文件,系统配置的主要作用是把软件组件的需求映射到ECU上。
第二阶段:根据系统配置描述文件提取单个ECU资源相关的信息,提取出来的信息生成ECU提取文件。根据这个提取文件对ECU进行配置,例如操作系统任务调度,必要的BSW模块及其配置,运行实体到任务的分配等,从而生成ECU配置描述文件。该描述文件包含了特定ECU的所有信息。
第三阶段:生成代码,是基于ECU配置描述文件指定的配置来产生代码、编译代码,并把相关代码链接起来形成可执行文件。
编写系统配置输入描述文件
在AUTOSAR中,所有的描述文件都是XML类型的文件。系统配置输入文件包含三部分内容:
1)软件组件描述,定义了每个涉及的软件组件的接口内容,如数据类型,端口,接口等。
2)ECU资源描述,定义了每个ECU的资源需求,如处理器、存储器、外围设备、传感器和执行器等。
3)系统约束描述,定义了总线信号,软件组件间的拓扑结构和映射关系。系统配置
系统配置的功能主要是在资源和时序关系的前提下,把软件组件映射到各个ECU上,然后借助系统配置生成器生成系统配置描述文件。这个描述文件包括总线映射之类的所有系统信息以及软件组件与某个ECU的映射关系。提取特定ECU的描述
从系统配置描述文件中提取出与各个ECU相关的系统配置描述信息,提取的信息包括ECU通信矩阵、拓扑结构、映射到该ECU上的所有软件组件,并将这些信息放在各个ECU的提取文件中。ECU配置
ECU配置主要是为该ECU添加必要的信息和数据,如任务调度、必要的基础软件模块及其配置、运行实体及任务分配等,并将结果保存在ECU配置描述文件中,该文件包含了属于特定ECU的所有信息,换言之,ECU上运行的软件可根据这些信息构造出来。生成可执行文件
根据ECU配置描述文件中的配置信息,生成RTE和基础软件配置代码,完成基础软件和软件组件的集成,最终生成ECU的可执行代码。
AUTOSAR的接口类型
AUTOSAR接口是一种与应用相关的接口,与RTE一并生成。基于AUTOSAR接口的端口可以用于软件组件(Software Component,SWC)之间或者软件组件与ECU固件之间(例如复杂驱动)的通信;
标准化AUTOSAR接口是一种特殊的AUTOSAR接口。这些在AUTOSAR规范中定义过的接口被SWC用于访问AUTOSAR BSW模块提供的服务,比如ECU管理模块或者诊断事件管理模块;
标准化接口是AUTOSAR规范中用C语言定义的API。这些接口用于ECU内部BSW模块之间,RTE和操作系统之间或者RTE和COM模块之间;
如图所示,基础软件之间通过标准化接口进行数据通信和操作调用的。故基础软件之间可以相互调用各自的API函数,但是微控制器抽象层只能被ECU抽象层所调用,底层驱动信息通过ECU抽象层传递给服务层使用。
AUTOSAR的基础软件层
微控制器抽象层(MicroController Abstraction Layer,即MCAL),它位于BSW的最底层,包含了跟硬件相关的驱动程序、软件模块与直接访问微控制器内部和外围的设备,可以用来访问内存、通信和I/O等;
ECU抽象层(ECU Abstraction Layer),位于微控制器抽象层之上,对接微控制器抽象层所提供的驱动程序,并同时包含对外部设备的驱动程序,然后负责向上提供统一的访问接口实现对通信、内存或者I/O的访问,从而使得上层模块无须考虑这些资源由微处理器提供还是由外部设备提供;
服务层(Service Layer),提供各种类型的后台服务,例如网络服务、内存管理和总线通信服务等,操作系统就位于这一层。服务层是基础软件的最高层,同时与应用程序也有关联。虽然对I/O信号的访问由ECU抽象层覆盖,但服务层负责提供以下接口:操作系统的功能、车辆网络通信管理服务、存储器服务(NVRAM管理)、诊断服务(包括UDS通信、错误存储和故障处理)、ECU状态管理,模式管理、逻辑和时间程序流监控(Wdg管理器)、密码服务(密码服务管理);
复杂驱动层(Complex Drivers Layer,即CCD),跨越于微控制器硬件层和RTE之间,其主要任务是整合具有特殊目的且不能用MCAL进行配置的非标准功能模块,将该部分功能嵌入到AUTOSAR基础软件层中,从而实现处理复杂传感器以及执行器的特定功能和时间要求,提供集成特殊用途的功能,例如设备驱动程序,在AUTOSAR中未规定的、具有非常高的时间限制或用于迁移等目的;
系统:提供标准化的规定(针对操作系统、定时器以及错误存储器)、ECU特定的服务(ECU状态管理、看门狗管理)和库函数;
内存:对内部和外部的内存(非易失性存储器)的访问入口进行标准化;
通信:对汽车网络系统、ECU通信系统以及ECU内部软件的访问入口进行标准化;
输入/输出:对传感器、执行器以及ECU外设的访问入口进行标准化;
驱动模块Driver
驱动模块包含了控制和使用内部或者外部器件的功能,分为内部驱动和外部驱动。
1)内部驱动
内部器件位于微控制器(单片机)的内部,例如内部EEPROM、内部CAN控制器、内部ADC模块等。
内部驱动程序就是针对单片机内部器件资源的驱动程序,这部分驱动程序属于微控制器抽象层(MCAL)。
2)外部驱动
外部器件是指单片机外部的ECU硬件,比如外部EEPROM、外部看门狗、外部Flash等。外部驱动程序就是针对单片机外部硬件资源的驱动程序,属于ECU抽象层。外部驱动程序需要通过微控制器抽象层(MCAL)驱动程序来实现对外部器件的驱动。这种方法下AUTOSAR也支持嵌入在系统基础芯片(SBCs)中的组件,像收发器以及看门狗等。例如,使用SPI通信接口的外部EEPROM驱动程序是通过SPI总线处理程序来驱动外部EEPROM的。但是有一种例外,对于和内存映射相关的外部器件(如外部Flash存储器),其驱动程序是可以直接对微控制器进行存取访问的,所以这部分驱动程序属于微控制器抽象层(MCAL)。接口模块Interface
接口模块包含了对其次级模块进行抽象的功能,比如对一个特定功能的硬件进行抽象。它提供一个通用的接口函数(API)来访问一种特定的器件类型,且与该类型器件的数目无关,同时也与器件的具体硬件实现无关。
接口模块不会改变数据的内容。一般来说,接口属于ECU抽象层。例如,CAN通信系统的接口模块提供一个通用的接口函数来访问CAN通信网络,并且与ECU上CAN控制器的数目以及硬件实现无关。处理模块Handler
处理模块是一个专用的接口,它控制一个或多个客户端对一个或多个驱动程序进行并行、多重以及异步地访问。也就是说,它起着缓冲、队列、仲裁以及多路复用的功能。同时,处理程序也不会改变数据本身的内容。处理模块通常会并入驱动程序或是接口模块中(如SPIHandlerDriver、ADC Driver等)。管理器Manager
管理器为多重的客户端提供特定的服务。当单纯的处理程序不能满足对多重的客户端进行抽象时,就需要用到管理器来进行处理。除了处理功能外,管理器还可以对数据内容进行评估、改变或是适应数据内容。
一般而言,管理器属于服务层。例如,非易失性随机存储器(NVRAM)的管理器负责对内部或是外部存储设备进行并行的访问,如Flash、EEPROM存储器等。同时,它也可以完成分布式并且可靠的数据存储、数据校验以及默认值的规定等。
下面进行展开解释:
1、微控制器抽象层
1.1、微控制器驱动
1.1.1、GPT Driver
启动和停止硬件定时器;
得到定时器数值;
控制时间触发的中断;
控制时间触发的中断唤醒。
1.1.2、WDG Driver
1.1.3、MCU Driver
1.1.4、Core Test
1.2、存储器驱动
1.2.1、内部EEPROM驱动
1.2.2、内部Flash驱动
1.2.3、RAM测试
1.2.4、Flash测试
1.3、通信驱动
1.3.1、Ethernet驱动
1.3.2、FlexRay驱动
FlexRay控制器的初始化;
配置数据处理单元;
控制指令向通信控制器的传递;
从协议引擎到控制器主接口状态数据的规定;
通信控制器和主处理机之间信息数据的传输。
1.3.3、CAN驱动
对CAN控制器进行初始化;
发送和接收报文;
对报文的数据和功能进行通知(对接收报文的指示、对发送报文的确认);
溢出和错误处理;
唤醒检测;
单个或多个CAN通道;
CAN驱动的多重实例化;
对接收报文的中断/轮询模式;
1.3.4、LIN驱动
LIN硬件的初始化; 调度表的处理; LIN报文的发送(通过标志位和函数接口确认); LIN报文的接收(通过标志位和函数接口指示); 睡眠和唤醒; 协议差错的处理; 报文的超时监测;
1.3.5SPI驱动
选择SPI驱动的功能级别,配置可选择的功能特性;
根据数据用途来定义SPI通道,它们可以是SPI驱动的内部缓冲器,或者是由用户提供的外部缓冲器;
根据硬件属性来定义SPI任务,它们会包含一系列使用这些属性的通道;
最后定义任务序列,以优先级排序的方式来传递数据;
1.4、I/O驱动
1.4.1、PORT驱动
1.4.2、DIO驱动
1.4.3、ADC驱动
1.4.4、PWM驱动
1.4.5、ICU驱动
信号边沿检测及通知;
中断唤醒;
周期性信号时间的测量;
边沿时间戳捕获;
边沿/脉冲计数;
1.4.6OCU驱动
启动或停止输出通道;
设定某个阈值;
启用或禁用某个通道的通知函数;
获取计数器数值;
2、ECU抽象层
2.1、I/O硬件抽象
2.2、存储器硬件抽象
2.3、板载设备抽象
3、服务层
3.1、通信服务
3.1.1、CAN
3.1.2、J1939
J1939通信服务的实施与单片机和ECU硬件无关,它是基于CAN通信的;
AUTOSAR COM、通用网络管理接口(Generic NM Interface)以及诊断通信管理器(Diagnostic Com.Manager)对所有的车辆网络系统都是通用的,并且作为每个ECU的一个实例而存在;
支持在配置阶段未知的动态帧标识符;
J1939网络管理器管控每一个ECU的特定地址分配,但它不支持休眠/唤醒处理以及其他相关的概念,如局部网络等;
提供J1939诊断和请求处理;
3.1.3、 LIN (LIN Master)
3.1.4、Communication Services – LIN Slave
3.1.5、TCP/IP
3.2、存储器服务
3.3、系统服务
其中一些服务是:µC相关的(如操作系统:OS),并可能支持特殊µC功能(如加密服务管理:Crypto Service Manager),部分ECU硬件和应用程序相关(如ECU状态管理器:ECU State Manager)等。