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