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.

[参考译文] TMS320F280037:从多个 CAN 消息对象发送多条消息似乎会导致通信阻塞。

Guru**** 2390925 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1308177/tms320f280037-sending-multiple-messages-from-multiple-can-message-objects-seems-to-cause-communication-blocking

器件型号:TMS320F280037

大家好、

以下是客户可能需要您的帮助的问题:

我的应用程序中设置了多个 CAN 消息对象(约10个)、负责发送 CAN 消息(标准格式)。  发送过程采用每10ms 执行一次的任务函数。  在使用过程中、我发现在开始发送多条消息后、CAN 总线会迅速停止工作。  判断为当"两个或两个以上的消息对象在这10ms 内发送信息"时就会发生这种情况。  作为一个临时解决方案、引入了一个类似信标的变量来限制所有 CAN 消息目标、以确保在10ms 周期内、最多只有一个消息目标发送信息。  但这种临时解决方案不太理想。  CAN 通信波特率设置为500k、这不应是由通信量过大引起的。  

现在我想问的是根据经验、可能导致这种情况的因素是什么? 以前是否提出过任何类似的问题/解决方案?

--

谢谢、此致

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

    你好,耶鲁,

    500kbps 时的10ms 帧发送持续时间应该足够多的空间。  对于应用程序、很难确定导致无法发送其他消息对象的原因、但我会首先向客户询问以下问题:

    1.) CAN 传输例程是否通过 ISR 完成?  如果是、请确保应用程序正在确认和清除中断。  当中断未被清除和确认时、会发生中断溢出、该溢出会导致后续指令无法执行。

    2.) 在 CAN_ES (错误状态)寄存器中看到的值是什么?  该寄存器监视总线是否关闭状态、该状态除非总线已恢复、否则不发送任何帧。  该寄存器还将指示是否存在奇偶校验错误、位错误或错误计数器状态以及最新 CAN 事务的最后一个错误代码状态。  这应该是第一个要检查的寄存器。

    此致、

    约瑟夫