Edit online

错误管理

3 Mar 2025
Read time: 1 minute(s)
关于错误管理, CANFD 控制器具有以下功能:
  • 进行自动错误处理,包括自动消息重传和自动删除收到的错误消息。
  • 如果主机需要,CANFD 控制器可以选择提供有关错误的详细信息,并通过中断向主机发出每个错误信号。

    主机上可以运行诸如 CANFD 总线监视器之类的应用程序。

每个 CANFD 节点都有三种错误处理状态:
  • 主动错误:节点在检测到错误时自动发送主动错误帧。
  • 被动错误:节点在检测到错误时发送被动错误帧,即不会向总线传输显性值,而是期待其它 CANFD 节点传输的错误帧。
  • 总线关闭:在出现太多错误后,节点会进行“总线关闭”,从而停止接触总线。
为了处理三种错误状态,每个 CANFD 节点都有两个错误计数器:发送错误计数器和接收错误计数器。两者都按照 CANFD 规范的定义递增和递减,并且节点在达到 CANFD 规范定义的计数器限定阈值时进入相应的错误状态。
  • 如果有错误,错误计数器会增加。
  • 有效帧传输或有效接收导致计数器递减。

CANFD 控制器如果接收到帧信息并且检测到错误,则丢弃接收到的帧信息,帧的发送方将重新传输该帧信息。RBUF 中的帧信息永远不会被有错误的帧信息覆盖。只有接收的有效帧信息才可能导致 RBUF 溢出。

  • 如果 RBALL = 1 ,则所有接收到的数据帧都会被存储,即使是有错误的数据帧。

    此条件也适用于回环模式。

    RBUF 中只存储数据帧,不存储错误帧或过载帧。如果 CiA 603 时间戳已启用 (TIMEEN = 1) 并且为 EOF (TIMEPOS = 1) 配置了时间戳,则在出现错误时会在错误帧的开头获取时间戳。大多数可能的错误只有在节点是帧的发送者时才会发生。在这种情况下,如果回环模式被激活,帧将仅存储在 RBUF 中。

  • 当 TECNT 或者 RECNT 的错误计数值达到 EWL 的配置值,则会触发 EIF 中断(当 EIE 使能)。

    EWL 的实际值应该为 (EWL + 1) × 8。

  • 控制器识别 CAN 总线上的错误并将最后一个错误事件存储在 KOER 中。每个新的错误事件都会覆盖之前存储的 KOER 值,KOER 随每个新错误而更新。

KOER 错误类型如下所示:

1. KOER 错误类型

KOER

场景

描述

NO ERROR 没有错误

发送和接收方

成功接收

BIT ERROR 位错误

接收器

只能发生在 ACK 时隙。所有存储的数据均有效。

发送器

有效载荷总是无效的。包括 ID 的标头位可能是有效的。
  • 检测过程不包括仲裁阶段的错误位 。
  • 帧的发送器在仲裁阶段检测到的填充位错误属于一个位错误,此时标头位无效,无法信任标头位。

    但如果标头与帧的预期标头匹配,则可用于进一步调查。

FORM ERROR 格式错误

发送和接收器

仅包含数据框中的 FORM ERROR,包括 :
  • CRC 分界符
  • ACK 分界符
  • EOF 位中的错误

所有存储的数据均有效。

STUFF ERROR 填充错误

接收器

STUFF ERROR 的位置未知。所有存储的数据均无效。

发送器

只能在仲裁期间发生。所有存储的数据均无效。

ACK ERROR ACK 错误

接收器

仅当节点处于 LOM 中时才会发生。所有存储的数据均有效。

发送器

发送器只能在没有自我确认的环回模式下发生。所有存储的数据均有效。

CRC ERROR CRC 错误

接收器

所有存储的数据均无效。