This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TCAN4550:TCAN(m_CAN 驱动器)的动态位速率/模式开关问题

Guru**** 2914610 points

Other Parts Discussed in Thread: TCAN4550

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1633430/tcan4550-dynamic-bitrate-mode-switching-issue-with-tcan-m_can-driver

器件型号: TCAN4550

我们在 CAN 模式和比特率的动态切换过程中遇到 TCAN 器件问题。

最初、CAN 接口配置为高速 (HS) 模式、比特率为 500kbps。 取消初始化接口后、我们将其重新配置为 CAN-FD 模式、标称比特率为 1Mbps、数据比特率为 3Mbps。 但是、在这种情况下:

  *CAN-FD 数据(64 字节)传输不起作用。
  *1 Mbps 的传统 CAN 通信也失败
  *500 kbps 的传统 CAN 通信正在工作,即使接口已使用更新的配置重新初始化。

经过调查、我们观察到 tcan4x5x 驱动器的动态开关无法正常工作。 通过查看驱动器和寄存器行为可以发现、MCAN_CCCR.寄存 器中的初始化位 (INIT 和 CCE) 仅在驱动器加载期间设置一次。 由于这些位在运行时重新配置期间不会重新启用、因此默认情况下不支持模式和比特率的动态切换。

为了解决该问题、我们修改了 m_can.c 驱动器、如下所示:

diff -Arun a/drivers/net/can/m_can/m_can.c B/drivers/net/can/m_can.c 
--- a/drivers/net/can/m_can/m_can.c 2026年03月17日  11:17:38.166965563 +0530
++ B/drivers/net/can/m_can/m_can.c 2026年04月01日  18:20:24.215708731 +0530
@@–1253,6 +1253,7 @@
     CCCR &=~μ s (CCCR.TEST | CCCR.MON | CCCR.BRSE | CCCR.FDOE |
         CCCR.NISO);
 
+    cccr =(CCCR.INIT | CCCR.CCE);
     /*只有 3.2.x 实现了 NISO 位*/
     if (cdev->can.ctrlmode & can_CTRLMODE_FD_non_iso)
       CCCR |= CCCR.NISO;
@@–1265,6 +1266,8 @@
   if (cdev->can.ctrlmode & can_CTRLMODE_LISTENONLY)
     CCCR |= CCCR.MON;
 
+  m_can_write (cdev、m_can_ccr、CCCR.INIT);
+  m_can_write (cdev、m_can_ccr、(CCCR.INIT | CCCR.CCE);
   /*写入配置*/
   M_can_write (cdev、M_can_ccr、cccr);
   M_CAN_WRITE (cdev、M_can_test、test);


发生这些变化后、CAN 模式和比特率之间的动态切换现在可以按预期工作。

我们希望您对这一修改进行审查、并确认它不会引入任何意外的副作用。

此外、我们想了解为什么驱动程序中默认未启用此功能。 是否有特定的设计限制或硬件限制可阻止动态重新配置而无需明确重新进入 INIT_CCE 模式?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Akash:

    我已经将这个问题分配给了我们的 TCAN4550 专家。 他今天不在办公室,但他应该很快得到你的回应。  

    此致、

    Ethan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Akash、

    CAN 总线上的所有器件都必须配置相同的数据速率设置、以避免通信错误。  因此、如果所有其他节点都没有同时切换到新的比特率、则单个节点的比特率动态切换会导致通信错误。  我假设这就是驱动程序仅在第一次初始化期间初始化比特率的原因、因为动态切换比特率并不常见、因为比特率配置通常是由 PER 确定的。

    如果您要更改比特率配置、则在更改任何 MCAN 配置位(包括标称和数据比特率配置寄存器)之前、必须将 CCCR.INIT 和 CCCR.CCE 位都设置为“1"。“。  完成该操作后、您需要将 CCCR.INIT(以及(可选)CCCR.CCE) 位设置回“0",“,以、以使 MCAN 控制器退出受保护状态、并重新初始化该位以实现 CAN 总线通信。

    我会注意到、这主要是一个器件级支持论坛、而不是 Linux 支持论坛。  我的专业知识与 TCAN4550 器件有关、很高兴为您解决与器件功能配置或使用相关的任何器件级问题。  Linux 驱动程序已上传到 Linux 内核中、不是我直接支持的内容。

    此致、

    Jonathan