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.

[参考译文] MSPM0G3107:CAN TX 消息更改

Guru**** 2395365 points
Other Parts Discussed in Thread: MSPM0G3107, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1433090/mspm0g3107-can-tx-message-change

器件型号:MSPM0G3107
主题中讨论的其他器件: SysConfig

工具与软件:

您好!  

使用 MSPM0G3107和 MCAN 的新产品中遇到一个问题。 客户报告、当系统控制器从我们的产品中请求数据时、我们的产品随机发送无效响应。 我通过实验在工作台上成功复制了问题。 以下是详细信息。

我尝试在每10ms 发出一条消息、并使用 CAN 协议分析器捕获 CAN 总线上的数据。  如果只有 MSPM0板正在传输、则所有消息都正常。 但如果我使用 PCAN USB-CAN 适配器和 PCAN-Viewer GUI 以固定频率向总线发送多条消息、 有时、来自 MSPM0的消息会更改为其他值。 有时 CAN_ID 更改为全零、但数据字段正确。 有时、ID 是正确的、但数据更改为其他值。 一条线索是、当数据更改时、前几个字节似乎始终保持恒定。

已捕获的一些消息:

以下是我用于测试的 Tx 函数:

void DrvCanTxMsg(void)
{
DL_MCAN_TxFIFOStatus sTxFifoStatus;
Uint16 i;
static Uint8 cnt = 0;

DL_MCAN_getTxFIFOQueStatus(MCAN0_INST, &sTxFifoStatus);
if(!sTxFifoStatus.fifoFull) // send if tx fifo is not full
{
/* Initialize message to transmit. */
/* Identifier Value. */
sTxMsg.id = (Uint32)0x0547 << 18U;
sTxMsg.xtd = 0;

/* Transmit data frame. */
sTxMsg.rtr = 0U;
/* ESI bit in CAN FD format depends only on error passive flag. */
sTxMsg.esi = 0U;
/* data length */
sTxMsg.dlc = 8;
/* CAN FD frames transmitted without bit rate switching */
sTxMsg.brs = 0U;
/* Frame transmitted in Classic CAN format */
sTxMsg.fdf = 0U;
/* Store Tx events. */
sTxMsg.efc = 1U;
/* Message Marker. */
sTxMsg.mm = 0xAAU;
/* Data bytes. */
for(i = 0; i < 7; i++)
{
sTxMsg.data[i] = 0;
}
sTxMsg.data[7] = cnt;
cnt++;

/* Write Tx Message to the Message RAM. */
DL_MCAN_writeMsgRam(MCAN0_INST, DL_MCAN_MEM_TYPE_FIFO, 0, &sTxMsg);

/* Add request for transmission. */
DL_MCAN_TXBufAddReq(MCAN0_INST, sTxFifoStatus.putIdx);
}
}

CAN 配置为1M 比特率、配置如下所示。

更多信息、开头我虽然这可能是 TX FIFO 的问题、因此我对使用专用缓冲区的 TX 消息做了实验、但是这个问题是一样的。  

请帮助检查有什么问题。 谢谢!

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

    您好!

    我注意到 TX FIFO 和 RX FIFO 的地址重叠。 您是否可以修改它并再次进行测试?

    (请注意、当地址重叠时、SysConfig 中现在没有错误/警告、因此您需要仔细配置)

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

    您好、Yuhao、  

    感谢您的答复。 这可能是我的问题。 不过地址由 SysConfig 自动配置。 关于如何配置地址、您有什么指南吗? 能否提供应用地址的示例配置?  

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

    有关 CAN 的配置、请参阅示例代码、其中一起实现了 CAN TX 和 CAN RX:

    can_to_uart_bridge

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

    您好、Yuhao、

    修改地址后、我的问题已解决。 非常感谢您的支持!   

    我还有一个问题。 SysConfig 不支持配置两个 ID 过滤器。 能否提供有关如何在用户应用中添加更多 ID 过滤器的示例代码? 在我的应用程序中、我使用11位 ID、其中7位被视为 node-id。 所以我 想接受  CAN_ID 7位中的2个数字、它自己的节点 ID、并且全部为0 (广播地址)。  

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

    尊敬的 VIM:

    很高兴听到您解决了问题。  

    对于您的新问题、您可以创建一个新主题、以便我们可以将该主题保留为针对单个特定问题的讨论。 谢谢。