AutoSar架构学习笔记

1.AUTOSAR(Automotive Open System Architecture,汽车开放系统架构)是一个针对汽车行业的软件架构标准,旨在提升汽车电子系统的模块化、可扩展性、可重用性和互操作性。AUTOSAR的目标是为汽车电子控制单元(ECU)之间的软件开发提供统一的标准,以支持多种不同的硬件平台和操作系统,并促进供应商间的兼容性。

2.AUTOSAR Classic Platform架构如下图所示:

  • SWC(Application Software Components, 应用软件组件):这些是ECU上运行的实际应用程序,执行车辆功能的核心任务。例如,发动机控制、车辆安全、空调控制等。应用层组件与硬件和其他软件组件之间通过接口进行通信,通常通过AUTOSAR定义的标准接口。

  • RTE(Runtime Environment,运行时环境):RTE是AUTOSAR架构的核心部分,它是软件组件与基础软件层之间的中间件。RTE负责连接不同的应用软件组件,提供统一的通信机制,确保不同软件模块间的互操作性。RTE的作用是将应用软件与底层的硬件和服务隔离开,使得应用软件不依赖于具体的硬件平台和操作系统,增强了软件的可移植性。

  • BSW(Basic Software Layer,基础软件层):该层主要是为应用层提供基础服务,具体又可分为以下几层:

  • Microcontroller Abstraction Layer(微控制器抽象层,MCAL):该层是对MCU芯片的抽象和封装,由于Autosar CP是基于MCU的软件架构,所以该层主要是实现MCU外设驱动)比如I/O驱动、Flash驱动、CAN驱动、看门狗驱动、定时器驱动等等。这一层是需要和硬件打交道的,这一层高度依赖MCU硬件,如果项目换MCU芯片,只需要修改这一层代码适配驱动即可。
  • ECU Abstraction Layer(ECU抽象层):该层是对ECU的抽象和封装,ECU上面除了主芯片MCU,还有很多外围设备,比如外置Flash,外置电源管理芯等。这一层就是实现了整个ECU所有设备的封装。外围设备也是MCU主芯片控制的,这一层会使用到MCAL的接口。作为抽象层,屏蔽了下层驱动实现细节,将统一接口API暴露给上层以实现功能。该层从上层抽象MCAL层,并提供用于访问外部和内部的驱动程序的API。
  • Services Layer(服务层):该层是向应用层提供服务的,这一将底层提供的服务封装起来供应用层使用。比如通信服务、存储服务、os 操作系统服务等。
  • Complex Device Drivers(复杂驱动,CDD):指的是有些模块不适用于Autosar协议栈,通过手写代码自己封装成CDD模块,在项目开发中会经常有一些模块直接作为CDD使用。

3.AUTOSAR Adaptive Platform是面向服务的架构,如下图所示:

4.汽车电子开发流程:下图是标准AUTOSAR流程,OEM从需求生成最终的文件(给到每一个ECU制造厂商)的主要流程。图中流程需要软件工具支持(比如Vector的PREEvision),这样就能自动生成相应的描述文件了。图中绿色箭头的含义是:设计之初,需要反复修改,首先是列需求,通过三种文件描述这些需求:SWC描述文件、系统描述文件、ECU资源文件,然后将这三种文件导入到系统配置编辑工具中,生成系统配置描述文件。该文件就是整车描述文件最后将系统配置描述文件导入到系统配置提取工具中,导出每一个ECU相应的提取文件,该文件就包含每一个ECU需要用到的信息,比如通信矩阵、SWC信息。

上图中各个具体文件的作用是:

  • SWC描述文件:即应用层软件组件描述文件,包含的信息有:描述每个软件组件需要的资源(比如存储、CPU时间等),SWC直接的接口,运行机制

  • 系统约束描述文件:主要是对整车公共资源的描述,包括网络拓扑、通信矩阵、总线波特率、各种协议等

  • ECU资源描述文件:描述每个ECU都需要实现什么功能,系统设计者通过该文件将不同功能的SWC分配到对应的ECU中,例如传感器、执行器、存储器、引脚分配

  • 系统配置描述文件:上面3中文件的汇总

  • ECU提取文件:将系统配置描述文件信息分配给单个ECU,是单个ECU获取属于自己的信息

当供应商获取到OEM厂商提供的单个ECU的配置文件之后,可以进行具体的ECU软件开发,流程如下:

  • EB用来配置Mcal驱动,生成arxml导入到DavinciConfigurator(用来配置操作系统和协议栈)中生成代码。

  • Davinci Developer是用来配置App层框架的(对应AUTOSAR Classic Platform架构中的RTE部分),然后导入到Davinci Configurator中生成代码。

  • Davinci Developer生成的arxml还会给一份到应用工程师(导入到MATLAB)然后通过MATLAB自动生成软件框架,应用工程在里面添加模型代码即可。

  • 做EB、DaVinci Developer、DaVinci Configrator和Simulink工程师可以同步开发,最终集成一下即可。

  • 开发可以从上到下也可以从下到上,就是说可以在Developer中设计好AppL框架导入到Matlab做代码填充,也可以在Matlab中直接搭建好符合AutoSAR规范的代码,然后导出arxml,再导入到Developer中,也能自动生成框架

静态代码:不会改变的源码。动态代码:配置工具配置出来的代码xx_cfg.c、xx_cfg.h。

5.CAN通信:

从图中可以看出,CAN总线通信需要CPU、CAN控制器、CAN收发器参与。从CAN收发器引出两根线CAN_H_CAN_L,所有节点都挂接到这两根线上,就形成了CAN的网络结构。图中有两路CAN总线,带有终端电阻120欧的是高速CAN,没有带终端120欧的是低速容错CAN。

6.高速CAN总线的总线设计如图所示,仅支持总线型拓扑结构,当前汽车领域用的最多的是CAN控制器集成到MCU中,使用外置CAN收发器,也就是图中右边这种设计:

CAN总线信号由CAN_H_CAN_L两根线的差分信号,也就是通过CAN_H和CAN_L的电压差来决定0、1信号。总线规定隐性电平为信号1(即CAN不工作时),显性电平为信号0(即CAN工作时),其中隐形电平的时候CAN_H和CAN_L都为2.5V,此时电压差就是0V,而显性电平的时候CAN_H为3.5V, CAN_L为1.5V,此时电压差就是2V。高速CAN,总线长度最大为40m,也就是当总线长度超过40m之后,总线的速率会受到影响,支线长度(节点和总线之间的距离)最长为0.3米,节点距离长度最大也是40m。

7.低速CAN:低速容错CAN总线信号也是由CAN_H和CAN_L两根线的差分信号,也就是通过CAN_H和CAN_L的电压差来决定0、1信号。总线规定隐形电平为信号1显性电平为信号0。其中隐形电平的时候CAN_H为0V,CAN_L为5V,此时电压差就是-5V,显性电平的时候CAN_H为3.50V,CAN_L为1.5V,此时电压差就是2V。低俗容错CAN除了支持总线型还支持星型。

8.相关概念:

  • ECU(Electronic Control Unit):是电子控制单元的缩写,它是现代汽车、工业自动化、航空航天等领域中广泛使用的电子设备。ECU 主要用于控制和管理车辆或设备的各种电子系统,通过接收来自传感器的信号并执行相应的控制操作来提高设备的性能、可靠性和安全性。

  • OTA(Over-the-Air):是一种无线远程更新技术,主要用于通过无线网络(如Wi-Fi、蜂窝网络、蓝牙等)远程向设备推送软件、固件或配置更新。OTA 更新通常用于智能手机、汽车、物联网设备、嵌入式系统等领域,以便无需物理接触或连接外部设备的情况下,远程升级、修复漏洞、优化性能或增加新功能。

  • OEM(Original Equipment Manufacturer):指的是“原始设备制造商”,即生产原始设备的公司,它设计并制造产品或组件,并将其作为品牌产品的一部分提供给其他公司进行销售。OEM 通常指的是一个制造商生产的产品或部件,最终由另一家公司销售并以其品牌名推出市场。

  • BswM:管理整个BSW的模块

  • EcuM:管理ECU上下电等功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法竞赛之差分进阶——等差数列差分 python

目录 前置知识进入正题实战演练 前置知识 给定区间 [ l, r ],让我们把数组中的[ l, r ] 区间中的每一个数加上c,即 a[ l ] c , a[ l 1 ] c , a[ l 2] c , a[ r ] c; 怎么做?很简单,差分一下即可 还不会的小伙伴点此进入学习 进入正题 …

TDengine 做 Apache SuperSet 数据源

‌Apache Superset‌ 是一个现代的企业级商业智能(BI)Web 应用程序,主要用于数据探索和可视化。它由 Apache 软件基金会支持,是一个开源项目,它拥有活跃的社区和丰富的生态系统。Apache Superset 提供了直观的用户界面…

金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践

导读:中信银行信用卡中心每日新增日志数据 140 亿条(80TB),全量归档日志量超 40PB,早期基于 Elasticsearch 构建的日志云平台,面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此…

虚幻商城 Fab 免费资产自动化入库

文章目录 一、背景二、实现效果展示三、实现自动化入库一、背景 上一次写了个这篇文章 虚幻商城 Quixel 免费资产一键入库,根据这个构想,便决定将范围扩大,使 Fab 商城的所有的免费资产自动化入库,是所有!所有! 上一篇文章是根据下图这部分资产一键入库: 而这篇文章则…

游戏为什么失败?回顾某平庸游戏

1、上周玩了一个老鼠为主角的游戏,某平台喜1送的, 下载了很久而一直没空玩,大约1G,为了清硬盘空间而玩。 也是为了拔掉心中的一根刺,下载了而老是不玩总感觉不舒服。 2、老鼠造型比较写实,看上去就有些讨…

亲测有效!如何快速实现 PostgreSQL 数据迁移到 时序数据库TDengine

小T导读:本篇文章是“2024,我想和 TDengine 谈谈”征文活动的优秀投稿之一,作者从数据库运维的角度出发,分享了利用 TDengine Cloud 提供的迁移工具,从 PostgreSQL 数据库到 TDengine 进行数据迁移的完整实践过程。文章…

C#,入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程

通过本课程的学习,你可以掌握C#编程的重点,享受编程的乐趣。 在本课程之前,你无需具备任何C#的基础知识,只要能操作电脑即可。 不过,希望你的数学不是体育老师教的。好的程序是数理化的实现与模拟。没有较好的数学基础…

Linux探秘坊-------3.开发工具详解(2)

1.动静态库和动静态链接(操作) 静态库是指编译链接时,把库⽂件的代码全部加⼊到可执⾏⽂件中,因此⽣成的⽂件 ⽐较⼤,但在运⾏时也就不再需要库⽂件了。其后缀名⼀般为“.a” 动态库与之相反,在编译链接时并 没有把库⽂件的代码加⼊到可执⾏⽂件中 ,⽽…

电脑开机出现Bitlock怎么办

目录 1.前言 2.产生原因: 1.系统异常关机 2.系统更新错误 3.硬件更换 4.CMOS电池问题 5.出厂设置 6.意外情况 3.解锁步骤: 3.1:记住密钥ID(前6位) 3.2:打开aka.ms/myrecoverykey网址 3.3&#…

C# 的 NLog 库高级进阶

一、引言 在 C# 开发的广袤天地中,日志记录宛如开发者的 “千里眼” 与 “顺风耳”,助力我们洞察应用程序的运行状态,快速定位并解决问题。而 NLog 库,无疑是日志记录领域中的璀璨明星,以其强大的功能、灵活的配置和出…

Avalonia系列文章之小试牛刀

最近有朋友反馈,能否分享一下Avalonia相关的文章,于是就抽空学习了一下,发现Avalonia真的是一款非常不错的UI框架,值得花时间认真学习一下,于是边学习边记录,整理成文,分享给大家,希…

10 为什么系统需要引入分布式、微服务架构

java技术的发展 在java开始流行起来之后,主要服务于企业家应用,例如ERP,CRM等等,这些项目是为企业内部员工使用,我们的思维是怎么用设计模式,如何封装代码。让开发人员关注到业务上去,系统也就那么几十几百…

第6章:Python TDD实例变量私有化探索

写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…

JDK 23 和 JDK 21 的区别

JDK 23 和 JDK 21 的区别主要在于支持周期和功能特性: 支持周期: JDK 23:此版本是一个常规发布版本,支持时间较短,通常是六个月。这种版本适合希望使用最新特性和改进的用户。JDK 21:这是一个长期支持&…

springboot自动配置原理(高低版本比较)spring.factories文件的作用

SpringBootApplication public class SpringSecurityApplication {public static void main(String[] args) {SpringApplication.run(SpringSecurityApplication.class, args);}}注解SpringBootApplication Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Doc…

使用Websocket进行前后端实时通信

1、引入jar&#xff0c;spring-websocket-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2、配置websocket config import org.springframe…

vue2 - Day05 - VueX

Vuex 是 Vue.js 官方的状态管理库。它是一个让你能在应用中集中管理共享状态的工具。当应用的规模逐渐增大&#xff0c;组件之间的数据传递变得越来越复杂时&#xff0c;Vuex 就成为了救星&#xff0c;提供了一个集中式的存储来管理所有的组件状态&#xff0c;并且保证状态以一…

中型项目中 HTTP 的挑战与解决方案

一、引言 在当今数字化时代&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;作为Web应用程序的基础通信协议&#xff0c;在中型项目的开发中扮演着至关重要的角色。它为客户端和服务器之间的数据传输提供了标准规范&#xff0c;使得各种类型的应用&#xff0c;从简单的…

IDEA导入Maven工程不识别pom.xml

0 现象 把阿里 sentinel 项目下载本地后&#xff0c;IDEA 中却没显示 maven 工具栏。 1 右键Maven Projects 点击IDEA右侧边栏的Maven Projects&#xff0c;再点击&#xff1a; 在出现的选择框中选择指定的未被识别的pom.xml即可&#xff1a; 2 Add as maven project 右键p…

VUE学习笔记(入门)5__vue指令v-html

v-html是用来解析字符串标签 示例 <!doctype html> <html lang"en"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…