首页 > 其他分享 >【CAN通讯系列3】如何学习CAN通讯?

【CAN通讯系列3】如何学习CAN通讯?

时间:2024-07-18 09:30:11浏览次数:15  
标签:控制器 通讯 系列 功能 信息 学习 source 软件

对于汽车行业从业者,如何学习CAN通讯,最重要的是取决于你的岗位职责。一方面岗位职责的定义决定你所能获得的资源,另一方面敢岗位职责基本框定了你所使用的CAN通讯内容范围。

比如你不是做底层软件开发,那么你很难切身地深入理解CAN通讯的控制流和数据流,因为你没法像底层软件工程师那样能亲自使用调试工具去一行一行地调试代码,去追踪一个一个函数的调用关系。另外,你不是底层软件工程师的话,就算你懂很深入,也很难有详细设计的机会,从而很难产生最直接的价值。

当然并不是说你不需要就不要了解,其实知道的越多越好。汽车研发体系内有各种各样的角色,你了解的越多越广,将会非常助于你与不同角色的人员沟通,与对方进行同频道交流。除此之外,还存在很多可能性。

因此,不管你从事的具体是什么岗位,都可以去了解CAN通讯,总之自己的目标得定位好,比如你做系统集成的,别想着干底层软件的CAN通讯开发。而应该是基于自己岗位职责需要,首先需要知道CAN通讯的哪些内容,后续有余力有兴趣再去了解更多更深入的内容。那么,具体如何学习CAN通讯?从哪里开始?到何种程度?本文分享一些个人经验与思考。

1 CAN通讯是什么

在汽车上,任何形式的通讯,不管是LIN通讯,CAN通讯还是Ethernet通讯,其目的都是用来信息交互。即汽车上就是控制器(ECU)之间的信息交互。

图片

source:TBOX和CAN如何交互?

对于CAN通讯传递信息形式:同一个CAN网络的通讯,同样的传输速率,就如上图的动力网或车身网内部各个控制器之间通讯。不同CAN网络的通讯,可能是不同的传输速率,CAN网络需要通过网关才能通讯,就如上图的动力网的安全带控制器与车身网的车门控制器通讯。

总的来说,不管哪种CAN通讯传递信息形式,问题都要回归到这个信息具体如何进行传递,即下图的控制器1如何将信息传递给控制器2。

图片

可以细分为两方面的问题:

  • 从控制器1到控制器2:信息以怎样的承载方式进行传输?信息以多快的速度进行传输?信息如何能准确无误进行传输?

  • 关于信息,信息指的是什么?信息来自于控制器1的哪里?信息又要到控制器2的哪里?

2 CAN通讯基础

对于第一方面的问题,属于CAN通讯基础,应该适用于所有人汽车研发人员,需要参考CAN通讯的协议与标准,包括CAN2.0协议规范和 ISO 11898等,后续文章会结合这些进行介绍CAN通讯基础。

图片

source:CAN 总线 之三 CAN 国际标准 ISO 11898 解读_iso11898

对于第二方面的问题,我概括为两个部分:应用和实现。

3 CAN通讯应用

在整车层面,很多功能需要多个控制器来联合实现,因此就有了控制器间的信息交互,而这些信息是依赖于具体的整车功能,比如说新能源汽车要实现驱动功能,先需要整车控制器VCU计算目标转速或扭矩请求,再通过CAN通讯传输给电机控制器MCU;另外,VCU也需要根据驱动电机的实际状态(电流,温度等信息)来计算目标转速或扭矩请求,这时也需要MCU通过CAN通讯反馈这些信息给VCU。

总之就是控制器间需要进行信息交互,本质上来自于整车功能的需要,所以信息具体指的是什么,来自于整车功能的定义。因此,这个时候应用CAN通讯,主要目的获取信息,服务于整车功能,用来分析与验证整车功能的定义或策略等工作。此时,CAN通讯只是你获取信息的工具,你熟悉工具和DBC就好,比如CANalyzer或CANape的使用,可以参考它们的用户手册或者视频教程,如下所示:

图片

source: 01 新建工程及通道配置_哔哩哔哩_bilibili

图片

source: CAN通讯: DBC协议、DBC解析报文、Layout、C语言程序解析DBC报文实例

其实CAN通讯应用还包括另一个大功能:诊断。这是对于工具的使用要求会远高于上面所述,另外需要知道CDD文件。关于诊断主题可以先关注本公众号故障诊断系列文章。

4 CAN通讯实现

信息来自于控制器1的哪里?信息又要到控制器2的哪里?这两个问题涉及到CAN通讯实现。基于AutoSAR软件架构,信息来自于应用层软件或者底层软件,要到的也是应用层软件或者底层软件。那么,在软件中具体如何实现CAN通讯,包括两方面数据流和控制流,即一方面是数据是以怎样的形式在软件模块中传递,另一方面是CAN通讯相关的模块中,不同模块或同一模块的函数是怎样的调用关系。

图片

source:vector learning

了解这块内容,需要可以从实际开发工作入手,联合调试与测试工具,比如从CANalyzer中发送一条ECU接收列表已有ID的CAN信息,通过调试工具(比如trace32)断点功能,跟踪传输路径,包括函数调用和对应的数据信息。同时再结合AutoSAR文档,这样基本能摸清CAN通讯功能的主干。

图片

source: Lauterbach TRACE32工具的新增支持功能可简化MIPS和ARM CPU结合设计的调试工作

以上仅是CAN通讯开发的部分内容,还包括基于AutoSAR工具链对CAN通讯开发,比如采用Davinci configurator配置BSW和RTE,以及CAN通讯开发过程碰到各种问题。如果还更全面地说,对于软件开发而言,还涉及开发流程的执行,CAN通讯在ASW和BSW的分工等内容。

总的来说,CAN通讯实现包括开发,调试,测试和debug等工作,最重要的是实践,在实践需要理论支持,这是可去参考:微控制器用户手册,AutoSAR文档和调试工具帮助文档等资料。

5 小结

以上就是涉及到CAN通讯方面,个人的一些学习经验。对于CAN通讯,实际上还与功能安全和信息安全两个主题相关,上文并未提及,有兴趣的也可以自行了解。

希望通过本文和上篇文章,能帮大家有所了解:

  • CAN通讯与汽车研发的关系

  • 不同角色用CAN通讯做什么,需要掌握多少

  • 你真正想了解CAN通讯哪些内容,到何种程度

  • 你可以怎样去学

本系列接下来的文章将详细介绍CAN通讯相关知识,请持续关注后续文章。

-------------------------------------------------------------------------------------------------------------------------

创作不易,欢迎点赞收藏关注。

汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车行业从业人员。

标签:控制器,通讯,系列,功能,信息,学习,source,软件
From: https://blog.csdn.net/menghuyouyou/article/details/140478009

相关文章

  • 【CAN通讯系列2】与CAN通讯的故事
    3年前在知乎撰写很多CAN通讯相关的文章,那时主要偏于软件视角,反馈还不错。3年过去了,随着系统与软件的增加,对CAN通讯的认识有所加深,那就在此基础上,重新更新一个CAN通讯系列文章。先从我与CAN通讯的故事说起:1初始CAN通讯最初接触CAN通讯,那时刚工作,在主机厂的研发部门,经常需要......
  • 小白学习微信小程序开发中的图片和音频处理
    微信小程序开发中,图片和音频的处理是非常常见的功能之一。在本文中,我将详细介绍如何在小程序中进行图片和音频的处理,并提供相关的代码案例。一、图片处理图片的选择和上传在小程序中,用户可以选择图片并上传。首先需要在app.json中注册chooseImage和uploadFile的相关权限。然......
  • 【python学习】第三方库之tensorflow的定义、功能、使用场景、代码示例和解释
    引言tensorFlow是一个开源的软件库,最初由GoogleBrain团队的研究员和工程师开发,用于数值计算和大规模机器学习tensorFlow提供了丰富的API来支持各种计算任务,并且能够轻松地在多种计算设备上进行部署,包括CPU、GPU和TPU文章目录引言一、安装`tensorflow`第三方......
  • Java学习日历(String,StringBuilder,Stringjoiner)
     金额转换packageme.JavaStudy;importjava.util.Scanner;//币值转换publicclassCaptial{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println("请输入一个数字");intnumber=sc.ne......
  • 机械学习—零基础学习日志(高数04——函数概念与特性)
    零基础为了学人工智能,真的开始复习高数然后开始学习复合函数,主要掌握复合的方法。求解复合函数,先稍微百度百科一下,什么是因式分解:因式分解:​把一个多项式在一个范围(如实数范围内分解,即所有项均为实数)化为几个整式的积的形式,这种式子变形叫做这个多项式的因式分解,也叫作把......
  • pytorch学习(四)绘制loss和correct曲线
    这一次学习的时候静态绘制loss和correct曲线,也就是在模型训练完成后,对统计的数据进行绘制。以minist数据训练为例子importtorchfromtorchimportnnfromtorch.utils.dataimportDataLoaderfromtorchvisionimportdatasetsfromtorchvision.transformsimportToTen......
  • 数据仓库建模工具之一——Hive学习第三天
    1、Hive的基本操作1.1 Hive库操作1.1.1 创建数据库1)创建一个数据库,数据库在HDFS上的默认存储路径是/hive/warehouse/*.db。createdatabasetestdb;2)避免要创建的数据库已经存在错误,增加ifnotexists判断。(标准写法)--中括号表示可以省略的内容createdatabase[if......
  • Datawhale AI 夏令营——电力需求挑战赛——Task2学习笔记
    一、实先准备importnumpyasnpimportpandasaspdimportlightgbmaslgbfromsklearn.metricsimportmean_squared_log_error,mean_absolute_error,mean_squared_errorimporttqdmimportsysimportosimportgcimportargparseimportwarningswarnings.filter......
  • 新手教学系列——简单的服务配置项集中管理
    前言在开发和运维过程中,配置管理是一个非常重要但经常被忽视的环节。常用的配置文件格式包括env、ini和yaml等,它们非常适合模块级别的系统配置,尤其是一些敏感信息的配置,例如数据库连接字符串和密码等。但是,对于系统业务级别的配置,通常要求不需要重启服务即可更新,这就是我们今......
  • Datawhale AI 夏令营--NLP自然语言学习过程
    Task1:首先我们先无脑跑通本次学习的第一个baseline1.本次我们使用的是魔塔社区提供的GPU进行项目推进:2.在Notebook中启用由魔塔提供的编译服务,我们运行Task1代码,随后将生成的txt文档上传到评分的NLP竞赛平台,最后会得到本次学习的第一个分数。(可能到这里很多初学者都不明白......