存储器驱动
① 内部EEPROM驱动:内部EEPROM驱动提供初始化服务,以及对内部EEPROM的读写、写、擦除等操作。该驱动模块一次只能接受一个任务。
② 内部Flash驱动:内部Flash驱动提供内部Flash初始化服务,以及对内部Flash的读、写、擦除等操作。该驱动还可以将Flash访问代码下载到RAM中,如果需要的话,也可以执行写、擦除操作。
③ RAM测试: RAM测试模块通过软件对RAM存储进行测试。该模块包含后台测试和前台测试。其中,后台测试是异步服务,前台测试是同步服务。
④ Flash测试:flash测试模块提供算法来测试诸如数据/程序闪存、程序SRAM等非易失性存储器,这些存储器可以是集成在微控制器内部的,也可以是外部映射到微控制器的存储器。
■ 微控制器抽象层详解
3. 通信驱动
① Ethernet驱动:Ethernet驱动模块使用以太网驱动层访问某些控制器,对所使用的以太网控制器的硬件特性进行抽象,为上层的以太网使用提供统一的接口。可由由若干个以太网驱动模块复合起来组成。
② FlexRay驱动:FlexRay驱动用来抽象不同的FlexRay通信控制器及其硬件相关的特性。通信控制器的FlexRay协议强制特性经过封装后只能通过统一的API进行访问。API提供了映射到基于实际通信控制器的硬件访问序列的抽象功能操作。因此,使用FlexRay驱动可以保证FlexRay接口独立于硬件。对内部或外部FlexRay通信控制器的驱动来说,需要进行下列处理:
▪ FlexRay控制器的初始化
▪ 配置数据处理单元
▪ 控制指令向通信控制器的传递
▪ 从协议引擎到控制器主接口状态数据的规定
▪ 通信控制器和主处理机之间信息数据的传输
■ 微控制器抽象层详解
3. 通信驱动
③ CAN驱动:CAN驱动针对的是微控制器内部的CAN控制器,CAN驱动是MCAL的一部分,可以执行硬件访问、向上层提供独立于硬件的API,而仅有的能够访问CAN驱动的上层是CAN接口(CAN Interface)。
功能如下:
▪ 对CAN控制器进行初始化
▪ 发送和接收报文
▪ 对报文的数据和功能进行通知
▪ 溢出和错误处理
▪ 唤醒检测
此外,CAN驱动还具有以下特性:
▪ 单个或多个CAN通道
▪ CAN驱动的多重实例化
▪ 对接收报文的中断/轮询模式
■ 微控制器抽象层详解
3. 通信驱动
④ LIN驱动:LIN驱动使用标准的通用异步收发器(UART)或串行通信接口(SPI)进行通信。
该模块可以完成下列任务:
▪ LIN硬件的初始化
▪ 调度表的处理
▪ LIN报文的发送(通过标志位和函数接口确认)
▪ LIN报文的接收(通过标志位和函数接口指示)
▪ 睡眠和唤醒
▪ 协议差错的处理
▪报文的超时监测
LIN驱动也是MCAL的一部分,可以执行硬件访问、向上层提供独立于硬件的API。仅有的能够访问LIN驱动的上层是LIN接口(LIN Interface)。一个LIN驱动可以支持多个通道,但是这些通道要属于同一个LIN硬件单元。
■ 微控制器抽象层详解
3. 通信驱动
⑤ SPI驱动:SPI驱动模块是微控制器内部同步通信串行接口的驱动。SPI驱动为SPI总线上不同的设备(如EEPROM/Watchdog等)提供读写访问服务。一个SPI设备可以被所使用的SPI硬件和相关的片选信号识别。该模块可以在主、从或者主-从模式下运行。
配置SPI驱动应遵循以下步骤:
▪ 选择SPI驱动的功能级别,配置可选择的功能特性
▪ 根据数据用途来定义SPI通道,它们可以是SPI驱动的内部缓冲器,或者是由用户提供的外部缓冲器
▪ 根据硬件属性来定义SPI任务,它们会包含一系列使用这些属性的通道
▪ 最后定义任务序列,以优先级排序的方式来传递数据
■ 微控制器抽象层详解
4. I/O驱动
① PORT驱动:PORT驱动初始化就是对微控制器的整个PORT模块进行初始化配置,很多端口和管脚被分配有多种不同的功能,即可以进行引脚功能复用,比如通用I/O、模数转换、脉宽调制等功能。因此,对PORT必须有一个整体的配置和初始化,对各管脚的具体配置和使用取决于微控制器和ECU的引脚功能分配。
② DIO驱动:DIO驱动对微控制器硬件管脚的访问进行了抽象,除此之外,还可以对管脚进行分组。该模块通过DIO通道、DIO端口以及DIO通道组来读写数据,而且这类操作是同步的。
③ ADC驱动:ADC驱动对微控制器内部模数转换单元进行初始化和控制。它可以提供启动和停止模数转换的服务,分别用来开启和禁用模数转换的触发源。
④ PWM驱动:PWM驱动为微控制器PWM模块提供初始化和控制服务,可生成周期和占空比都可变的脉冲。
■ 微控制器抽象层详解
4. I/O驱动
⑤ ICU驱动:ICU驱动控制的是微控制器的输入捕获单元(Input Capture Unit),有两种模式:正常模式和休眠模式。
ICU驱动可以提供以下服务:
▪ 信号边沿检测及通知
▪ 中断唤醒
▪ 周期性信号时间的测量
▪ 边沿时间戳捕获
▪ 边沿/脉冲计数
⑥ OCU驱动: OCU驱动的作用是对微控制器内部的输出比较单元(Output Compare Unit)进行初始化和控制。当计数器的值到达某个阈值时,OCU模块会自动开始比较并执行相应的操作。
OCU驱动还可以为下列功能提供服务:
▪ 启动或停止输出通道
▪ 设定某个阈值
▪ 启用或禁用某个通道的通知函数
▪ 获取计数器数值
■ 开发工具
下图是AutoSar开发流程阶段及各个阶段可以使用的开发工具。从网上调研情况来看,Vector和EB公司有整套的开发工具链。其中,Vector中的DaVinciDeveloper和DaVinci ConfiguratorPro开发工具使用较为普遍,建议采用Vector公司开发工具链。从开发流程上看,各个开发阶段分别都有各自的开发工具:
1.系统设计阶段即需求开发与系统功能设计,采用PREEvision开发工具;
2.SWC功能软件开发阶段即ECU功能描述,采用DaVinciDeveloper开发工;
3.BSW基础软件及RTE设计,采用DaVinciConfigurator Pro开工具
4.头文件和C代码采用MATLAB·Simulink工具自动生成。
下图展示Vector公司开发AutoSar时所用的功能组件,其中红色字体是Vector工具链中自 带组件。根据需要,暂定需要OS、SYS、DIAG、MEM、COM、CAN、FR、ETH、MCAL组件
■ 开发流程
在自上而下的开发流程中,系统工程师使用架构生成工具(如davinci tool suite)来设计整车ECU网络。当然,工程师也可以使用其他的架构设计工具。架构软件会输出一个XML来描述对应的组件,该文件里包含了组件的一些必要信息比如:runnables,接口,数据类型等等。Matlab软件可以利用架构软件生成的XML文件自动创建Simulink架构模型,里面包含了接口模块以及相应的Autosar相关设置。之后系统工程师就可以在该框架模型的基础上,完善内部的控制模块。(E/E:汽车电子电气架构(Electrical/Electronic Architecture))
■ 方法论
AUTOSAR为汽车电子软件系统开发定义了通用的技术方法,即AUTOSAR方法论。
AUTOSAR方法论描述了从系统底层配置到整个ECU可执行代码的产生过程的设计步骤。AUTOSAR的开发方法是基于虚拟功能总线(VFB)的开发方法。
AUTOSAR设计和开发流程:系统配置->ECU设计与配置阶段->代码生成阶段。
Step1. 定义系统配置文件:这是系统设计者或架构师的任务。包括选择硬件和软件组件,定义整个系统的约束条件。AUTOSAR通过使用信息交换格式和模板描述文件来减少初始系统设计时的工作量。系统配置的输入是ARXML类型的文件,输出是系统配置描述文件,系统配置的主要作用是把软件组件的需求映射到ECU上。
Step2. 根据系统配置描述文件提取单个ECU资源相关的信息,提取出来的信息生成ECU提取文件。根据这个提取文件对ECU进行配置,例如操作系统任务调度,必要的BSW模块及其配置,运行实体到任务的分配等,从而生成ECU配置描述文件。该描述文件包含了特定ECU的所有信息。
Step3. 生成代码,是基于ECU配置描述文件指定的配置来产生代码、编译代码,并把相关代码链接起来形成可执行文件。
■ 方法论
下记AUTOSAR规定的软件开发整个过程:
■ 方法论
下记AUTOSAR规定的软件开发整个过程:
1. 构建系统约束:搭建系统约束其实就是对整个系统做一个系统性的功能性出发,建立一些约束。
这个阶段编写系统配置输入描述文件,需要确定虚拟功能总线中(VFB)有哪些组件,接口、模式、数据类型、软件组件、软件composition 、软件组件约束、以及系统的总线信号。
在AUTOSAR中,所有的描述文件都是XML类型的文件。系统配置输入文件包含三部分内容:
▪ 软件组件描述,定义了每个涉及的软件组件的接口内容,如数据类型,端口,接口等。
▪ ECU资源描述,定义了每个ECU的资源需求,如处理器、存储器、外围设备、传感器和执行器等。
▪ 系统约束描述,定义了总线信号,软件组件间的拓扑结构和映射关系。
■ 方法论
下记AUTOSAR规定的软件开发整个过程:
2. VFB系统配置:在这个阶段需要根据上一个阶段定义的系统约束进行具体的设计。
系统配置的功能主要是在资源和时序关系的前提下,把软件组件映射到各个ECU上,然后借助系统配置生成器生成系统配置描述文件。这个描述文件包括总线映射之类的所有系统信息以及软件组件与某个ECU的映射关系。
▪ 在这个阶段中,所有的swc其实是不知道在哪个ECU中的,因此,所有的软件组件在一块配置。
▪ 具体设计VFB中的每一个软件组件和其中的内部行为、接口定义以及接口中的数据类型;
▪ 在AUTOSAR工具中导入总线信号的约束文件(一般是DBC);
▪ 将组件间的对应接口连接、连接组件接口与相对应的总线信号。
具体输出文件:
▪ SWC组件描述ARXML:这些ARXML中定义了组件的接口内容,比如组件的接口,内部行为、以及接口所用的数据类型。
▪ Composition描述ARXML:这个ARXML定义了组件间接口的连接关系以及组件的集合关系(Composition中包含哪些组件)
▪ ECU资源描述ARXML:定义了每个ECU的资源需求,如处理器、存储器、传感器、执行器。
▪ 系统约束描述:定义了总线信号,组件与总线信号的连接关系。
■ 方法论
下记AUTOSAR规定的软件开发整个过程:
3. 提取相关信息到ECU中:从系统配置描述文件中提取出与各个ECU相关的系统配置描述信息,提取的信息包括ECU通信矩阵、拓扑结构、映射到该ECU上的所有软件组件,并将这些信息放在各个ECU的提取文件中。 包括:总线信息、SWC组件信息、Composition信息。
具体输出文件:ECU提取ARXML
4. 配置BSW:BSW的配置是可以与VFB系统的配置同时进行的。BSW主要配置通信协议栈、存储协议栈,模式管理,ECUM,OS等
具体输出文件:BSW模块描述ARXML
5. ECU配置:ECU配置主要是为该ECU添加必要的信息和数据。分为以下几部分:
▪ 芯片内核分配:需要考虑每个SWC中的运行实体Runnable在芯片中的哪个核运行。
▪ 任务建立:需要给ECU建立相应周期的调度任务。
▪ 任务调度分配:需要将每个SWC中的运行实体分配到相应的调度任务之下。
具体输出文件: RTE配置ARXML
6. RTE与BSW代码生成:根据ECU提取ARXML与ECU配置ARXML可以生成RTE代码。根据BSW模块描述ARXML可以生成BSW代码。