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.

[参考译文] TCAN1051H:如何在 CAN 中发送多个帧

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1132092/tcan1051h-how-to-send-multiple-frames-in-can

器件型号:TCAN1051H
主题中讨论的其他器件:TCAN1051TCAN4550

您好!

我 正在使用 TCAN1051和 STM32处理 CAN 总线项目。 在此项目中、我必须  通过 CAN 发送大约175字节的数据。 发送此数据大约需要22帧。 我不知道如何发送所有帧。 如果我一次发送所有这些数据、我可能会得到 RX_FIFO 溢出错误。 有人能帮我解决这个问题吗? 谢谢

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

    Ashish、您好!

    我假设您的 STM32器件具有内置的 CAN 控制器。 您可以确认这一点吗?

    我建议的第一件事是升级到支持 FD 的器件。 这样做的原因是、借助支持 FD 的器件、您可以在每个 CAN 帧中发送多达64字节的数据。 CAN FD 还可以以更高的速率传输数据、因此即使您仍在以22帧的帧发送数据、这22帧的数据部分也会变得更快。

    现在、为了解释这项工作、我们首先从收发器本身 TCAN1051开始。 TCAN1051等任何独立收发器都是一款"笨"的器件。 它所做的就是获取 TXD 上的内容并将其放置在 CAN 总线上。 然后、它获取 CAN 总线上的任何内容并将其置于 RXD 引脚上。 这就是器件所做的一切。 它不够智能、无法知道什么是 CAN 帧以及 CAN 帧的不同部分是什么。

    这就是您的 CAN 控制器将进入的位置。 CAN 控制器用于设置 CAN 帧、然后通过 TXD 引脚将其发送到 CAN 收发器。 然后、如果它在 RXD 引脚上看到一个 CAN 帧回来、它将对该帧进行解码并将其转换为 MCU 可以理解的数据。  博世的 MCAN IP 是一种非常流行的 CAN 控制器。 如果您的微控制器没有内置的 CAN 控制器、您可以尝试使用微控制器编写您自己的控制器、也可以查看我们的 TCAN455x 系列器件。 TCAN455x 系列将 CAN 控制器和 CAN 收发器集成到同一封装中。 因此、您可以使用 SPI 将 TCAN455x 连接到 MCU。 然后、您使用 SPI 设置器件、集成控制器将发出 CAN 帧并自动读回任何 CAN 消息。 我们甚至提供了为 TCAN4550编写的示例代码、因此您可以非常轻松地入门。

    如果您具有内置的 CAN 控制器、那么发送消息的方式通常是必须首先设置时钟速度和传播段。 这决定了您发送邮件的速度。 然后设置 CAN 报头。 标头包含您的 ID、DLC 位、RTR 等 如果您使用的是 CAN FD 器件、并且希望启用 CAN FD 消息、则需要配置位速率开关和 CAN FD 格式标志。 设置标头后、您需要设置数据。 我假设大多数 CAN 控制器 都有一个传输缓冲器。 您只需将标头和数据写入传输缓冲区、然后从该缓冲区向 CAN 控制器发送帧。 然后、CAN 控制器对消息进行打包并发送。  

    RX_FIFO 溢出错误基于接收消息而不发送它。 通常、您的 MCU 可以极其快速地处理和存储 CAN 消息、尤其是在消息较慢且只能发送8字节数据的传统 CAN 消息时。 但是、正确的是、使用 RX_FIFO 时、您确实可能会溢出并丢失一些数据。 我相信、大多数 CAN 控制器都允许您根据 RX_FIFO 为您提供的 RAM 大小来设置其大小。 因此、您可以增大 FIFO 大小、或者、更好的解决方案是、您应该努力优化 MCU、以更快地读取数据并将其自身存储在不同的缓冲区/FIFO 中。 您只需从 CAN 控制器的 RX_FIFO 中获取数据即可。 一旦它脱离 FIFO、您可以稍后在 MCU 可以访问的较大缓冲区中处理数据。

    如果您决定使用 TCAN455x、请告诉我、我们有很多非常适合此系列器件的文档。

    最棒的

    Chris

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

    尊敬的 Chris:

    感谢您的详细回答。 我使用的是 STM32G0系列微控制器、它具有内置 CAN-FD。 首先、我尝试使用 CAN-FD 帧格式、我只能发送3帧中的所有数据。 但对于另一个项目、我必须使用 CAN -经典格式。 我尝试以10ms 的延迟逐一发送所有26个帧。 我还将尝试您的建议。 谢谢

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

    听起来不错、Ashish

    请告诉我它是怎么发生的。

    最棒的

    Chris