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**** 2800835 points

Other Parts Discussed in Thread: TCAN4550, TCAN4550-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/944400/tcan4550-q1-about-the-functional-modes-of-the-tcan4550

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

您好!

我目前正在为我的应用研究 TCAN4550、我需要对器件模式的工作原理进行一些说明(即正常、待机、睡眠)。 我现在不会进入失效防护模式、因为我需要先了解前三种模式。 在我的设置中、mA 微控制器通过芯片的数字 GPIO 引脚来驱动 TCAN4550芯片、尤其是 nINT 和 nWKRQ 引脚来管理所有中断。 在这种情况下、nWKRQ 被配置为唤醒请求中断。

我想了解从待机到正常以及从睡眠到正常的运行差异。 以下是我的理解:

  • 待机至正常:在发生本地唤醒(LWU)或 CAN 唤醒(WUP)事件时,nWKRQ 引脚将被拉至低电平(nINT,因为它是所有中断的逻辑 OR)。 在这种情况下、主机微控制器只需通过 SPI 总线将0b10写入0x0800寄存器的 MODE_SEL 位字段、然后传入的帧将由 TCAN4550进行确认。
  • 睡眠到正常:LWU 或 WUP 事件将导致芯片自动从睡眠模式转换到待机模式。 此时、nWKRQ 引脚将被拉低(再次由 nINT 镜像)。 在这种情况下、主机微控制器必须完全重新配置 TCAN4550以确认传入帧。

下面是我的问题。 如果我刚才解释的是准确的:
主机微控制器在发生 LWU/WUP 事件时、如何在由 nWKRQ 引脚触发的中断期间知道 TCAN4550是处于待机模式还是处于睡眠模式。 我需要知道如何尽可能干净地处理唤醒、现在还不清楚我何时需要通过 SPI 写入简单地转换为正常、或者我是否需要完全重新配置组件。

必然的问题:
当器件处于待机状态且由于我正在发送 CAN 帧而发生 WUP 时、它不会立即确认传入帧。 它通常采用2-10 CAN 帧的自动重发送(取决于传输速率以及 nWKRQ 中断的处理方式)。 这是因为微控制器和 TCAN4550之间的 SPI 事务需要读取然后写入0x0800寄存器。 如果通过 nINT 中断处理它、则需要更长时间、因为有必要读取中断寄存器以确定它是否确实是一个需要处理的唤醒事件。
除了提高 SPI 通信的速度和效率之外,是否有办法使此确认时隙更快地发生?

感谢你的帮助。
此致、

路易

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

    注意:此帖子已由 Jonathan 编辑、以澄清和更正原始帖子中的某些陈述。 编辑的内容为粗体字体。

    您好 Louis、

    感谢您关注 TCAN4550-Q1!

    我建议您参考 TCAN4550-Q1数据表中的器件状态图(图23)、以了解导致器件模式变化的事件的详细信息。 我认为、根据您的描述、有一些事情可能需要澄清或更正。 我将努力清楚地处理这些问题。

    TCAN4550-Q1上电并唤醒进入待机模式、等待 MCU 进行配置。 在待机模式下、器件无法发送、接收或确认 CAN 总线上的任何消息、如果 MCU 刚刚上电或从睡眠模式转换、则需要配置所有器件寄存器。 只有在该配置序列结束时、才能通过工作模式和引脚配置寄存器0x0800[7:6]的 MODE_SEL 位字段将器件设置为正常模式。 如果 MCU 已配置器件并将其置于待机模式、则器件将保留配置设置、并且在通过 MODE_SEL 位字段转换至正常模式之前无需重新配置。 一旦器件进入正常模式、它将开始参与 CAN 总线上的活动。 这就是为什么在将器件置于正常模式之前配置器件很重要的原因、因为不完整的配置可能会导致 CAN 错误。

    当器件处于待机或正常模式时、可通过相同的 MODE_SEL 寄存器位将器件置于睡眠模式。

    但是、如果器件处于待机模式、则如果睡眠唤醒错误计时器(SWE_DIS)超时、它也可以自动转换回睡眠模式。 上电或器件退出睡眠模式的唤醒事件时、将启动一个4分钟计时器、并且必须禁用该计时器、或者必须在计时器到期之前配置器件并将其置于正常模式、否则器件将转换回睡眠模式。 这是一种失效防护功能、可防止器件在意外情况下因噪声或其他因素退出睡眠模式。

    总而言之、该器件是:

    1)    断电(不向器件提供 Vsup)

    2)    在睡眠模式下(除唤醒检测电路外、几乎完全断电)

    3)    处于待机模式(完全供电但未完全配置、并且不会参与 CAN 总线上的活动)

    4)    在正常模式下(全功率、完全配置、并且主动参与 CAN 总线)

    当器件处于睡眠模式且通过 WAKE 引脚上的 LWU 或 CAN 总线上的 WUP 发生唤醒事件时、TCAN4550-Q1将自动转换为待机模式、 抑制(INH)引脚将被驱动为高电平 VSUP 电压、VSUP 电压通常连接到 LDO 或直流/直流转换器的使能引脚、该转换器为 MCU 和 TCAN4550-Q1提供 VIO 电压轨。 当 VIO 电源轨处于活动状态时、MCU 将唤醒并将 TCAN4550-Q1配置为初始化过程的一部分。 这样、除了 TCAN4550-Q1内部的唤醒检测电路外、整个电路板都可以置于睡眠状态。

    但是、并非所有系统都希望使用 INH 引脚唤醒电路板的电源、因此唤醒请求引脚(nWKRQ)也可用于向 MCU 指示 TCAN4550-Q1已检测到唤醒事件并转换到待机模式。 在这种情况下、只要器件不处于睡眠模式(这模拟 INH 功能)、nWRQ 引脚将转换为低电平并被锁存为低电平、或者在中断寄存器中的唤醒标志被清除之前被锁存为低电平。

    如果器件通过 MCU 更改 MODE_SEL 位字段不控制的事件进入睡眠模式、则已设置中断寄存器(0x0820[23])的睡眠模式状态(SMS)位。 这可用于指示器件在唤醒事件期间处于睡眠模式。 您可以使用此位作为指示器件需要重新配置的一个指示、因为在睡眠模式下所有配置寄存器值都将丢失。

    当器件处于待机模式时,INH 引脚已处于高电平,不能用作唤醒事件发生的指示,器件将只提供一个唤醒中断(LWU 或 CANINT)。 如果启用了 nINT 引脚、这可以通过 nINT 引脚来实现;如果在寄存器0x0800[8]中配置为唤醒请求中断、则可以通过 nWKRQ 引脚来实现。 但是在待机模式下、发送器不发送数据、接收器也不接受数据、并且器件在 MCU 相应地设置 MODE_SEL 位字段将任何消息置于正常模式之前不会向任何消息发送 ACK 脉冲。

    我希望这是对器件模式以及转换期间发生的情况的清晰概述。

    为了解决您的必然问题,我希望确保我们正确使用“确认”术语。 CAN 标准使用术语“确认”作为一个脉冲,该脉冲将在活动接收节点接收到无错误消息后立即放置在 CAN 总线上。 由于 TCAN4550-Q1在完全配置并处于正常模式之前不是“活动”节点,因此它永远不会“确认”CAN 总线上的 WUP。 如果您在总线上重复发送消息以用作唤醒模式,则 TCAN4550-Q1必须完成此配置过程并处于正常模式,然后才能参与 CAN 总线活动并“确认”总线上的任何消息。

    由于唤醒模式告诉节点从睡眠状态唤醒、因此通常不会接收到确认信号。 因此,我认为您使用术语“确认”来指代 TCAN455-Q1的“响应”,作为设备处于唤醒状态并在正常模式下运行的“确认”或“验证”形式。 这种情况尤其需要一些时间、因为如果器 件当前已配置且处于待机模式、则需要 MCU 更改 MODE_SEL 位字段;如果器件处于睡眠模式、则需要完全重新配置。 但是、一旦器件被配置并处于正常模式、器件将自动在 CAN 总线上放置一个"确认"脉冲、以接收到任何无错误的消息。 这是硬件的函数、不需要 SPI 活动。

    但是,如果您希望 TCAN4550-Q1作为“确认”发送消息,则不会自动发生这种情况,并且需要在 SPI 总线上的 MCU 和 TCAN4550-Q1之间进行通信。 在尽可能少的开销下优化 MCU 固件环路、并通过最大可能的数据速率尽可能提高 SPI 效率以及使用突发读取和写入、对于在接收消息和发送响应消息之间实现最佳周转时间至关重要。

    我将在该线程中介绍的最后一点是使用 nWKRQ 引脚与 nINT 引脚之间的时间差、以向 MCU 表明处于睡眠模式的 TCAN4550-Q1已检测到唤醒事件并进入待机模式。 nWKRQ 引脚将始终更快、因为它在器件处于睡眠模式时处于活动状态、并指示唤醒事件后立即发生的事件。 一旦发生这种情况、TCAN4550-Q1将开始为数字电路供电、启动晶体振荡器、并最终进入待机模式。 只有在器件进入待机模式后、nINT 引脚才会被驱动为低电平、以指示已设置的任何中断标志、其中包括因唤醒事件而设置的一些标志。 该时序显示在数据表的睡眠到待机时序(图16)中。

    默认情况下、nWKRQ 引脚配置为镜像 INH 引脚行为、并在器件未处于睡眠模式时保持锁存低电平。 但是、如果它被配置为一个中断引脚、它将代表 CANINT、LWU 和 WKERR 中断标志的逻辑 OR、并且它将保持锁存低电平直到中断标志被清除。 如果 CANINT、LWU 和 WKERR 标志未被屏蔽、它们也会导致 nINT 引脚拉低、直到它们被清除。

    我希望我已经回答了您的所有问题、但如果您有任何后续问题、请告诉我。

    此致、

    Jonathan

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

    你好 Jonathan、

    首先、感谢您的详尽答复。 我将借此机会作一些澄清,并与你分享我的一些看法。

    回顾 TCAN4550的整体功能模式非常有用。 除了我观察到的一些不同的事情之外、您正在确认我所理解的大部分内容。 在继续之前、我只想明确一点、即我了解到器件需要在启动后达到待机模式后进行配置。 但是、出于功率预算的原因、我需要不时地将收发器从正常状态转换为待机状态。 我需要明确的另一点是、当我谈论确认时、我的意思是 CAN 协议传输层中的 ACK。 也就是、在 ACK 时隙期间、接收 CAN 收发器必须拉取的显性位、我不讨论应在 CAN 协议上方的应用层中实现的确认消息。

    我对 TCAN4550进行实验的第一个观察结果与您在这里所说的内容相矛盾:

    唤醒事件仅在器件处于睡眠模式时有效。 [...] 如果器件处于待机模式、则 CAN 总线上符合唤醒模式或 WUP 模式的任何活动都将被忽略、因为器件无法在总线上发送、接收或应答活动。

    我相信我在说"从待机模式唤醒"到正常模式时可能使用了错误的术语、它可能应该是"服务"。 但是、我可以说、WUP 在待机模式下对 TCAN4550绝对有影响。 nWKRQ 中断(谈论的是中断、而不是引脚!) 通过 nINT 中断线路路由:当收到具有该模式的新 CAN 帧时、我可以观察到这种中断被正确触发、并且我可以使用它通过 SPI 写入将收发器从待机状态转换为正常状态来使微控制器为收发器提供服务。 请再次注意、这是在启动后、配置为待机模式、以及正常模式的标称使用后用于一些 CAN 事务;我已将器件从正常状态置于待机状态、以测试如何在应用中使用该器件。 我还想指出的是、nWKRQ 引脚(这次我实际上是指引脚、而不是中断)也反映了我提到的内容。 请参阅下面随附的示波器屏幕截图:

    CANH 线为黄色、TCAN4550的 nWKRQ 引脚为紫色。 绿色信号是来自用于调试目的的微控制器的 GPIO 信号、可以忽略。 此图显示了当 CAN 总线上的另一个角色在传输失败时开始广播一个帧并自动重新传输时会发生什么情况。 您将看到 nWKRQ 引脚在第一个帧的广播期间被拉低。 通过 SPI 写入将 TCAN4550从待机状态转换为正常状态后、收发器最终处于正常模式、能够确认第五个帧(即第四次重新传输)。 完成此操作后、为了清除中断、中断寄存器被写回、您可能会看到 nWKRQ 经过一段时间后被释放回高电平。

    我对此有一个问题:

    处于待机模式(完全供电但未完全配置、并且不会参与 CAN 总线上的活动)

    因此,如果设备处于待机模式,这是否意味着它应该重新配置? 在这种情况下、如果无法在低功耗状态下等待下一个通信系列时实际待机、则待机模式的使用受到相当有限的限制。 如果每次都必须重新配置、回复中的延迟将会成为问题、因为我使用 TI 提供的示例代码测量了大约50ms 的配置时间。

    最后:

    如果器件已进入睡眠模式、则中断寄存器(0x0820[23])的睡眠模式状态(SMS)位已置位。 这可用于指示器件在唤醒事件期间处于睡眠模式。

    我刚才已经验证过这一点、但这并不完全正确。 如果器件由于 WKERR、UVIO 超时或 UVIO+TSD 故障而转变为睡眠状态、则中断寄存器的 SMS 位将仅设置为1 (根据数据表)。 但是、如果主机微控制器愿意将 TCAN4550从正常/待机状态转换为睡眠模式、则 SMS 标志将设置为零。 当发生错误时(例如、如果微控制器未能配置并在上电后的4分钟内转换到正常模式、这对于了解器件是否需要重新配置非常有用、 或者在从睡眠模式唤醒之后、如果寄存器0x800中的 SWE_DIS 位设置为0)。 在这种情况下、我仍需要跟踪微控制器侧的 TCAN4550模式、以区分微控制器何时将器件设置为睡眠模式以及收发器何时处于待机模式。

    我要再次感谢你的澄清。 我希望我们的交流能够更好地理解 TCAN4550的功能模式的使用、我期待着阅读您对我在这里所分享的内容的看法。

    此致、

    路易

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

    您好 Louis、

    感谢您的澄清和观察。 我会承认、我对您原来的帖子中的几个问题有点困惑、但现在我清楚地了解了您的要求和尝试实现的目标。 我还会承认、我完全误解了待机模式下的唤醒行为。 你是对的、我简直无法用言语来形容、为什么我会说在待机模式下无法使用唤醒功能、而我想的是从真正的睡眠模式中唤醒、而我只是在心理上发生了失误 待机模式。 很抱歉、我对这种混淆表示歉意、但我已编辑了我的原始帖子、以更正和澄清该帖子中的信息。

    我在编辑中回答了您的最新问题、但不是、在转换至正常模式之前、器件并不总是需要在待机模式下重新配置。 如果 MCU 通过 MODE_SEL 位字段将器件置于待机模式、则器件将保留所有配置设置、并且仅在检测到唤醒事件后才需要通过 MODE_SEL 位字段将器件重新置于正常模式。

    遗憾的是、SPI 总线既是一项功能、也是一项限制、具体取决于您的观点。 它允许器件用于具有 SPI 总线的任何 MCU 的任何数量的系统。 在这方面,这是一个增强的特点。 但是、由于通过 SPI 总线在器件和 MCU 之间传递信息所需的额外时间、因此它是 CAN 相关活动(例如唤醒事件)的总吞吐量和响应时间的限制因素。 我唯一关于减少这种情况的建议是使用尽可能最快的 SPI 速率、并使 MCU 固件结构尽可能优化、以便它能够尽快检测到来自器件的中断并对其做出响应。 此外、没有太多事情可以做。

    听起来您对该器件的工作方式和模式之间的转换有很好的了解、但如果您有任何其他问题、请告知我。

    此致、

    Jonathan

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

    你好 Jonathan、

    感谢您的说明! 在讨论模式之间的过渡时,我认为使用"唤醒"一词的错误是过于宽松的。

    幸运的是、讨论器件的这些方面已经清除了问题、现在我知道我需要稍微跟踪 MCU 向 TCAN4550请求的内容、以便能够区分从睡眠或待机的转换。 必须在检查每个 nWKRQ 中断上的 SMS 标志时执行此操作、以确保器件在 MCU 不知道它的情况下未将自身设置为睡眠模式。

    这解决了我的问题。 如果我有任何疑问,将来是否有办法直接与您联系? (例如、邮件)

    此致、

    路易

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

    您好 Louis、

    很棒! 我很高兴能够提供帮助。  祝您开发顺利、我将向您发送一封电子邮件至与您的 E2E 帐户关联的地址、如果您将来有疑问、您可以使用该电子邮件直接联系我、或者您可以随时在论坛中再次发帖。

    此致、

    Jonathan