CAN 错误计数器 TEC(传输错误计数器)在错误被动状态下不计数

问题描述 投票:0回答:1

我正在尝试设置总线关闭条件来观察 CAN 外设的行为。我正在使用 STM32F103 微控制器,并且正在尝试以下场景:

  1. 将 CAN H 至 CAN L 短路。
  2. 打开 CAN 总线并尝试传输。
  3. 将 CAN L 接地。
  4. 将 CAN 波特率指定为不正确的值并尝试通过网络进行通信。

在上述所有场景中,始终出现一个场景:TEC(传输错误计数器)计数到 128 (0x80),然后切换到错误被动状态(EPVF 设置为 1)。然而,尽管我不断收到错误条件(通过中断),但 TEC 保持不变,其类型包括 ACK 错误(LEC 寄存器 ID 0x03)、格式错误(LEC 寄存器 ID 0x02),甚至填充错误(LEC 寄存器ID 0x10)。这些错误不会影响 TEC 值,并且它不会按我的预期计数。

所以我的问题是:

  1. TEC 在错误被动状态下发生了什么导致其值不 尽管存在各种类型的错误,但仍会发生变化?
  2. 在 Error Passive 状态下,是否有任何异常导致 TEC 无法计数?
  3. 是否有任何特定条件或配置我应该考虑强制 TEC 在错误被动状态期间进行计数?

这是我的调试会话:

这是我的 CAN 配置图像:

注意:我已尝试禁用自动总线关闭管理,但结果仍然相同。

CAN 错误状态图:

有关 CAN 错误管理的更多信息:https://www.css electronics.com/pages/can-bus-errors-intro-tutorial

c embedded stm32 can-bus
1个回答
0
投票

几小时后,终于我找到了一篇文章,其中有一句有趣的台词:

当发送器发送错误标志时,TEC 增加 8。 例外 1:如果发送器处于错误被动状态并检测到 ACK 由于未检测到显性 ACK 且未检测到而发生错误 发送其被动错误标志时的显性位。 例外 2:如果 发送器发送错误标志,因为发生了填充错误 在仲裁期间,并且应该是隐性的,并且已被发送 为隐性,但监测为显性。

但是正如我所说,我已经设法得到不同类型的错误,例如Stuff和Bit错误,但仍然看不到总线关闭发生,那是因为我没有调整CAN_IER的BOFIE(总线关闭中断启用) (CAN 中断允许寄存器)打开。 因此,由于自动总线关闭恢复也已启用,因此发生了总线关闭,但在很短的时间内,人们无法看到寄存器更改(在调试会话中),它会自行恢复。

所以我已经配置了:

  1. BOFIE 为一。
  2. 将 CAN 预分频器更改为错误的值。
  3. 关闭自动恢复。

然后,在打开 CANoe 然后关闭 20 秒后发生总线关闭,这有助于在类型 0x2 和 0x1 上产生更多错误。

© www.soinside.com 2019 - 2024. All rights reserved.