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.

[参考译文] TMS320F2.8379万D:CAN:仅接收RTR帧时出现问题

Guru**** 2524550 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1095230/tms320f28379d-can-problem-receiving-rtr-frames-only

部件号:TMS320F2.8379万D
主题中讨论的其他部件:C2000WARE

您好,

我想将CAN邮箱设置为仅接收RTR帧,但设备似乎同时接收RTR和数据帧。

我将邮箱1配置为接收RTR帧(但没有自动响应),CAN ID = 0x707,对所有标识符位使用ID筛选器。
对于预期的响应数据帧,DLC设置为1:

CAN_setupMessageObject(
    CANB_BASE,
    1,
    0x707,
    CAN_MSG_FRAME_STD,
    CAN_MSG_OBJ_TYPE_TX_REMOTE,
    0x7FF,
    CAN_MSG_OBJ_USE_ID_FILTER,
    1
);


我检查收到的RTR帧,通过阅读RTR消息清除'New Data'位,然后发送响应消息:

uint8_t responseData[8]; // initialized with zeroes

if (CAN_getNewDataFlags(CANB_BASE) & 0x00000001))
{
    uint8_t dummy[8];
    CAN_readMessage(CANB_BASE, 1, dummy);
    CAN_sendMessage(CANB_BASE, 1, 1, responseData);
    
    responseData[0] ^= 0x80; // toggle upper bit for each response message being sent
}


只要接收到RTR帧,上述程序就能正常工作。
(已成功检测到传入帧,响应数据帧按预期发送)

接收数据帧(具有相同的CAN ID)时会出现问题。
看起来它不仅会侦听RTR帧,还会侦听数据帧。

如果是数据帧,上述过程会变成一种奇怪的行为:
*数据帧被识别并可接收
*执行'CAN_sendMessage'现在是否发送RTR帧而不是数据帧(为什么??)

我的问题:
是否可以将邮箱设置为仅收听RTR帧?
(我只接受RTR并丢弃/忽略此邮箱的数据帧)

使用的C2000Ware是3.04 .00.00 版。

谢谢!
Markus

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

    您好Markus:

    正如您在中暗示的那样,我的第一个建议是进行软件筛选(检查并仅对RTR帧作出反应)。  

    在继续之前,是否有使用案例,在与非RTR帧相同的ID上接收RTR帧? 是否可以使用两个ID (一个用于RTR,另一个用于非 RTR)?

    编辑:键入和说明如下。

    我主要是检查不同帧类型的两个ID的可能性,因为这似乎更常见。 通过使用两个ID,我们完全避免了这一问题。

    此致,

    文斯

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

    您好Vince,

    感谢您的快速回复。

    如何检查接收到的帧是RTR还是本设备上的数据帧?
    我已检查了邮箱寄存器(CMD,MSK,ARB,MCTL),它们似乎不包含用于检查上次接收的帧是RTR还是数据的位(或元素)。

    我只找到了一个与RTR相关的位,在寄存器“MCTL”中的“RmtEn”。
    但此位确实决定了在接收RTR帧的情况下是否设置传输请求。

    FAAIK没有接收RTR和具有相同标识符的数据的此类用例。
    我打算只使用RTR接收。

    此致,
    Markus

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

    您好Markus:

    RTR和具有相同标识符的数据的使用案例的含义是,您是否可以强制任何设备向该ID发送消息,而只发送RTR?

    基本上,设备发送RTR和具有相同标识符的数据似乎是这样。 您是否可以在系统中强制要求它不执行此操作?

    此致,

    文斯