主题中讨论的其他器件: TM4C123GH6PM、 TMS570LS1224
大家好、
我对 CAN 协议比较陌生、在实施 CAN 网络时遇到困难、希望能为我的项目提供所有帮助我的目标是设置/配置 CAN 网络的3个节点。 我的节点如下:
1)节点1 =标准 ID 为0x1的 TMS570LS1227、 用于发送的 MSG_OBJ1、用于接收的 MSG_OBJ2和 MSG_OBJ3
2)节点2 = 标准 ID 为0x2的 TMS570LS1227、 用于发送的 MSG_OBJ1、用于接收的 MSG_OBJ2和 MSG_OBJ3
3)节点3 =标准 ID 为0x3的 TM4C123GH6PM、 用于发送的 MSG_OBJ1、用于接收的 MSG_OBJ2和 MSG_OBJ3
我已经研究了 CAN 协议的工作原理、并且知道消息框优先级和消息标识符优先级的工作原理。 每个节点都使用其消息框对象1来发送消息框对象2和3来接收来自其他两个节点的消息。
我使用中断来指示来自其他节点的每个节点上的 TX 和 RX 消息。 我还为每个节点的接收消息框对象设置了0x07FF 的过滤掩码、以使用11位来过滤来自 CAN 总线的消息。
根据我在上面的理解和设置、当我初始化和配置网络上的每个节点时、我希望节点1首先赢得仲裁过程并传输其消息、而节点2和3接收消息。 接下来、我希望节点2赢得针对节点3的仲裁、而节点1和节点3接收仲裁。 最后、节点3发送、其他节点侦听和接收。
以下是我在上述设置中遇到的问题:
1) 1)通信不一致、即我并不总是在每个节点的接收消息对象中包含所有预期消息。 我的意思是:节点3有时会有节点2的已传输消息、但不会有节点1发送的消息、节点2将有节点3发送的消息、但不会有节点1发送的消息、 节点2将具有节点1的消息、但不包含节点3的传输消息- IDK 为什么会发生这种情况。 有什么想法吗?
2) 2)当我查看逻辑分析仪上的 CAN 总线时、我会看到错误、表示存在位填充和 ACK 错误。 如何修复确认错误? 即、如何配置接收节点以确认它们已收到已发送的消息? 我认为 CAN 控制器会处理位填充? 或者我是否被错误告知? 请提供建议。
3) 3)我的当前代码适用于网络中的任意两个节点、但一旦我在网络中拥有全部3个节点、总线的行为就无法预测。
我通读了论坛、试图发现与我类似的问题、但在任何地方都找不到任何有用的东西。 如上所述、这是我第一次使用 CAN、非常感谢我能提供的任何帮助、我很乐意与您分享我的每个节点代码。 期待您的所有回复。 感谢你能抽出时间。
谢谢。