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.

[参考译文] TMS320F280049:当 CAN RX 接地时、Driverlib API CAN_readMessage 返回 false

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/824380/tms320f280049-driverlib-api-can_readmessage-returns-false-when-can-rx-tied-to-ground

器件型号:TMS320F280049

您好专家、

我的客户在 F280049上的应用程序中遇到 driverlib API CAN_readMessage 问题。

他们正在执行测试以将 CAN RX 接地并观察 CAN_readMessage 的行为。

测试一:

在启动 CAN 模块之前将 CAN RX 接地、并调用 CAN_readMessage 以获取数据。 在这种情况下、将返回"false" 、表示寄存器 CAN_IF2MCTL 的 NewDat 位未置位。

测试二:

在正常的 CAN 发送和接收会话中、突然将 CAN RX 接地。  在这种情况下、将返回"true"、这表示 寄存 器 CAN_IF2MCTL 的 NewDat 位被置位。

这是合理还是正常的? 为什么这两个测试会产生相反的结果?

谢谢

谢尔登

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

    他们希望尝试 是否可以使用 CAN_readMessage 来检测 CAN 通信中的错误(RX 接地短路)。

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

    [引用]在启动 CAN 模块之前将 CAN RX 接地、并调用 CAN_readMessage 以获取数据。 在这种情况下、将返回"false"、表示寄存 器 CAN_IF2MCTL 的 NewDat 位未设置。[/QUERP]

    通过"启动"、我假设您是"初始化"。 由于未收到数据、因此您看到的"false"是意料之中的。

    [引用]在正常的 CAN 发送和接收会话中、突然将 CAN RX 接地。  在这种情况下、将返回"true"、这表示 寄存 器 CAN_IF2MCTL 的 NewDat 位被置位。 [/报价]

    定义"突然"。 如果您通过手动短接 CANRX 引脚来实现此目的、则不知道当时总线发生了什么情况(因为您说 CAN 正在发送和接收)。 可能是您在实际接收到帧后短路、在这种情况下、函数不会返回"false"。 除非您在没有人工干预的情况下(以自动方式)进行此测试并精确控制将 CANRX 连接到 GND 的时刻(即实际未接收到任何数据时)、否则您无法保证测试结果与测试一相同。

    [报价]他们希望尝试是否可以使用 CAN_readMessage 来检测 CAN 通信中的错误(RX 接地短路)。 [/报价]

    这将由已经内置于模块中的错误检测功能检测。 无需单独测试。 只要相同的位值出现超过5位时间、就会标记位填充错误。