【工作生活】汽车ECU开发内容简介

目录

1. 目标

2. 要分享什么

3.1 行业知识

3.1.1车载行业知识:

3.1.2项目:

3.1.3开发测试工具:

3.2 硬件平台

3.3 基础知识

3.4 工作生活

3. 我们是谁


1. 目标

随着新能源汽车的快速崛起,汽车电子行业开始快速发展,而汽车软件对功能安全要求很高,对工程师的需求和要求也越来越大。且汽车ECU开发标准,规范众多,AUTOSAS这座大山更是望其项背,本人从0到1学习汽车ECU开发,深知其中的辛苦。基于这样的背景,想建立一个汽车电子软件知识系统分享的平台,从原理分析到代码分析最后再到实际项目应用,让初入行的汽车工程师少走弯路,同资深的工程师相互学习。作者也需要吃饭,部分内容付费,不喜勿喷!

2. 要分享什么

图片

如上图所示,分享的内容包括汽车电子软件工程师所需要掌握的基础知识,硬件平台,行业知识,以及职业软实力知识。希望形成一条主线,在这条主线上删繁就简逐步建立属于自己的知识体系框架。

3.1 行业知识

3.1.1车载行业知识:

AUTOSAR:这里先介绍Class Platform AUTOSAR,Adaptive Platform AUTOSAR还没接触过,暂不介绍。

图片

  对于车载或者电控MCU平台的项目,AUTSAR能够帮助我们快速开发和迭代项目。基于个人对AUTOSAR的学习经验,学习AUTOSAR不能只停留在文档阅读上面,一定要基于源码来阅读,然后付诸于实践,特别是在应用层使用AUTOSAR方法论(port,interface, composition,data type.....)的时候一定要基于实际项目来理解,这样才能真正掌握。

  在学习当中要总结一套自己的阅读技巧,比如我开始学习的时候就记录了一下我的学习步骤:

step1: 总体预览下这个模块实现的功能,看文档的功能概述

step2: 浏览下模块中的各种概念定义

step3: 看代码的模块配置定义文件,对照着配置实现代码,不懂的概念到文档中查找理解

step4: 看懂所有的配置后再去看函数实现,文档有函数的功能说明。

note1: 对于每个模块,看它实现了什么功能,调用下层什么模块,被哪个上层模块在什么场景下使用。

note2: 先抓主线,然后在整体框架上去看模块某个具体的功能是怎么是实现的!-- 以COM模块为例,主线就是Com的收发机制,底部收到CAN数据到COM层怎么更新数据;COM层怎么发送数据;COM和RTE的交互实现。搞清楚这个主线之后,在去分析COM模块中的Sequence Control或者Update-Bits是怎么实现的!

图片

以CAN协议栈为例。分析CAN TRANCEIVE-->CAN DRIVER-->CANIF-->PDUR / CANTP/CANNM/CANSM整个协议栈,形式上从文档出发,结合开源源码和工具分析CAN协议栈的具体实现和使用,然后最好能以Demo的形式给出示例。 

复杂驱动:

图片

  电控类项目(BMS, BCM, VCU)如BMS的单体采样控制、车身域/BCM的高低驱输出控制,动力域/VCU的刹车或上下电控制以及整个ECU的电源管理对采样的精度和电源的可靠性要求很高,都会使用特殊的芯片来实现。而对这些特殊芯片的操作AUTOSAR没有定义规范,就需要复杂驱动来实现。

  对于复杂驱动,正向功能的开发当然很重要,但是对于其诊断和自恢复功能的实现也特别重要(VCU要是突然异常掉电了,要是没有证据证明不是自己的问题,那你就完蛋了。。。)。而对于复杂驱动的学习,最重要的就是看Datasheet,然后多和硬件工程师讨论,最后疯狂的测试。

  对于这部分的学习,将结合具体的应用场景从Datasheet出发,一步一步的实现一个可用的复杂驱动,最后最好能总结出一个驱动框架。

网络管理:

图片

  网络管理最重要的功能就是保证整车上的所有ECU同睡同醒,最大程度上的节约用电(理想很丰满,现实很骨感,一旦一个ECU的网络管理出现问题,整车所有的ECU都不会休眠或掉电。。。)。而网络管理一般用OSEK网络管理和AUTOSAR网络管理,目的都是一样。对于这部分的学习,将从概念到源码再到实践,要在仿真器上实现OSEK网络管理建环,AUTOSAR网络管理睡眠。

诊断UDS:

  诊断部分最重要的两个协议就是传输层ISO-15765协议和应用层ISO-14229协议,协议实现的载体一般是CAN通信服务。传输层实现数据的类型校验和数据的上传下达、流控的实现、各种定时器的实现。应用层则实现具体的服务,比如DTC的读写,IO的诊断控制,诊断刷写升级ECU等。

将从CAN邮箱中断收到物理寻址或功能寻址报文开始,一步一步分析整个UDS协议栈的具体实现。

BootLoader:

  BootLoader最重要的功能就是实现ECU的升级。一般独立的ECU(BMS,VCU...)使用CAN诊断的0x27协议实现刷写更新程序,而MCU和SOC共存的ECU会通过串口UART使用X/YModel协议实现ECU的升级。而其中最主要的指标就是刷写的成功率,以及失败后的应急方案。

  ECU升级一般要求得99.99%以上的成功率,不然一旦ECU刷写失败会导致很多的异常问题。通过双分区的办法来保证刷写失败后ECU能回退到刷写前的版本。其中的具体实现还有很多的细节考虑,比如刷写数据的校验机制,异常断电导致失败的重新刷写机制,以及防异常的写Flash代码拷贝机制等等。

EOL:

  EOL也就是End Of Line下线检测,对于汽车ECU一般在单件工厂会有一次下线检测,在整车集成后的整车下线也会有一次下线检测。而下线检测的内容一般是常见的DTC清除,各种外设的正常输入输出等等。一般会制定一个详细的下线检测流程,也就是对已经实现的功能增加一个诊断Session的功能来接管控制操作一下,看是不是我们想要的输入输出。

  EOL看似简单,就是对已实现的功能的检测,但是涉及生产无小事,因为一旦生产出问题,整个产品线就会停滞,BOSS可不会管你的,劈头盖脸的质量人员就会招呼来了。。。

标定:

图片

  标定,顾名思义就是对一些我们不能确定的参数通过实际路试情况统计得出并写到ECU的ROM当中。一般采用XCP协议实现,协议载体一般还是CAN通信协议栈。对于标定协议和具体应用我们可以思考一下的几个问题:

-- 标定的数据具体怎么定义?如果不使用Matlab定义标定数据怎么样生产A2L文件?

-- 怎么样修改我们的链接文件给我们的标定数据开闭一块特定的标定数据域?

-- 使用什么样的上位机来实现数据标定?

-- 整个XCP协议在AUTOSAR工具中是怎么配置的?

这些都是我们应该学习和考虑清楚的。

功能安全:

  功能安全属于属于锦上添花的事情,和装修房子一样你想花多少钱(时间/精力/复杂度)都可以。通俗的来讲就是通过头脑风暴的方式得出各种工况下的异常场景,然后通过具体规则划分优先级和必要性,最后指定具体的异常处理措施,将软件的可靠性做到更优。

开发流程:

  小公司可能就是一个人在战斗,基本没有开发流程这回事。但是大公司,这个还是很重要的,一旦涉及到多人开发,没有一个成熟的开发流程,各种浑水摸鱼已经异常问题就出现。

  对于汽车电子产品,常见的开发流程关键词为:自上而下,自下而上,V字型,ASPICE等等。

  不管使用哪一种,有几个关键点都是一样的:

-- 各个阶段(ET阶段,PT阶段,SOP阶段)的详细开发计划(一级,二级,三级)

-- 开发计划下的每个功能的具体负责人,及dealine时间

-- 开发节点应该提交的输出物(需求文档,需求文档评审/修改记录,详细设计文档,详细设计文档评审/修改记录,代码,测试报告)

-- 功能增长表(风险分析控制表)

-- BUG管理和追踪

-- 项目代码管理和提交/修复追踪,版本管理 控制等

3.1.2项目:

项目很多,我们要学会以不变应万变,摸索一套能够套用的项目开发流程。以车身域控制器开发为例,我们首先从公司的第一级开发计划中筛选出二级部门计划,然后软硬件芯片选型,根据已有资源工具和人力制定详细的三级ECU开发计划。

从功能上划分,第一层可分为ASW应用层功能需求和BSW基础软件功能需求。第二层ASW需求又可分为车身控制系统、无钥匙进入启动系统、智能配电系统、热管理控制系统。BSW需求又可分为MCALL需求、IOHWAB需求、CDD需求、NVM需求、UDS需求、COM需求、OS需求、WatchDog需求、ECUM需求等。第三层ASW需求就是具体的应用实现功能。

完成了具体的功能模块需求后,ASW需要根据具体的开发设计输入文档进行架构设计,输出ARXML文件,导入Matlab进行应用层需求开发。

BSW需求则使用BSW工具根据具体需求开始配置,CDD功能和IOHWAB功能需要根据实际情况调用MCAL接口手动实现。

3.1.3开发测试工具:

Davince:

  MCAL工具配置生成动态MCAL配置代码,不同芯片配置成统一的MCAL驱动程序接口。每一个MCAL接口,AUTOSAR文档已经明确定义,但每一个接口的具体实现不同的芯片又不一样,以MCU模块为例,要配置MCU模块就得对芯片的时钟十分清楚,因为MCU模块会调用统一的MCAL接口完成时钟的初始化。MCAL的配置会影响硬件的特性,这就需要我们对芯片特性和MCAL需求特别熟悉,不然就会产生很多奇怪的问题。

ISOLAR:

  ISOLAR包括四个部分的功能,BSW的配置,OS的配置,RTE的配置,ASW的配置。BSW主要配置通信协议栈,存储协议栈,诊断协议栈。OS配置任务调度表,优先级等。RTE配置SWC之间及SWC与BSW间的运行时环境。ASW配置各个SWC的接口。如果是自底向上的开发流程,需要在ISOLAR当中完成SWC的架构配置,生成ARXML文件导入到simulink进行应用层开发。

MATLAB:

  使用MATLAB/SIMULINK功能开发应用程序。使用AUTOSAR BLOKSET进行AUTOSAR架构的应用层软件开发。使用自定向下的开发模式的话,直接导入各个SWC的ARXML文件,生成模型进行应用层软件的开发。使用MBD的开发模式,模型配置,代码生成配置,模型验证配置也需要熟练掌握。

Vector系列工具:

  CANoe可以进行多ECU仿真分析,CAN报文纳秒级的分析,实车数据录制,在分析问题的时候,几乎无可替代。

  CANape完成标定功能。

  CANlalyzer是CANoe的简化版。

3.2 硬件平台

  现在行业内都在鼓吹软件定义汽车,其实某种程度上来看硬件才是定义汽车的基础。强大计算力的GPU才能支持复杂计算的自动驾驶,车载以太网的量产才能使SOA落地。而硬件中的核心就是MCU/CPU。每款芯片都会有自己IP核(ARM,PowerPc,X86)和指令集,围绕IP核各大厂商就会集成自己的外围设备生产特定功能用途的芯片(S32K, RH850等)。我们学习硬件平台需要了解从板子上电后从哪里运行第一条指令?在跑到main函数前我们的CPU到底做了哪些准备工作?这些准备工作是必须的吗?我们在项目开发过程中会去修改这些地方吗,如何修改?连接器脚本到底是怎么回事?这些都需要我们去探索实践发现。

3.3 基础知识

  《程序员的自我修养》中说到:CPU体系结构,汇编,C语言(包括C++)和操作系统,永远都是编程大师们的护身法宝,就如同少林寺的《易筋经》,是最为上乘的武功;学会了《易筋经》,你将无所不能。可见基础的重要性。

  基础不牢,地动山摇。没有遇到问题前,可能都用不到,但是一旦发生问题了,好的基础知识就能帮你快速的定位问题。

  基础牢固,学习新东西要快的多。如果你熟悉C++,学习Python基础简直就是砍瓜切菜一般。

  何谓基础,有的前辈说每个行业的基础不一样,我们不讨论这个问题。我们将讨论如何巩固学习基础知识并用于实际项目。

  C/C++,嵌入式行业的产品基本都是这C/C++写的,必须精通,这个精通包括语法知识的深入理解以及常用C/C++程序框架和技巧的熟练掌握。

  OS操作系统,一般包括实时操作系统(RTA_OS)和非实时操作系统(Linux)。对于实时操作系统如RTA_OS,我们需要深入理解实时操作系统的调度机制、优先级实时响应机制、多核多任务间数据一致性、RTA_OS的Autosar概念的具体实现。对于非实时系统如Linux,我们起码要深入理解几个常见驱动框架(IIC, Uart, Spi)的具体实现。

  计算机组成原理,汽车电子或者说嵌入式产品本身即是一个微型计算机,由存储单元,计算单元,传感器/执行器单元等物理器件构成。怎么理解这些物理器件间的功能区分又紧密合作就需要计算器组成原理来支撑。

  算法与数据结构,复杂的树或者图数据结构用的很少,但常用的栈和队列以及链表在工作中用的很多,设计到一些策略实现的时候机会用得上。如果要分享OS的源码,数据结构和面向对象的编程思想必须数量掌握。

3.4 工作生活

  梦想还是要有的,一直追求工作就是工作,生活就是生活,但随着生活角色的变化以及工作中承担的任务越来越重,二者完全解耦还是挺困难的。

我可以分享我们从初入职场的战战兢兢到面对问题后的宠辱不惊这一路成长的心路历程。

生活中角色的变化,怎么和工作达成最好的平衡?

何谓成长?跳入坑中叫挫折,爬出坑来叫成长。

新入公司,该怎么奠定江湖地位?

上面的每一句话都是亲身经历后思考的问题,后辈可以参考避坑,资深全当扯蛋瞎聊。

3. 我们是谁

  投身于新能源汽车软件行业的打工人,正在开发汽车域控制器。

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

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

相关文章

设计模式-结构型模式之外观设计模式

文章目录 七、外观模式 七、外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类…

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。 1、为了…

关于微信小程序中如何实现数据可视化-echarts动态渲染

移动端设备中,难免会涉及到数据的可视化展示、数据统计等等,本篇主要讲解原生微信小程序中嵌入echarts并进行动态渲染,实现数据可视化功能。 基础使用 首先在GitHub上下载echarts包 地址:https://github.com/ecomfe/echarts-for…

【JavaEE初阶】Thread 类及常见方法、线程的状态

目录 1、Thread 类及常见方法 1.1 Thread 的常见构造方法 1.2 Thread 的几个常见属性 1.3 启动⼀个线程 - start() 1.4 中断⼀个线程 1.5 等待⼀个线程 - join() 1.6 获取当前线程引用 1.7 休眠当前线程 2、线程的状态 2.1 观察线程的所有状态 2.2 线程状态和状…

大数据Hadoop-HDFS_架构、读写流程

大数据Hadoop-HDFS 基本系统架构 HDFS架构包含三个部分:NameNode,DataNode,Client。 NameNode:NameNode用于存储、生成文件系统的元数据。运行一个实例。 DataNode:DataNode用于存储实际的数据,将自己管理…

Buzz库python代码示例

Buzz库来编写一个下载器程序。 php <?php require_once vendor/autoload.php; // 引入Buzz库 use Buzz\Browser; use Buzz\Message\Response; $browser new Browser(); // 设置 $browser->setHttpClient(new HttpClientProxy([ host > , port > , ])…

单片机学习1——点亮一个LED灯

Keil软件编写程序&#xff1a; 特殊功能寄存器声明&#xff1a; #include<reg52.h>sbit LED P1^0;void main() {LED 0;while(1); } 代码说明&#xff1a; sbit 语句是特殊功能位声明。 生成HEX文件&#xff0c;这个文件是下载到单片机里的文件。Options for Target…

大数据Doris(三十二):Doris高级功能

文章目录 Doris高级功能 一、​​​​​​​表结构变更

hql面试题之字符串使用split分割,并选择其中的一部分字段的问题

版本&#xff1a;20231109 1.题目&#xff1a; 有两张表,a表有id和abstringr两个字段&#xff0c;b表也有id和bstr两个字段&#xff0c;具体如下 A表&#xff1a; 1abc,bcd,cdf2123,456,789 B表: 1acddef2123456 在a表的abstring字段中用‘,’分割&#xff0c;并取出前两…

数据结构实验任务六 :基于 Dijsktra 算法的最短路径求解

本次代码为实验六:基于 Dijsktra 算法的最短路径求解实现。本实验的重点在于对于Dijsktra算法的理解。有关Dijsktra的资料可以参考有关博文&#xff1a; 图论&#xff1a;Dijkstra算法——最详细的分析&#xff0c;图文并茂&#xff0c;一次看懂&#xff01;-CSDN博客 以下附上…

【数据结构实验】排序(一)冒泡排序改进算法 Bubble及其性能分析

文章目录 1. 引言2. 冒泡排序算法原理2.1 传统冒泡排序2.2 改进的冒泡排序 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果5. 实验结论 1. 引言 排序算法是计算机科学中一个重要而基础的研究领域&…

chatgpt prompt提示词

chatgpt的接口是一个标准的http请求&#xff0c;请求的url为 POST https://api.openai.com/v1/chat/completions 官方的接口文档地址为&#xff1a;https://platform.openai.com/docs/api-reference/chat/create Example request curl https://api.openai.com/v1/chat/comp…

【计算机网络笔记】802.11无线局域网

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

VUE语法-(readonly的用法)将数据设置成只读模式

1、功能概述 在Vue中定义一个变量&#xff0c;这个变量的值不允许被修改&#xff0c;核心是通过readonly设置成只读。 如果不会使用ref和reactive响应式数据参考如下博客&#xff1a; https://blog.csdn.net/tangshiyilang/article/details/134701103 2、具体实现 如下案例…

Fabric:创建应用通道

搭建自定义网络可以参考文章&#xff1a; https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后&#xff0c;就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…

CSS浅谈动画性能

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目的一、举个栗子二、性能分析1.从图层分析2.性能分析 总结 目的 为了探究使用动画时&#xff0c;『transform』和『width、height、margin等』的差异 一、举个栗子…

大坝安全监测的内容及作用

大坝安全监测是指对大坝水雨情沉降、倾斜、渗压以及大坝形状特征有效地进行监测&#xff0c;及时发现潜在的安全隐患和异常情况&#xff0c;以便大坝管理人员能够做出科学决策&#xff0c;以确保大坝安全稳定运行。 大坝安全监测的主要内容 1.表面位移监测&#xff1a;监测大坝…

申请Azure学生订阅——人工验证

一&#xff1a;联系客服进行人工验证 点击 Services Hub 填写资料申请人工验证 点击 Azure - Sign up 进行学生验证 二&#xff1a;与客服的邮件沟通的记录 ​​​​一、结果&#xff08;输入客服给的验证码后&#xff0c;笔者便得到了学生订阅&#xff09;&#xff1a; 二…

汇编语言实现音乐播放器

目标程序 用汇编语言实现一个音乐播放器&#xff0c;并支持点歌 Overview 乐曲是按照一定的高低、长短和强弱关系组成的音调&#xff0c;在一首乐曲中&#xff0c;每个音符的音高和音长与频率和节拍有关&#xff0c;因此我们要分别为3首要演奏的乐曲定义一个频率表和一个节拍…

如何判断电脑电源质量的好坏?

电脑电源作为电脑的关键部件直接影响到电脑的性能和寿命&#xff0c;因此选择一个好的电源至关重要。那么要如何判断电脑电源的好坏呢?判断的指标都有哪些呢? 1.外观检测 观察电源外观可以初步判断电脑电源的工艺质量和材料质量。外观检测需要检查电源外壳是否坚固&#xff0…