【工作生活】汽车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.mzph.cn/news/190063.shtml

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

相关文章

Redis数据结构之跳表

跳表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。其核心思想就是通过建立多级索引来实现空间换时间。 在Redis中,使用跳表作为Zset的一种底层实现之一,这也是跳表在Redis中的…

SpringBoot 集成 ChatGPT,实战附源码

1 前言 在本文中,我们将探索在 Spring Boot 应用程序中调用 OpenAI ChatGPT API 的过程。我们的目标是开发一个 Spring Boot 应用程序,能够利用 OpenAI ChatGPT API 生成对给定提示的响应。 您可能熟悉 ChatGPT 中的术语“提示”。在 ChatGPT 或类似语…

如何本地搭建个人hMailServer邮件服务并实现远程发送邮件

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

VLAN间路由详细讲解

本次实验拓扑的主要概述以及设计到的相关技术 VLAN技术: VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。 每个VLAN是一个广播域,VLAN内的主机间可以直…

YOLOv8改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)

一、本文介绍 本文给大家带来的改进内容是SCConv,即空间和通道重构卷积,是一种发布于2023.9月份的一个新的改进机制。它的核心创新在于能够同时处理图像的空间(形状、结构)和通道(色彩、深度)信息&#xf…

数字图像处理(实践篇) 十六 基于分水岭算法的图像分割

目录 一 分水岭算法 二 利用OpenCV实现分水岭算法的过程 三 实践 一 分水岭算法 基于任何灰度图像都可以视为地形表面,其中高强度表示山峰和山丘,而低强度表示山谷。首先,开始用不同颜色的水(标签)填充每个孤立的山…

医院智能导诊小程序源码 智能导诊源码

医院智能导诊系统、AI智能导诊、现有的ai模型做医院智能导诊、智能就医引导系统、人工智能挂号、医院AI全流程智能导诊系统。 智能导诊 可以根据用户症状描述精准推荐科室及医生智能学习医院历史数据及自动进行科室对照,与医院的系统连接后,患者可直接完成预约。 一、系统概述…

flutter-一个可以输入的数字增减器

效果 参考文章 代码 在参考文章上边,主要是改了一下样式,逻辑也比较清楚,对左右两边添加增减方法。 我在此基础上加了_numcontroller 输入框的监听。 加了数字输入框的控制 keyboardType: TextInputType.number, //设置键盘为数字 inputF…

JavaScript 数据结构

JavaScript 数据结构 目录 JavaScript 数据结构 一、标识符 二、关键字 三、常量 四、变量 每一种计算机编程语言都有自己的数据结构,JavaScript脚本语言的数据结构包括:标识符、常量、变量、保留字等。 一、标识符 标识符,说白了&…

Flutter学习(七)GetX offAllNamed使用的问题

背景 使用GetX开发应用的时候,也可能有人调用过offAllNamed,会发现所有controller的都被销毁了 环境 win10 getx 4.6.5 as 4 现象 从A页面,跳转到B页面,然后调用offAllNamed进行回到A页面,观察controller声明周期…

如何从 Android 手机恢复已删除的视频

您是否曾经丢失过手机中的任何数据?如今,由于 Android 上的应用程序崩溃、根进程停止、Android 更新失败等等,数据丢失很普遍。错误删除是丢失视频、录音和音乐副本的另一种可能的方式。 丢失包含有关新完成的项目的重要信息的视频或婚礼、周…

零基础OpenAi应用商店开发

在本月OpenAi开发者大会上,OpenAI宣布推出了GPTs功能,也就是GPT Store,类似App Store的应用商店,任何用户都可以去参与创建应用。通过该功能,用户可以定制化打造自己的GPT,并公开分享至OpenAI的应用商店。定…

12.1 二叉树简单题

101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 思路:对称二叉树 有一个特点是以 中左右顺序遍历左子树的结果会等于 中右左顺序遍历右子树的结果…

服务器中深度学习环境的配置

安装流程 11.17 日,周末去高校参加学术会议,起因, 由于使用了某高校内的公共有线网络, 远程连接服务器后,黑客利用 ssh 开放的 22 端口, 篡改了主机的配置, 使得只要一连上网络, 服…

接口测试基础知识

一、接口测试简介 什么是接口测试? 接口测试是测试系统组件间接口的一种测试,主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。 测试的重点: 检查数据的交换,传递和控制管理过程;检查系统间的相互…

『吴秋霖赠书活动 | 第五期』《Kubernetes原生微服务开发》

【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平…

企业加密软件有哪些(公司防泄密软件)

企业加密软件是专门为企业设计的软件,旨在保护企业的敏感数据和信息安全。这些软件通过使用加密技术来对数据进行加密,使得数据在传输和存储过程中不会被未经授权的人员获取和滥用。 企业加密软件的主要功能包括数据加密、文件加密、文件夹加密、移动设备…

深度学习第4天:感知机模型

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 ​ 文章目录 感知机模型介绍 神经网络搭建感知机 结构 准备训练数据 感知机的损失函数与优化方法 测试结果 完整代码 多层感知机 结语 感知机模…

优彩云采集器最新版免费下载,优彩云采集器免费

随着网络时代的发展,SEO(Search Engine Optimization,搜索引擎优化)已经成为网站推广和营销的关键一环。在SEO的世界里,原创内容的重要性愈发凸显。想要做到每天更新大量原创文章,并不是一件轻松的事情。优…

mybatis源码(五)springboot pagehelper实现查询分页

1、背景 springboot的pagehelper插件能够实现对mybatis查询的分页管理,而且在使用时只需要提前声明即可,不需要修改已有的查询语句。使用如下: 之前对这个功能一直很感兴趣,但是一直没完整看过,今天准备详细梳理下。按…