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.

[参考译文] TMS570LS0714:DCAN 确定仲裁损失(在轮询模式中)

Guru**** 2462880 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/653429/tms570ls0714-dcan-determine-arbitration-loss-in-polling-mode

器件型号:

TRM 第24.8.3节规定:"当发送成功完成时、NewDat 位被复位。"

在轮询模式下使用 DCAN 发送器时、如何知道它何时足够长、可以将"NewDat"位视为仲裁丢失?

我认为、使用发送完成中断来告知传输何时完成、但数据表显示的是、中断仅在发送完成时才会出现。  然后、我应该捕获某种错误中断方式吗?

请帮助确定消息是否已发送或仲裁失败?

注意: 我们希望关闭自动消息重试、因为当 CAN 总线上的唯一节点(它重复传输单个脉冲、直到总线上的其他节点为止)时、它的行为非常糟糕。  此外、我们还希望将重试次数限制为"3"。

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

    [引用用户="fj Kime"]

    器件型号: TMS570LS0714

    在轮询模式下使用 DCAN 发送器时、如何知道它何时足够长、可以将"NewDat"位视为仲裁丢失?

    answe-->如果不知道其他较高优先级的报文正在进行传输、就无法确定这一点。 这也取决于总线上的错误条件。 简而言之,如果不对系统有透彻的了解,就很难确定这一点。 如果消息是纯事件驱动(因此是异步的)、这可能会更加复杂。 请注意、不在所需时间内发出的消息可能是由于总线错误而不仅仅是由于仲裁丢失。

    我认为、使用发送完成中断来告知传输何时完成、但数据表显示的是、中断仅在发送完成时才会出现。  然后、我应该捕获某种错误中断方式吗?

    answe-->这是正确的、只有在传输完成后才会产生中断。 如上一个答案所述、传输完成延迟可能是由于总线错误或仲裁失败所致。 虽然前者可能会被错误中断"捕获"、但后者是良性的、是正常协议行为的一部分。 您可以考虑的一个选项是设置计时器、以便在消息未在预定的时间内完成传输时向您发出警报。

    请帮助确定消息是否已发送或仲裁失败?

    应答-->发送的消息可以用中断标记。 仲裁丢失本身不是一个问题、除非应用要求一个消息必须在一个特定的时间窗口内完成传输。 可以使用计时器来标记这种情况、并可以采取纠正措施。

    注意: 我们希望关闭自动消息重试、因为当 CAN 总线上的唯一节点(它重复传输单个脉冲、直到总线上的其他节点为止)时、它的行为非常糟糕。  此外、我们还希望将重试次数限制为"3"。

    应答-->如果总线上只有一个节点尝试发送,它将一直重试,因为它没有收到 ACK。 这是正常行为。 要回答您的另一个问题、无法限制重试次数。 它是"0"或"永久"

    [/报价]

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

    感谢您 Hareesh 对一个多点问题给出了如此完整的回答。

    我想过去 CAN 控制器的工作方式是要求发送器进行自我应答。  检查标准后、我的回忆似乎不正确。

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

    许多 CAN 控制器(包括 DCAN)都具有自检模式、在该模式下、它们确实会执行自检。 也许这就是您当时的想法。

     

    感谢您关闭该帖子。