主题中讨论的其他器件: 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 消息做了实验、但是这个问题是一样的。
请帮助检查有什么问题。 谢谢!
