错误管理
- 进行自动错误处理,包括自动消息重传和自动删除收到的错误消息。
- 如果主机需要,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 错误类型如下所示:
KOER |
场景 |
描述 |
---|---|---|
NO ERROR 没有错误 |
发送和接收方 |
成功接收 |
BIT ERROR 位错误 |
接收器 |
只能发生在 ACK 时隙。所有存储的数据均有效。 |
发送器 |
有效载荷总是无效的。包括 ID 的标头位可能是有效的。
|
|
FORM ERROR 格式错误 |
发送和接收器 |
仅包含数据框中的 FORM ERROR,包括 :
所有存储的数据均有效。 |
STUFF ERROR 填充错误 |
接收器 |
STUFF ERROR 的位置未知。所有存储的数据均无效。 |
发送器 |
只能在仲裁期间发生。所有存储的数据均无效。 |
|
ACK ERROR ACK 错误 |
接收器 |
仅当节点处于 LOM 中时才会发生。所有存储的数据均有效。 |
发送器 |
发送器只能在没有自我确认的环回模式下发生。所有存储的数据均有效。 |
|
CRC ERROR CRC 错误 |
接收器 |
所有存储的数据均无效。 |