快速扫盲CAN总线基础知识

admin 2025年5月12日00:33:59评论4 views字数 4508阅读15分1秒阅读模式

点击上方蓝字谈思实验室

获取更多汽车网络安全资讯

快速扫盲CAN总线基础知识

01

概述

CAN总线是一种广播类型的总线。这意味着在总线上的所有节点都可以“收到”所有消息。CAN从设计上是无法将消息发送给特定节点的;但是,CAN硬件(CAN控制器)提供了本地过滤机制,可以只对感兴趣的消息进行接收。

快速扫盲CAN总线基础知识

02

CAN消息帧结构(协议层)

CAN总线使用短消息,最大消息位数为96个比特位,在消息中是没有明确的地址信息;相对的,在数据中可以隐含地址信息。

消息帧类型

CAN总线上有四种不同的消息类型(或“帧”):

  • 数据帧

  • 远程帧

  • 错误帧

  • 过载帧

数据帧

数据帧是最常见的消息类型,它包括以下主要部分(以标准CAN为例,省略了一些细节): 

1、当两个或多个节点争夺总线时,确定消息的优先级的仲裁字段。仲裁领域包含:

  • 对于CAN 2.0A,一个11位标识符和一个位,RTR位,这对于数据帧而言是显性的。

  • 对于CAN 2.0B,一个29位标识符(还包含两个隐性位:SRR和IDE)和RTR位。

2、数据字段包含0-8个字节的数据字段。 

3、CRC字段为15位校验和。此校验和用于错误检测。 

4、应答位,能够正确接收该消息的任何CAN控制器都会在每个消息的末尾发送应答位。发送端会检查是否存在应答位,并在未检测到消息的情况下重新发送该消息。

注1:值得注意的是,在总线上存在应答位并不意味着任何预期的接收方都收到了该消息。我们唯一知道的是,在总线上的至少一个或多个节点正确地收到了它。

注2:尽管存在ID字段与仲裁标识符,并不一定要求ID与消息的内容绑定并识别。这取决于上层应用协议。

这是CAN 2.0A 标准CAN的数据帧格式 

快速扫盲CAN总线基础知识

这是CAN 2.0B 拓展CAN的数据帧格式 

快速扫盲CAN总线基础知识

远程帧

远程帧类似于数据帧,但是有两个重要的区别: 

1、 它有明确的标记表示远程帧(仲裁字段中的RTR位是隐性的) 

2、 没有数据字段

远程帧的预期目的是征求相应数据帧的传输。例如,如果节点A发送将仲裁字段设置为0x234的远程帧,则节点B可能会用带有仲裁字段0x234的数据帧响应。

远程帧可用于实施总线流量管理的请求响应类型(请求->响应机制有利于控制总线流量与负载率)。但是,实际上,远程帧在汽车行业很少使用。还值得注意的是,CAN标准没有规定此处行为,对大多数CAN控制器来说,可以进行编程以自动响应远程帧,或者将其通知本地处理器。

除此之外,远程帧有一个捕获判断,数据长度代码必须设置为预期响应消息的长度。否则仲裁将不起作用。

快速扫盲CAN总线基础知识

远程帧(2.0a类型)

错误帧

简而言之,错误帧是一条特殊的消息,表征消息违反了CAN消息结构与规则。当节点检测到故障并导致所有其他节点检测到故障时,它会发送。然后,发送端将自动尝试重新发送消息。当然,这会有一个错误计数器方案,可确保节点无法通过反复传输错误帧来破坏总线流量。

错误帧由一个错误标志组成,该标志是相同值的6位(违反了位的规则)和一个错误定界符,即8个隐性位。错误定界符提供了一些时间,其中总线上的其他节点在检测第一个错误标志时可以发送错误标志。

过载帧

在这里提到过载帧,只是为了完整。它的格式与错误帧非常相似,并且它是由一个繁忙节点传输的。过载帧在汽车行业很少使用,并且现在的CAN控制器已做过优化,舍弃了过载帧的识别与发送,可以说过载帧是过时的,这里我只是顺便提一下。

标准CAN vs 拓展CAN

最初,CAN标准将仲裁字段中标识符的长度定义为11位。后来,客户需求迫使标准扩展。新格式通常称为扩展CAN,并且允许标识符中的不少于29位。为了区分两种帧类型,使用了控制字段中的保留位。

标准被正式称为

2.0A,仅具有11位标识符,

2.0B,扩展版本,具有完整的29位标识符(或11位,可以混合使用)2.0B节点可以是

  • 2.0B完整,可以接收或者传输拓展帧。

  • 2.0B兼容,兼容的意思是可以接收拓展帧,但是会被丢弃,不影响总线状态。

1.x指的是原始规范版本。

我们现在使用的CAN控制器通常是2.0B类型的。1.x或2.0A类型控制器无法接收拓展帧。很多情况下,有的人会觉得标准CAN比扩展CAN更好,因为扩展的CAN消息会增加开销。这种理念不一定是正确的。如果使用仲裁字段来传输数据,则扩展可能实际上可能具有比标准CAN更低的开销;不过大部分情况,我们使用CAN还不会到纠结是否使用仲裁字段传输数据的地步,毕竟都会做设计冗余。

总线仲裁与消息优先级

消息仲裁(多个CAN控制器同时使用总线),决定哪个控制器优先使用CAN总线是很重要的。 任何CAN控制器都可以在检测到空闲总线时启动消息发送。这可能会导致两个或多个控制器同时启动消息。冲突通过以下方式解决。传输节点在发送时监视公共总线。如果一个节点在发送隐性电平,它将立即退出仲裁过程并成为接收者。仲裁是在整个仲裁领域进行的,当该字段发送时,正好将一个控制器留在总线上。该节点继续传输,好像什么都没发生。其他潜在的控制器将尝试在下次可用时重新传输其消息。在仲裁过程中,不会浪费时间。

由于总线是有线电缆,并且显性位在逻辑上是0,因此得出的是,具有数值最低仲裁字段的消息将赢得仲裁。ID越小,优先级越高。

问:如果一个节点独自在CAN总线上并试图传输会发生什么?

答:节点当然会赢得仲裁,并随着消息传输而愉快地进行。但是,当确认的时间到来了……在ACK期间没有任何节点会发送应答,因此控制器会感觉到ACK错误,发送错误标志,将其发送误差计数器增加8并开始重新发送。这将发生16次;然后,发射器将出现被动错误。如果节点为被动错误,并且错误为ACK应答错误,则发送错误计数器不会进一步增加。因此,节点将继续永远传输,直到有节点应答该信息为止。

消息地址与标识

值得再次注意的是,CAN消息中没有明确的地址。每个CAN Controller将在总线上接收所有消息,并结合硬件过滤器和软件过滤器,确定该消息是否是自己感兴趣的消息。

实际上,CAN中没有消息地址的概念。相反,消息的内容由消息中存在的标识符标识。传统的消息地址将使用“节点ID”加入消息,变成“包含节点ID的数据的消息”。这两个概念之间的区别很小,但很重要。

根据标准,仲裁字段的内容用于确定总线上消息的优先级。所有CAN控制器将使用仲裁字段作为硬件过滤的值。该标准并不表示必须将仲裁字段用作消息标识符。但是,这是一种非常普遍的用法。汽车行业中,仲裁字段的标识符就是CAN报文ID的实际特征。

03

CAN总线的物理特征(物理层)

CAN总线使用非归零码(NRZ),有两个不同的信号状态:显性(逻辑上0)和隐性(逻辑上1)。总线电平按照线与机制对总线潜在的冲突进行仲裁,显性电平覆盖隐性电平,即只有总线上所有单元都输出隐性电平时,总线上才为隐性电平。

典型的:

  • CAN总线为“隐性”(逻辑1)时,CAN_H和CAN_L的电平为2.5V(电位差为0V)

  • CAN总线为“显性”(逻辑0)时,CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差为2.0V左右) 当然,2.5V,3.5V和1.5V并不绝对,重点是电位差。一般认为电位差<0.5V是隐形电平,电位差>0.9V为显性

快速扫盲CAN总线基础知识

下面几张图分别为示波器抓取的CAN-H与CAN-L的信号波形,红色为CAN-H,蓝色为CAN-L 

快速扫盲CAN总线基础知识
快速扫盲CAN总线基础知识
快速扫盲CAN总线基础知识

几种不同的物理层

有几种不同的物理层:

  • 最常见的类型是由CAN标准ISO 11898-2定义的类型。有时也被称为“高速CAN”。

  • ISO标准的另一部分ISO 11898-3定义了另一个两线电平方案,用于较低的总线速度。它的容错率更高,即使将一条总线线切割或短路至地面或VBAT,信号传导也可以继续。有时被称为“低速CAN”。

  • SAE J2411定义了单线(对低0电平)物理层,它主要用于汽车 。

最大总线速率

根据标准,CAN总线的最大速度为1Mbit/秒。但是,某些CAN控制器将处理比1Mbit/s更高的速度,并且可以考虑用于特殊应用。

低速CAN(ISO 11898-3,见上文)可以达到125 kbit/s;单线可以在其标准模式下达到约50 kbit/s,并且使用特殊的高速模式用于ECU编程,大约100 kbit/s。

最低总线速率

请注意,某些CAN收发器将不允许您低于一定比特率。如果您使用TJA1050,则不能低于50 kbit/s。在应用时请检查数据手册。就笔者遇到的情况,在汽车行业CAN总线的常见速率为:

  • 250kbps,常见于商用车,公交、卡车之类。

  • 500kbps和1Mbps,多见于乘用车,也就是普通人出行开的车 注:超过1M,都会使用CAN-FD协议,CAN-FD是CAN的再次拓展

最大线缆的长度(通信距离)

以1Mbit/s的速度,最大电缆长度约为40米。这取决于仲裁字段,他的机制需要采样,决定了要求信号能够传播到最遥远的节点,然后再返回,然后才能采样,而电子的传播速度等于光速。 其他最大电缆长度是(这些值近似):

  • 500 kbit/s的100米

  • 250 kbit/s的200米

  • 125 kbit/s的500米

  • 10 kbit/s的6公里 

注意:如果在应用中使用了光耦或者其他隔离措施进行电流隔离,则最大总线长度会相应降低。因为光耦的引入会进一步带来延时。

终端和终端电阻

按照ISO-11898的CAN标准,CAN总线的两端使用120欧姆的电阻器完成匹配,这其实有两个作用:

1、消除总线末端的信号反射。

2、CAN总线的直流电平在两端得以维持一致。

当然,也可以始终不使用终端电阻,无论其速度如何。但是如果是按照ISO-11898标准,是必须使用终端电阻的。也许你在实验或者测试时,只使用了一个终端电阻就足够了,或者没有使用任何终端电阻,CAN总线依然正常工作,我只能说你很幸运了。

来源:聪拌面搞嵌入式

 end 

快速扫盲CAN总线基础知识

 精品活动推荐 

快速扫盲CAN总线基础知识
快速扫盲CAN总线基础知识

 AutoSec中国行系列沙龙 

快速扫盲CAN总线基础知识

快速扫盲CAN总线基础知识

 专业社群 

快速扫盲CAN总线基础知识

部分入群专家来自:

新势力车企:

特斯拉、合众新能源-哪吒、理想、极氪、小米、宾理汽车、极越、零跑汽车、阿维塔汽车、智己汽车、小鹏、岚图汽车、蔚来汽车、吉祥汽车、赛力斯......

外资传统主流车企代表:

大众中国、大众酷翼、奥迪汽车、宝马、福特、戴姆勒-奔驰、通用、保时捷、沃尔沃、现代汽车、日产汽车、捷豹路虎、斯堪尼亚......

内资传统主流车企:

吉利汽车、上汽乘用车、长城汽车、上汽大众、长安汽车、北京汽车、东风汽车、广汽、比亚迪、一汽集团、一汽解放、东风商用、上汽商用......

全球领先一级供应商:

博世、大陆集团、联合汽车电子、安波福、采埃孚、科世达、舍弗勒、霍尼韦尔、大疆、日立、哈曼、华为、百度、联想、联发科、普瑞均胜、德赛西威、蜂巢转向、均联智行、武汉光庭、星纪魅族、中车集团、赢彻科技、潍柴集团、地平线、紫光同芯、字节跳动、......

二级供应商(500+以上):

Upstream、ETAS、Synopsys、NXP、TUV、上海软件中心、Deloitte、中科数测固源科技、奇安信、为辰信安、云驰未来、信大捷安、信长城、泽鹿安全、纽创信安、复旦微电子、天融信、奇虎360、中汽中心、中国汽研、上海汽检、软安科技、浙江大学......

人员占比

快速扫盲CAN总线基础知识

公司类型占比

快速扫盲CAN总线基础知识

原文始发于微信公众号(谈思实验室):快速扫盲CAN总线基础知识

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月12日00:33:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   快速扫盲CAN总线基础知识https://cn-sec.com/archives/4050572.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息