【AUTOSAR MCAL】MCAL基础与EB tresos工程新建

2023-12-17 09:44

本文主要是介绍【AUTOSAR MCAL】MCAL基础与EB tresos工程新建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章介绍了AUTOSAR MCAL的基础概念,软件架构以及AUTOSAR MCAL规范,拆解介绍了MCAL的相关背景知识。针对特定的芯片平台,文章还介绍了EB tresos工程的新建以及一些常见的tresos操作。

目录

MCAL概述

基本概念

软件架构

AUTOSAR MCAL规范

新建TC3xx EB-tresos工程


MCAL概述

基本概念

MCAL全称为Microcontroller Abstraction Layer,即微控制器抽象层。顾名思义,作为AUTOSAR分层模型中BSW最底层,它包含可以直接访问所有映射到微控制器地址空间的片内外设与核心寄存器。它具有两方面特点,其一是将芯片相关的初始化配置进行统一的管理,可以通过图形界面配置的方式来生成动态代码。其二是实现并预留了符合AUTOSAR规范的接口,方便上层软件以统一的方式对MCAL进行使用。这两方面特点不仅能使以前需要Coding的开发工作转换为配置,提高开发速度,还可以保证上层软件的标准化和通用性。


软件架构

下图是MCAL的基础软件架构,方便我们先做一些初步的了解:

下面对MCAL各部分模块驱动进行分析。首先我们来看微控制器(核心)驱动

  • GPT Driver:GPT(General Purpose Timer)通用定时器驱动模块使用MCU硬件定时器通道,为操作系统或者其他基础软件模块提供计时功能,实现不同周期的任务调用以及操作时间统计等功能。
  • WDG Driver:WDG(Watchdog)驱动程序可以提供不同喂狗周期的初始化配置,并提供超时不喂狗重启(软件崩溃)的功能。
  • MCU Driver:MCU(Micro Controller Unit)驱动程序提供MCU设置、初始化时钟并完成配置电源模式等。

下面我们来看存储器方面的驱动。

  • FLS Driver:FLS (Flash) 驱动程序初始化 FLS并读取/写入FLS。以TC397为例,FLS对DFlash0 Bank完成读取写入擦除等操作。

TC397还有FEE和FlsLoader两部分模块驱动从不同的角度来操作存储器。

下面我们继续来看通信相关的驱动模块。

  • SPI Handler/Driver:SPI(Serial Peripheral Interface)SPI驱动模块是微控制器内部同步串行通信接口的驱动,可以配置数据使用SPI驱动的内部缓冲器,或者是由用户提供的外部缓冲器。可以根据硬件属性来定义SPI任务,然后组成任务序列,以优先级排序的方式来传递数据。
  • LIN Driver:LIN(Local Interconnected network)是基于UART/SCI(Universal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用异步收发器/串行通信接口)的低成本串行通信协议,该模块完成LIN模块初始化以及收发等操作。
  • CAN Driver:CAN驱动主要完成对片内CAN控制器的初始化与使用,完成CANController,CanHardwareObject等配置。
  • FlexRay Driver:FlexRay设备驱动程序初始化FlexRay并执行FlexRay输入/输出。
  • Ethernet Driver:该驱动模块对所使用的以太网控制器的硬件特性进行了抽象,完成以太网初始化以及收发。

最后我们来了解一下I/O相关的驱动。

  • PORT Driver:对芯片的所有I/O口进行初始化,可以配置成通用I/O、模数转换、脉宽调制等功能。对各管脚的具体配置和使用取决于微控制器引脚功能分配。
  • DIO Driver:DIO(Digital Input/Output)驱动对微控制器硬件管脚的访问进行了抽象,驱动输出通用I/O口置位或读出输入通用I/O口。
  • ADC Driver:ADC(Analog Digital Converter)是片内模拟转数字驱动程序。它提供初始化,启动/停止AD转换,设置AD转换结果缓冲区并读取AD转换结果的功能。
  • PWM Driver:PWM驱动为片内PWM模块提供初始化和控制服务,可生成周期和占空比都可变的方波脉冲。
  • ICU Driver:ICU(Input Capture Unit)是微控制器的输入捕获单元。它可以对信号边沿进行检测并通知,它还可以测量PWM波形。

每个微控制器都配备了自己的MCAL软件来访问系统 MCU 的片上外设,点击这里即可访问瑞萨芯片官网下载MCAL,英飞凌则需要在官网提交申请进行下载。


AUTOSAR MCAL规范

AUTOSAR MCAL驱动程序软件规范包含MCAL驱动程序需要满足的所有软件要求(包括静态&动态代码)。主要包括了以下几个部分。

  1. 功能概述:定义模块实现的具体功能,比如定义MCU驱动程序提供基本微控制器初始化、时钟初始化、电源管理模式(低功耗)以及复位等微控制器特定功能。下图说明了MCU驱动规范的范围。

  2. 依赖关系:定义了此模块与其他模块的依赖关系,下图为模块涉及包含的头文件结构图。

  3. 功能规范:定义了包括复位、时钟管理的一般功能规范,还定义了包括错误分类,错误检测,错误通知以及调试支持等一系列功能规范。

  4. API规范:定义了模块包含的数据类型,模块内部的类型定义,函数定义以及预留的接口和API参数检测。下图为Mcu_Init的函数定义。

  5. 功能时序图:定义用户代码与驱动模块完成特定功能的时序,下图为应用代码与MCU驱动模块间为完成MCU初始化功能所经历的时序图。

  6. 配置规范:定义了提供给用户进行初始化以及驱动能力配置选项的规范说明,下图定义了驱动是否提供重启接口的配置选项。

MCAL代码分为静态代码以及动态代码,静态的代码为MCAL的核心代码,其提供符合AUTOSAR MCAL软件规范以及微控制器硬件规范的底层驱动程序,可以支持访问微控制器的片内外设。以TC3xx为例,MC-ISAR_AS422_TC3xx_BASIC_1.40.0\McIsar\Src\Mcal\Tricore目录下包含了BASIC部分的驱动静态代码,每个模块都包含对应的.c与.h文件。他们往往不需要用户进行改动。

MCAL的动态代码是通过代码生成工具生成的,代码生成工具需要输入PDF(Parameter Definition File)文件,这种文件以XML编写,通常为.arxml或者.xdm为后缀,定义了配置参数的描述及其最小值和最大值。下面的XML代码定义了McuPerformResetApi配置项的相关参数。

                    <v:var name="McuPerformResetApi" type="BOOLEAN"><a:a name="DESC"value="Pre-processor switch to enable / disable the use of the function Mcu_PerformReset()TRUE : The function Mcu_PerformReset() is availableFALSE: The function Mcu_PerformReset() not is available"/><a:a name="IMPLEMENTATIONCONFIGCLASS"type="IMPLEMENTATIONCONFIGCLASS"><icc:v vclass="PreCompile">VariantPostBuild</icc:v></a:a><a:a name="POSTBUILDVARIANTVALUE" value="false"/><a:a name="ORIGIN" value="AUTOSAR_ECUC"/><a:a name="SCOPE" value="LOCAL"/><a:a name="SYMBOLICNAMEVALUE" value="false"/><a:a name="UUID"value="ECUC:88316ee4-ac23-418d-a433-20ccecc20da2"/><a:da name="DEFAULT" value="false"/></v:var>

我们一般使用的配置工具是EB-tresos,它导入PDF(选择具体芯片平台)之后能够提供了图形界面(GUI)来供我们进行相关配置,然后最终生成动态代码。

它生成的动态代码包含两个部分,一个部分是与静态代码配合完成底层驱动工作,它们大部分的名称格式为*_PBCfg.c和*_PBCfg.h或者*_Cfg.h。芯片平台会基于Autosar规范,结合硬件平台的实际情况,提供MCAL User Manual以及MCAL Configuration Verification Manual,它们会进一步详细的说明针对此芯片对应的MCAL的方方面面,下图为MCU驱动模块代码文件结构,里边用红色框出的即为动态代码。

EB还会生成以.xdm为后缀的配置文档,保存了当前的配置信息。如下代码所示。

<d:var name="McuPerformResetApi" type="BOOLEAN" value="true"/>

它还生成了以.arxml结尾的ECU描述文件,如果AUTOSAR MCAL驱动程序在不同项目团队中共享,则ECU Desc文件可以充当代码生成工具的输入。下图一份MCAL生成的文件目录。


新建TC3xx EB-tresos工程

首先,使用默认路径或者提前建立好的文件夹路径存放workspace文件。

关闭掉引导文件之后,即可以看到可以看到下图,因为我之前建立(导入)过工程,这里显示了我有两个工程。

选择File-->New-->Configuration Project,建立新的工程。

起一个合法的工程名。

填写ECU_ID以及根据实际情况选择芯片类型,注意勾选Automatically add minimum number of child elements in lists。这样新建的工程会添加一些基本的配置结构,包括Port里各个PIN。

建立好之后就能在Project Explorer中见到我们刚建立好的工程,然后点击选择ECU(CSDN_TC397),右键选择Module Configurations添加驱动模块。

下图添加了MCU模块,选中左边的可选模块中的MCU,然后单击右指的绿色加号摁扭即可完成添加。 删除的的话选中中部已添加的模块,点击右指的红色减号摁扭即可完成删除,最右边可以修改生成代码的路径和使用的xdm文件,如果需要导入已有的模块xdm配置文件,在这里选择点击OK即可。

校验和生成摁扭如下如所示。

如果没有配置项非法或者依赖错误,生成会得到下图。

点击具体的驱动模块,右键可以选择模块使能状态,Disable之后不再生成该模块对应的动态代码。


十六宿舍 原创作品,转载必须标注原文链接。

©2023 Yang Li. All rights reserved.

欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。

这篇关于【AUTOSAR MCAL】MCAL基础与EB tresos工程新建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/503914

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

c++基础版

c++基础版 Windows环境搭建第一个C++程序c++程序运行原理注释常亮字面常亮符号常亮 变量数据类型整型实型常量类型确定char类型字符串布尔类型 控制台输入随机数产生枚举定义数组数组便利 指针基础野指针空指针指针运算动态内存分配 结构体结构体默认值结构体数组结构体指针结构体指针数组函数无返回值函数和void类型地址传递函数传递数组 引用函数引用传参返回指针的正确写法函数返回数组

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是