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.

[参考译文] TMS570LS1227:具有2个 TMS570LS1227和1个 TM4C123GH6PM 的 CAN 网络

Guru**** 2038710 points
Other Parts Discussed in Thread: TMS570LS1227, TM4C123GH6PM, TMS570LS1224
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/876999/tms570ls1227-can-network-with-2-tms570ls1227s-and-a-tm4c123gh6pm

器件型号:TMS570LS1227
主题中讨论的其他器件: TM4C123GH6PMTMS570LS1224

大家好、  

我对 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、非常感谢我能提供的任何帮助、我很乐意与您分享我的每个节点代码。 期待您的所有回复。 感谢你能抽出时间。  

谢谢。  

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

    您好!

    如果 CAN 总线处于空闲状态、三个 CAN 节点可以随时访问 CAN 总线。 如果3个节点希望同时进行通信、那么具有最高优先级的消息将赢得总线仲裁并获得传输的权利。 作为消息一部分的 CAN 标识符(CAN ID)指示优先级。 CAN ID 的编号越低、优先级越高。 在您的设计中、节点1具有最高优先级、而节点3具有最低优先级。

    CAN 总线访问冲突由 CAN ID 的逐位仲裁解决。 所有连接的节点都观察总线电平位对位。 总线电平有两种:显性和隐性。 显性电平会覆盖隐性电平。 在 CAN 的位流中、每个字节的 MSB 首先被发送。

    1.是否可以对消息框2和3使用不同的掩码来接收来自不同节点的消息? 例如,Node1-mailbox2将从节点2接收消息,而 mailbox3将从节点3接收消息。 我想知道邮箱中的消息是否 被覆盖。

    2、预计会出现位填充错误和 ACK。 在您的设计中、您的使用11位 CAN ID。 对于 Node1/2/3、ID 的5位以上为零。 仲裁的节点不会获得 ACK。

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

    您好 QJ、  

    感谢你的答复。 实际上、我在每个节点上使用不同的邮箱来接收来自其他节点的消息、即在节点1上、消息对象1用于传输节点1的消息、 报文对象2用于接收节点2的报文、报文对象3用于接收节点3的报文。  

    尽管为每个节点使用不同的邮箱、并为每个接收邮箱将掩码位设置为0x7FF、 但我仍然无法获取邮箱中的所有消息。  

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

    您好!  

    如果设置了 UMASK,则将使用掩码位进行验收过滤。 如果屏蔽位为0x7FF、则只有 ID 匹配的传入消息才会复制到消息 RAM。

    如果节点1 TX 消息 ID 为0x1、如果节点2 RX 消息对象的 ID 不是0x1、则节点2将不会接收此消息。  

    这是 TX 和 RX 的图:

    节点1:MailBox1 ID=1、TX

                MailBox2 ID=2,RX --来自节点2

                MailBox3 ID=3,RX --来自节点3

    节点2:MailBox1 ID=2、TX

                MailBox2 ID=1,RX --来自节点1

              MailBox3 ID=3,RX --来自节点3

    节点3:MailBox1 ID=3、TX

                MailBox2 ID=2,RX --来自节点2

              MailBox3 ID=1,RX --来自节点1

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

    您好 QJ、  

    感谢你的答复。 我已经按照您在回复中的建议设置了邮箱、我对邮箱的运行方式感到惊讶。

    无论如何、这里是我的 CAN 网络硬件设置的图像。 可能这里有问题、请提供建议。 如果您想查看、我可以共享我的代码。  

    期待您的回复。 感谢你能抽出时间。  

    谢谢、  

    Junaid Khan

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

    您的设置看起来不错。 我假设节点2左侧和右侧的 CAN_H/L 来自同一 CAN 收发器、并且三个节点使用相同的波特率。  

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

    是的、它们都配置为500K 的波特率。

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

    您是否尝试了较低的波特率(例如50k、100k 等)、因为导线会拾取影响传输的噪声?  

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

    我降低了波特率、问题仍然没有得到解决。 这三个节点在同一网络中的传输和接收消息不一致。

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

    我认为该节点大部分时间都可以接收来自其他两个节点的消息、问题只会在某些情况下发生。

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

    如何解决此问题?

    我尝试使用2个 TMS570LS1227和一个 TMS570LS1224进行设置-遇到了同样的问题。

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

    您可以共享代码吗?