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.
工具与软件:
我与 AM263Px-cc 合作开发了一个概念验证项目、目前我正在尝试让 mCAN 外设接收消息。
我已从 MCU+ SDK 为 AM263Px - 09.02.00.55加载 mcan_external_read_write 示例工程。
我已经更新了 syscfg 以将 mCAN 外设设置为 CAN4、以利用控制卡上的 CAN 收发器。 项目构建成功、我能够按预期进入调试模式、并将发送消息。
我正在尝试禁用所有过滤、并且在初始化过程中遵循了文档并将 ANFE 和 ANFS 都设置为0。 当我向 AM263P 发送提供一条有效的 CAN 消息时、我能够到达 ISR 中的断点。 ISR 使用 MCAN_getIntrStatus ()函数来检索 MCAN IR 寄存器。 该函数返回值8、并根据寄存器上的文档、指示"FIFO 0 Rx 消息丢失复位源"。
我曾尝试从两个 FIFO 中读取所有消息、但似乎无法让 MCAN IR 寄存器返回值1或16 (指示 FIFO 0或 FIFO 1中存在新消息)。
我所需要做的就是禁用所有 MCAN 过滤、然后使用 ISR 触发读取传入的 CAN 消息、但我认为除了 ANFE 和 ANFS 之外、还需要调整其他设置才能使其正常工作。
我能够使它部分运行。 mcan_external_read_write 示例工程中的代码 会将 APP_MCAN_FIFO_0_CNT 设置 为0、从而导致由于没有可用的 FIFO 寄存器、所有消息都会被丢弃。
我不会遇到使用 MCAN_READ_MsgRam ()函数似乎没有执行任何操作来清空 FIFO 的问题。 我能够向 AM263P 发送一条 CAN 消息、使用 MCAN_readMsgRam ()函数读取该消息、然后使用 MCAN_getRxFIFOStatus ()函数检查 FIFO 0的状态。 当我继续发送单条消息并从 FIFO 读取它们时、从 MCAN_getRxFIFOStatus ()返回的 fillll 将继续递增、直到达到64 (这是我设置了 APP_MCAN_FIFO_0_CNT 的大小)。 之后、FIFO 标志变为高电平、消息被拒绝。 我是否需要使用将从 RX FIFO 中读取的不同命令来在读取时清除 RX FIFO?
另外、我想指出的是、与此相关的文档很差。 在 API 指南中、MCAN_RxFIFOStatus 元素的描述几乎与元素名称完全匹配、而不描述它们表示什么。 在寄存器附录中、RXF0S 寄存器的简短描述和长描述为"RXF0S"、对此没有帮助。 此外、寄存器元素的寄存器附录说明对于描述寄存器中实际包含的数据没有帮助。 我本来希望《技术指南》能提供更多关于如何正确解释这些寄存器并将其投入使用的信息、但事实并非如此。
你好、Nathan、
感谢您提供有关 MCAN API、TRM 和 RA 内容状态的反馈。 我们将使用这些信息来推动内容审查和刷新。
使用 MCAN_READ_MsgRam ()函数后,还必须使用 MCAN_writeRxFIFOAck () 函数写入 RX FIFO 确认。
通过提供确认索引号、FIFOx Get 索引将递增、先前的"读取"消息将从队列中消失。
此致、
Zackary Fleenor
您能否将我引导至您在其中找到此信息的文档? 我在技术手册、API 指南或寄存器附录中找不到它。
嗨、Nathan、
此信息在 Bosch MCAN 用户指南和 CAN ISO-11898标准中进行了介绍。
https://www.bosch-semiconductors.com/media/ip_modules/pdf_2/m_can/mcan_users_manual_v331.pdf
M_CAN | Bosch Semiconductor for Automotive (bosch-semiconductors.com)
我认为这一过程只是默认情况下的预期、因为它是在协议本身中定义的、因此我们目前的文档中没有明确说明。 我将与团队一起回顾并确定包含此信息的正确位置。
此致、
Zackary Fleenor