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-Q1:当其他器件干预总线时、TCAN4550的工作模式是什么?

Guru**** 2893300 points

Other Parts Discussed in Thread: TCAN4550

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/940231/tcan4550-q1-what-is-the-tcan4550-operation-mode-when-other-device-intervene-the-bus

器件型号:TCAN4550-Q1
主题中讨论的其他器件:TCAN4550

Hiteam、

我们将在汽车系统中测试 TCAN4550。 当系统上电时、TCAN4550 ECU 以正常模式运行并保持发送数据。 同时、当我们在总线上连接另一个 CAN 器件(雷达模块与 CAN)时、TCAN4550将停止工作。 并似乎进入睡眠模式。  

对于上述情况、您能帮助澄清一下、TCAN4550会发生什么情况? 以及我们如何在系统级处理该情形并使 TCAN4550恢复   

如果我们在系统上电之前将 TCAN4550 ECU 与雷达模块连接、则 TCAN4550 ECU 与雷达模块的交互将正常工作。  

此致、

Alex

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

    尊敬的 Alex:

    很长一段时间! Jonathan 将帮助跟进您的帖子。

    您是否有 方框图摘要来分享系统的连接方式以及任何定序/时序相关信息(您可以直接通过电子邮件发送)。

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

    尊敬的 Alex:

    我们将需要监控和读取一些状态寄存器以确定正在发生的情况、但我根据您的描述初步考虑了可能发生的情况。

    首先、当您说"似乎进入睡眠模式"时、您是否看到 SPI 通信开始失败、电压或电流电平会发生显著变化、或者通过一些其他可观察的事件?  数据表中的器件状态图给出了可能导致器件进入睡眠模式的因素的方框图、这些因素可能通过特定 SPI 写入、UVio 欠压计时器过期或 SWE 计时器过期来实现。   您正在进行哪些类型的观察?  是否也设置了任何中断位来指示任何错误条件?

    此外、还有其他原因、即使器件不处于睡眠模式、TCAN4550也可能在总线上停止通信。  我认为、由于错误计数器增加到超过允许的限值、器件进入总线关闭状态的可能性更大。  当器件被"添加"到总线时、它们可以从根本上改变总线的阻抗、增加额外的反射和/或负载、这些反射和/或负载会导致时序错误、或者它们的设置可能与 TCAN4550的设置不兼容、从而引发错误标志。  如果新节点正确或错误地放置错误标志、TCAN4550发送错误计数器(TEC)将增加到进入名为 Bus Off 的保护状态的点、并且它将停止在总线上传输并设置 CCCR 寄存器中的 Initialization init 位。  MCU 必须清除此位、器件才能再次传输。

    当节点被添加或从总线中移除时、总线上会出现一些中断、这种情况并不少见。  这些类型的中断"不应该"、但确实会发生。

    您能否监控以下对初始调试非常重要的寄存器:

    0x0800 (包含 MODE_SEL)

    0x0820 (器件中断)

    0x0824 (MCAN 中断)

    0x1018 (包含 INIT 位的 CC 控制寄存器)

    0x1040 (包含 TX 和 RX 错误计数器的错误计数器寄存器)

    0x1044 (协议状态寄存器、包含最后接收到的错误类型的详细信息)

    0x1050 (MCAN 中断)

    可选寄存器、可提供关于正在发送和接收的消息操作的更多详细信息:

    0x10A4 (如果使用 RX FIFO 0、则为 RX FIFO 0状态)

    0x10B4 (如果使用 RX FIFO 1、则为 RX FIFO 1状态)

    0x10C4 (TX FIFO/队列状态)

    0x10CC (TX 缓冲区请求挂起、以查看是否有任何消息等待发送)

    0x10D8 (TX 缓冲器传输发生、以查看是否正在传输消息)

    0x10F4 (TX 事件 FIFO 状态、如果已配置)

    当我们从寄存器中获得更多详细信息后、我们可以更好地确定根本原因。

    此致、

    Jonathan

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

    你好 Ravi、已经有一段时间了。

    已连接测试系统模块供您参考。

    Jonathan、您好、感谢您的支持。

    客户使用多种上电序列方法测试系统。在下面的一种情况下、他们遇到了一些问题、希望澄清原因并在 MCU 编码中加以防止。  

    首先启动 TCAN4550 ECU (保持发送数据)、然后连接雷达(供电)、然后连接 CAN 读取器。

    执行操作过程后、Rnd 发现 TCAN4550将停止发送数据、需要回收电力以进行恢复。  

    我认为、正如您所说的、由于总线上的意外中断、它更有可能进入总线关闭状态。 (在查看器件状态图后不应是睡眠模式)

    我将不得不转储您提到的寄存器并在此处进行更新。

    如果就像您说的那样、您能否共享有关如何在发生这种情况时从总线关闭状态恢复中释放 TCAN4550的代码和流程?   

    谢谢。

    此致、

    Alex

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

    尊敬的 Alex:

    Bus_off 恢复序列在 ISO 11898-1:2015 CAN 标准中定义、但在数据表中进行了总结、并在协议状态寄存器(PSR)寄存器说明之后添加了注释。  但是、我会简要介绍一下、但建议您阅读该标准、以便更全面地了解该标准。

    基本上、器件将监控 CAN 总线上的消息、并根据标准检查它们是否存在协议错误、无论它们被配置为接受还是拒绝消息、并且在消息未检测到错误时提供确认(ACK)脉冲。  如果它们不处于错误被动状态、它们还可以发送错误标志、但我现在不会这样做。

    如果它们在接收到的消息中检测到错误、则会增加 RX 错误计数器(REC)。  如果它们检测到正在传输的消息有错误、或者另一个节点报告了带有错误标志的错误或消息未被确认、则器件将增加其 TX 错误计数器(TEC)、并尝试再次传输消息、直到无错误地接收到消息。  但是、如果 TEC 超过256、它将认为自己有问题、然后器件将停止所有总线活动、从而不会干扰来自其他节点的"良好"通信。  

    TCAN4550具有"正常运行"模式和"初始化"模式、该模式通过控制寄存器(CCCR)(寄存器0x1018)的 INIT 位(位0)进行设置。  这是同一个位、必须在器件初始化和配置过程开始时设置为"1"、然后在结束时设置回"0"  由于 TCAN4550除非是"正常运行"模式、否则无法在总线上进行通信、因此将该初始位设置为"1"将阻止器件在 CAN 总线上发送任何数据。

    为了退出 BUS_OFF 状态并使器件恢复正常运行、MCU 必须将 INIT 位设置回'0'。  这将允许器件开始参与总线活动、但之后、必须移除错误源才能使器件不重新进入 Bus_off 状态。  这是标准中更好定义的过程的一部分、但基本上需要良好的无差错流量才能使器件完全退出状态。  一旦 INIT 位被 MCU 清零、它将等待总线出现129个空闲位(129 * 11个连续隐性位)、然后恢复正常运行。  器件每次监控11个隐性位序列(这是消息之间的最短时间)时、都会在 PSR.LEC 中设置 Bit0Error 代码、允许 MCU 根据需要监控 Bus_off 恢复序列、并使用 ECR.REC 对这些序列进行计数。  在 BUS_OFF 恢复序列结束时、错误管理计数器将被复位。

    我知道这是一个很长的解释,但我试图阻止你跟踪很多不同的来源。  但总而言之、MCU 基本上只需要执行以下操作:

    1. 定期检查协议状态寄存器(PSR)的 BO 位(位7)以确定它是否处于 Bus_Off 状态。
    2. 如果它处于 BUS_OFF 状态、那么将 CCCR 寄存器(0x1018)的 INIT 位(位0)设置为"0"
    3. 等待总线上的活动向其发送所需的隐性位周期、以使器件完全退出恢复序列。

    我希望这一点是有益和明确的。

    听起来好像将雷达单元引入总线会导致中断、从而导致 TCAN4550对传输错误进行计数。  如果将器件配置为自动重试发送失败消息、则256阈值会迅速突破。  一旦雷达加电、初始化并准备好正常运行、TCAN4550将不会检测发射错误、这就是它们在对 TCAN4550进行下电上电后可以进行通信的原因。  他们所做的是通过重新初始化整个器件来清除 Bus_off 状态。  不过、只需识别 Bus_off 状态并复位 init 位、便可更巧妙地完成此操作。

    此致、

    Jonathan