加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

虹科干货丨带你全面认识“CAN总线错误”

2023/09/26
1.1万
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
  • 方案介绍
    • 1.什么是CAN总线错误?
    • 2.CAN错误帧
    • 3.CAN总线错误类型
    • 4.CAN节点状态和错误计数器
    • 5.在实践中生成和记录CAN错误
    • 6.CAN错误帧记录的示例
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

在本文档中,我们将为您详细介绍CAN总线错误的相关知识,包括CAN总线错误的基础概念、CAN总线错误的类型、CAN错误帧和CAN节点错误状态,并通过实际的应用测试生成并记录CAN错误。

1.什么是CAN总线错误?

控制器局域网络(Controller Area Network, CAN)是当今汽车和工业自动化系统的重要标准。可靠性是CAN总线协议的核心优势之一,这使其成为安全关键应用的理想选择。但十分值得注意的是,错误处理对CAN的稳健性来说至关重要。

CAN总线错误的发生可能有多种原因,比如电缆故障、噪声、不匹配的终端电阻、CAN节点故障等。识别、分类和解决此类CAN错误是确保整个CAN系统持久性能的关键。错误处理可以识别和拒绝错误的信息,使发送者能够重新传输信息。此外,该过程有助于识别和断开持续传输错误信息的CAN节点。

错误处理是CAN标准和每个CAN控制器的内置部分。换句话说,每个CAN节点都以相同的方式处理故障识别和限制。下面我们做了一个简单的说明性示例:

具体步骤示例:

  • CAN节点1将消息传输到CAN总线,并读取它发送的每一位
  • 在这样做的过程中,它发现发送显性的一位被读取为隐性
  • 这是一个“位错误”,节点1会引发一个活动错误标志以通知其他节点
  • 实际上,这意味着节点1将6个显性位序列发送到总线上
  • 反过来,6个显性位被其他节点视为“位填充错误”
  • 作为响应,节点2和3同时引发活动错误标志
  • 此引发的错误标志序列构成“CAN错误帧”的一部分
  • CAN节点1,发送器,将其“发送错误计数器”(TEC)增加8
  • CAN节点2和3将其“接收错误计数器”(REC)增加1
  • CAN节点1自动重新传输消息
  • 结果,节点1将其TEC减少1,节点2和3将其REC减少1

2.CAN错误帧

在上述示例中,CAN节点“引发活动错误标志”,从而创建“错误帧”以响应检测到的CAN错误。

为了理解它是如何工作的,让我们首先看一个“正常”的CAN帧(没有错误):

图中,我们突出显示了CAN帧中的“位填充”。位填充是CAN标准的一个微妙但重要的部分。基本上它规定,每当CAN节点发送相同逻辑电平(显性或隐性)的五个位时,它必须发送相反电平的一个位。接收CAN节点会自动删除这个额外的位。此过程有助于确保网络的持续同步。

根据前面的示例,当CAN节点1在CAN消息传输期间检测到错误时,它会立即传输相同逻辑电平的6位序列-也称为引发活动错误标志。

正如前文所述,这样的序列违反了位填充规则——也称为“位填充错误”。此外,此错误对网络上的所有CAN节点都是可见的(与导致此错误标志出现的“位错误”相反)。因此,错误标志的增加可以被视为一种“全局性”错误发现的方式,确保通知每个CAN节点。

请注意,其他CAN节点会将活动错误标志视为位填充错误。作为响应,它们还会引发一个活动错误标志。

正如我们后面将解释的,区分错误标志很重要。特别是,第一个错误标志(来自“发现”节点)通常被称为“主要”活动错误标志,而后续“反应”节点的错误标志被称为“次要”活动错误标志(s)。

2.1 CAN错误帧示例

示例1:6位错误标志

在本示例中,所有CAN节点同时发现CAN报文中存在错误并同时发出错误标志。结果是错误标志全部重叠并且显性位的总序列总共持续6位。在这种情况下,所有CAN节点都将自己视为“发现”CAN节点。

同时发现这种类型的错误帧在实践中不太常见。但是,它可能是由于格式错误(例如CRC定界符是显性而不是隐性)或CAN发送器在写入CRC字段期间遇到位错误而发生的。

示例2:12位错误标志

在本示例中,CAN节点1传输显性位,但将其读取为隐性-这意味着它发现了位错误。它立即发送6个显性位的序列。其他节点仅在读取完整的6位后才发现位填充错误,之后它们同时提高错误标志,从而产生随后的6个显性位序列-即总共12个。

示例3:9位错误标志

在本示例中,当CAN节点1发现位错误并开始发送6个显性位时,它已经发送了3个显性位序列。一旦通过主要活动错误标志的一半,节点2和3识别位填充错误(由于3个初始显性位后面跟着另外3个显性位)并开始提高它们的错误标志。结果是来自错误标志的显性位序列变为9位长。

上述引发错误标志的逻辑反映在我们所谓的“活动”CAN错误帧中。请特别注意各个节点引发的次要错误标志如何相互重叠——以及主要和次要标志也可能如何重叠。结果是来自引发错误标志的主要位序列可能是6到12位长。

该序列始终以8个隐性位序列终止,标志着错误帧的结束。实际上,活动错误帧可能在错误CAN帧中的不同位置“开始”,这取决于何时发现错误。然而,结果将是相同的:所有节点都丢弃错误的CAN帧,发送节点可以尝试重新发送失败的消息。

如果CAN节点已从其默认的“活动”状态转变为“被动”状态,那么它将只能引发所谓的“被动错误标志”。被动错误标志是6个隐性位的序列。在这种情况下,区分由发送节点和接收节点引发的被动错误标志是相关的。

示例4:发送器是被动错误

如图所示,如果发送器(例如我们示例中的CAN节点1)引发被动错误标志(例如响应位错误),这将对应于6个隐性位的连续序列。这又被所有CAN节点检测为位填充错误。假设其他CAN节点仍处于其错误活动状态,它们将引发6个显性位的活动错误标志。换言之,无源发送器仍然可以“传达”CAN帧是错误的。

示例5:接收器是被动错误

相反,如果接收器产生被动错误标志,这实际上对总线上的所有其他CAN节点“不可见”(因为任何显性位都胜过隐性位序列)。实际上,这意味着错误被动接收器不再具有破坏其他CAN节点传输的帧的能力。

3.CAN总线错误类型

CAN总线协议规定了5种CAN错误类型:

  • 位错误[发送器]
  • 位填充错误[接收器]
  • 格式错误[接收者]
  • ACK应答错误(应答)[发送器]
  • CRC校验错误(循环冗余校验)[接收器]

在前文中,我们已经对位错误和位填充错误有所了解,这两者都是在位级别进行评估的。其余三种CAN错误类型在消息级别进行评估。下面我们详细介绍每种错误类型。

1)位错误

CAN总线上的每个CAN节点都会在任何给定时间监控信号电平——这意味着发送CAN节点也会“读回”它发送的每一位。如果发送器读取的数据位级别与其发送的内容不同,则发送器会将其检测为位错误。但是,如果在仲裁过程中(即发送CAN ID时)发生位不匹配,则不会将其解释为位错误。类似地,应答时隙(ACK字段)中的不匹配不会导致位错误,因为ACK字段特别要求来自发送器的隐性位被来自接收器的显性位覆盖。

2)位填充错误

如前文所述,位填充是CAN标准的一部分。它规定在同一逻辑级别的每5个连续位之后,第6位必须是补码。这是通过提供上升沿来确保网络的持续同步所必需的。此外,它确保位流不会被误解为错误帧或标记消息结束的帧间空间(7位隐性序列)。所有CAN节点都会自动删除多余的位。

如果在CAN消息内(在SOF和CRC字段之间)的总线上观察到具有相同逻辑电平的6位序列,则接收器将其检测为位填充错误,即填充错误。

3)格式错误

此消息级别检查利用CAN消息中的某些字段/位必须始终处于某个逻辑级别的事实。具体来说,1位SOF必须是显性的,而整个8位EOF字段必须是隐性的。此外,ACK和CRC界定符必须是隐性的。如果接收器发现这些位中的任何一个具有无效的逻辑电平,则接收器将其检测为格式错误。

4)ACK应答错误(应答)

当发送器发送CAN报文时,它将包含ACK字段(应答),发送器将在其中发送一个隐性位。所有侦听CAN节点都应在该字段中发送显性位以验证消息的接收(无论节点是否对消息感兴趣)。如果发送器未读取ACK时隙中的显性位,则发送器将其检测为ACK错误。

5)CRC校验错误(循环冗余校验)

每个CAN报文都包含一个15位的循环冗余校验和字段。在这里,发送器已经计算了CRC值并将其添加到消息中。每个接收节点也会自己计算CRC。如果接收器的CRC计算与发送器的CRC不匹配,接收器会将其检测为CRC错误。

4.CAN节点状态和错误计数器

显然,CAN错误处理有助于去除错误消息,并使CAN节点能够重新进行错误消息的传输。这确保了短暂的局部干扰(例如来自噪声)不会导致无效/丢失数据。相反,发送器将会尝试重新发送消息。如果它赢得仲裁(并且没有错误),则消息发送成功。

但是,如果错误是由于传输节点中的系统故障引起的怎么办?这可能会触发发送/去除相同消息的无限循环——干扰CAN总线。这就是CAN节点状态和错误计数器发挥作用的地方。

CAN错误跟踪的目的是通过降低有问题的CAN节点的权限来限制错误。

具体来说,让我们看看三种可能的状态:

  • 活动错误:这是每个CAN节点的默认状态,在该状态下它能够传输数据并在检测到错误时引发“活动错误标志”
  • 被动错误:在这种状态下,CAN节点仍然能够传输数据,但现在在检测到错误时会引发“被动错误标志”。此外,CAN节点现在除了等待3位中断时间外,还必须等待额外的8位(也称为暂停传输时间)才能恢复数据传输(以允许其他CAN节点控制总线
  • 总线关闭:在此状态下,CAN节点将自身与CAN总线断开连接,无法再传输数据或引发错误标志

每个CAN控制器都会跟踪自己的状态并采取相应的行动。CAN节点根据其错误计数器的值转换状态。具体来说,每个CAN节点都会跟踪发送错误计数器(TEC)和接收错误计数器(REC):

  • 如果REC或TEC超过127,则CAN节点进入被动错误状态
  • 如果TEC超过255,则CAN节点进入总线关闭状态

那么,错误计数器如何变化呢?在我们了解如何增加/减少错误计数器的逻辑之前,让我们重新审视CAN错误帧以及主要/次要错误标志。从CAN错误帧图示中可以明显看出,在其自己的6个显性位序列之后观察到显性位的CAN节点将知道它引发了主要错误标志。在这种情况下,我们可以将此CAN节点称为错误的“发现者”。

起初,让一个CAN节点反复发现错误并通过在其他节点之前发出错误标志来迅速做出反应,这听起来可能是积极的。然而,在实践中,发现者通常也是导致错误的罪魁祸首。

5.在实践中生成和记录CAN错误

测试1:没有CAN总线错误

为了便于对照,我们设置了没有CAN总线错误的测试:一个 CANedge2 的“发送器”将数据发送到另一个 CANedge2 的“接收器”,并且两者都能够记录CAN总线错误。

测试2:移除CAN总线终端电阻

在这个测试中,我们在日志会话过程中移除了 CAN 终端电阻。这可以有效地将位电平设置为显性。同时,CANedge2发送器立即开始记录位错误(当它尝试发送隐性位但读取显性位时会发生这种情况)。CANedge2 接收器在检测到 6 个连续显性位时记录位填充错误。记录这些错误,直到再次添加终止。

在记录来自车辆、机器等的数据时,缺少终端电阻似乎并没有影响,但是,在使用“测试台”设置时,这个问题非常常见,并可能导致混淆,因为它难以与非活动CAN总线区分开来。因此,在CANedge数据记录仪上启用错误帧记录帧对于故障排除而言是十分有效的。


发送器位错误


接收器位填充错误

测试3:设置错误的波特率

在这个测试中,我们将CANedge接收器节点配置为具有492.872K波特率,而发送器的波特率为500K,这是一个相当大的差异,并导致发送器的ACK错误和接收器的位填充错误。在更现实的场景中,各个节点的波特率配置的较小差异可能会导致间歇性错误帧,从而导致消息丢失。

这个例子比较极端,然而,在实践中,我们有时会看到使用标准比特率(250K、500K、……)的CAN总线,但其特定的位时序设置与通常推荐的设置不同。这不会导致通信完全关闭,但会导致几个百分比的周期性帧丢失。为了解决这个问题,可以在CANedge配置中构建一个“预定义比特率”,本质上是设置位时序以更好地匹配正在记录的CAN总线。


发送器ACK错误


接收器位填充错误

测试4:移除应答CAN节点

在本次测试中,我们使用了三个配置如下的 CANedge 单元:

  • CANedge1:配置为应答数据
  • CANedge2 A:配置为“静默模式”(无确认)
  • CANedge2 B:配置为每 500 ms 传输一个 CAN 帧

在默认设置中,数据由 CANedge2 B 传输到 CAN 总线上并无错误记录。但是,如果我们从总线上移除 CANedge1,则不再有任何 CAN 节点来确认发送器发送的帧。结果,发送器检测到ACK 错误。作为响应,它增加其发送错误计数器并在 CAN 总线上产生活动错误标志。这些又由 CANedge2 A(它静默监控总线)记录为格式错误。

CANedge之所以会记录格式错误,是因为发送器在识别出ACK时隙中缺少显性位时将其提高,一旦接收器在随后的EOF字段中观察到显性位(本该是隐性的),就会检测到格式错误。

很明显,当TEC从0增加到16x8=128时,发送器会广播16个主动错误标志。发送器现在已超过TEC的阈值127并进入被动错误模式。因此,发送器仍然会遇到ACK错误,但现在只会引发被动错误标志(接收器不可见)。在这一点上,发送器不断尝试发送相同的帧,并且接收器不断记录这个重传序列。

这种类型的错误是我们在技术支持中经常遇到的错误。具体来说,用户会尝试使用我们的CAN记录器来记录来自单个CAN节点的数据(例如从CANmod传感器CAN模块),如果他们决定在这样的安装中启用CANedge上的“静默模式”,则没有CAN节点将确认单个CAN节点广播数据,这样得到的结果大概率将是空日志文件,或充满相同CAN帧重传的日志文件。

发送器ACK错误


接收器格式错误

测试5:CAN帧冲突(无重传)

设置CAN总线时,避免CAN ID重复是关键,否则可能会导致帧冲突,因为两个CAN节点可能都认为他们已经赢得了仲裁,并同时开始传输它们的帧。

为了模拟这一点,我们使用与测试4相同的设置。此外,我们连接了一个PCAN-USB设备作为辅助发送器。CANedge2发送器现在配置为每10ms输出一个CAN ID为1且有效负载为8个0xFF字节的CAN帧。此外,我们将CANedge2配置为禁用因错误中断的帧的重新传输。PCAN-USB每2ms输出一个相同的CAN帧,有效载荷的第一个字节更改为0xFE。PCAN设备已启用重传。

这种设置会迅速产生帧冲突,从而导致CANedge和PCAN发送器检测到位错误。作为对此的响应,两者都会引发一个活动错误标志,CANedge接收器将其检测为位填充错误。PCAN设备立即尝试重新传输并成功,而CANedge等待进一步传输,直到要发送下一个消息。

这种类型的错误当然不应该发生在例如汽车中,因为设计和测试过程将确保所有 CAN 节点通过全球唯一的 CAN 标识符进行通信。但是,如果您安装第 3 方设备(例如传感器到 CAN 模块)以将数据注入现有 CAN 总线,则很容易出现此问题。如果您不确保外部 CAN 节点的 CAN ID 的全局唯一性,您可能会导致帧冲突,从而导致 CAN 总线上的错误。如果您的外部 CAN 节点广播具有高优先级 CAN ID 的数据,这一点尤其重要,因为您可能会影响安全关键 CAN 节点。

PCAN发送器位错误


CANedge发送器位错误

CANedge接收器位填充错误

测试6:CAN帧冲突(包括重传)

在这个测试中,我们使用与之前相同的设置,但在CANedge2发送器上启用重传。在这种情况下,帧冲突会导致一系列后续帧冲突,因为CANedge2和PCAN-USB设备都试图重新传输其中断的消息。

由于产生的位错误,两者都会引发总共16个活动错误标志,它们被静默CANedge2接收器检测为位填充错误。然后两个发送器进入错误被动模式并停止产生主动错误标志,这意味着它们都不能破坏总线上的CAN帧。结果,其中一个发送器将成功传输完整的消息,从而结束重传,并使两个设备都能恢复传输。但是,这仅持续几秒钟,然后发生另一次碰撞。

冲突处理是一个很好的例子,说明CAN错误处理在“关闭”潜在有问题的序列和使CAN节点能够恢复通信方面很有效。如果发生帧冲突,很可能两个CAN节点都将设置为尝试重传,如果不是错误处理和限制,则将导致阻塞。

虹科CAN/LIN数据与错误记录器

虹科CANedge1让您可以轻松地将数据从2xCAN/LIN总线记录到8-32GB的SD卡中,并支持记录CAN/LIN错误。只需将其连接到汽车或卡车即可开始记录-并通过免费软件/API解码数据。此外,升级版CANedge2添加了WiFi功能,让您可以将数据自动传输到您自己的服务器,并通过无线方式更新设备。

6.CAN错误帧记录的示例

1.OEM原型车中的CAN总线诊断

汽车OEM可能需要在后期原型测试期间在现场记录CAN错误帧。通过部署CANedge,OEM工程团队将能够根据实际CAN信号(速度、RPM、温度)以及与原型系统中较低层CAN通信相关的问题进行故障排除。如果感兴趣的问题是间歇性的,例如每月只发生一次或两次,这一点尤其重要。在这种情况下,CAN总线接口不太适合,因为拥有成本效益高的设备以实现可扩展部署以更快地进行故障排除变得越来越重要。虹科车辆网络团队在车用CAN总线方面有着十分丰富的技术积累,欢迎通过hongchesys@hkaco.com联系虹科车辆网络团队。

2.远程排除机器中的CAN错误

OEM或售后市场用户可能需要在他们的机器中捕获罕见的CAN错误事件。为此,他们部署了一个CANedge2来记录CAN数据和相关的错误帧,并通过WiFi自动将数据上传到他们自己的云服务器。在这里,错误会被自动识别,并向工程团队发送警报,以便立即诊断和解决问题。虹科工业控制团队在CAN总线等工业通讯协议方面有着十分丰富的技术积累,欢迎通过hongconsys@hkaco.com联系虹科工业控制团队。

联系虹科工程师:13660244187

联系方式链接:https://tl-tx.dustess.com/uXuUI7m5M0

  • 虹科干货丨带你全面认识“CAN总线错误”.docx

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
L6206D 1 STMicroelectronics DMOS dual full bridge driver

ECAD模型

下载ECAD模型
$8.42 查看
MMA8451QR1 1 NXP Semiconductors SPECIALTY ANALOG CIRCUIT, QCC16

ECAD模型

下载ECAD模型
$3.53 查看
A3992SLPTR-T 1 Allegro MicroSystems LLC Stepper Motor Controller, 1.5A, NMOS, PDSO24, 1.2 MM HEIGHT, LEAD FREE, MO-153ADT, TSSOP-24

ECAD模型

下载ECAD模型
$1 查看

相关推荐

电子产业图谱

虹科是一家资源整合及技术服务落地供应商,与全球顶尖公司深度技术合作,专注于制造业、汽车、生物、医药、测试与测量、广播电视与媒体、通信、网络安全、光电等领域,为客户提供:智能自动化、工业物联网、智能感知、数字化+AR、光电、网络安全、测试测量、卫星与无线通信、医药环境监测与验证、生命科学、汽车电子、汽车维修诊断、云科技等解决方案。虹科始终致力于为行业客户提供创新及前端的产品和技术解决方案,为科技社会发展助力加码。