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.

[参考译文] TCAN4551-Q1:Linux 驱动程序具有低性能

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1370786/tcan4551-q1-linux-driver-has-low-performance

器件型号:TCAN4551-Q1
主题中讨论的其他器件: TCAN4550、TCAN4552

工具与软件:

您好

我们发现使用 SoC 时、此部件的 Linux 驱动程序性能较低。 我们在 SOC 上使用旧版 Linux 内核、但已根据 Linux 内核中的可用驱动程序的新版本将代码移植回。

此部件是否有可用于提高接收性能的性能补丁?

我可以在其他一些论坛帖子中看到、我们提供了一些经过改进的驱动程序。

TI 团队可以就此提供支持吗?

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

    您好 Anadi:

    所说的"低性能"、我假设您指的是可支持的总体最大 CAN 消息带宽。  主要限制是 TCAN4551-Q1与 MCU 之间进行 SPI 通信、这是在器件之间传输 CAN 消息数据以及读取和写入器件寄存器所必需的。

    TCAN4551-Q1支持针对连续寄存器和 MRAM 地址位置的多字 SPI R/W 事务。  但是、初始 Linux 驱动程序仅使用单字通信、该通信要求每个寄存器有一个地址字以及传输的 MRAM 数据字、效率有点低。  

    开发了该驱动程序的修订版、以在可能的情况下使用多字通信并尽可能提高效率。  这些更新已提交给 Linux 社区以供审核并上传到 Linux 内核、但我不知道此过程的状态以及它是否已上溢。

    您能否具体告诉我您正在使用的 Linux 内核版本和驱动程序的版本号?  我不知道"老"和"新"是什么意思、也不知道我们是否有任何东西可以提供给您已经拥有的东西。

    此致、

    乔纳森

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

    尊敬的 Jonathan:

    Aplogies 的不完整的信息。

    我们使用的是 Linux 4.18内核
    我们从6.9.3平台向后移植、
    m_can - drivers/net/can/m_CAN - Linux 源代码(v6.9.3)- Bootlin

    您能否提供您已实施的增强版本的详细信息?

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

    所说的"低性能"、我假设您指的是可支持的总体最大 CAN 消息带宽。

    我们看到总线丢弃了大量数据包、并且通过总线提取数据需要很长时间。

    我们需要减少通过 SPI 读取数据所需的时间。 您所指出的改进的多字读取增强功能可能使我们能够提高数据接收的性能。

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

    您好 Anadi:

    感谢您提供版本信息、您可能已经可以访问已在最终版本 v6.6中接受的更新驱动程序。  这是我从开发人员那里获得的有关该补丁的最后信息。

    该驱动程序集成在 tcan4550驱动程序中:

    drivers/net/can/m_can/tcan4x5x-core.c

    可以通过配置符号"CAN_M_CAN_TCAN4X5X"启用它。

    对于 devicetree、compatible 应该是:

    兼容="ti、tcan4552"、"ti、tcan4x5x";

    我希望这对您有所帮助。

    此致、

    乔纳森

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

    尊敬的 Jonathan:

    感谢您的更新。

    我想我们已经使用了最新版本。

    是否有任何其他改进指示、例如 FIFO 访问/其他可能的增强。

    此致

    阿纳迪

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

    Anadi、您好!

    您是否使用示波器或逻辑分析仪对 SPI 通信进行了任何分析、以查看是否有可以解决的长暂停或间隙?  我们已经看到、一些 SPI 驱动器在开始通信之前将芯片选择信号拉低后会有延迟、在通信结束后也会有延迟。 我们还发现、如果驱动器以8位或16位增量发送数据、则 SPI 通信中会出现间隙。  所有这些类型的延迟会增加大量时间并降低总带宽。

    通常、使用多字 SPI 读取/写入有助于减少开销、因此最好针对单个 SPI 多字写入中的传输和整个 TX 缓冲区执行此操作、同样也适用于从 RX 缓冲区读取整个消息。

    我看到过一些应用、在使用水线填充级别作为中断后读取了多个 RX 消息缓冲区、但如果尚未达到水线位、这可能会在接收消息时增加短暂的延迟。

    实施消息过滤以防止处理不必要的消息是有帮助的。  此外、对常见消息使用专用 RX 缓冲区可以防止 MCU 在检索消息之前先读取特定消息的 Get 索引、因为缓冲区地址已知。

    将 SPI 数据速率增加到能够可靠实现的最快支持速率可减少总时间。  TCAN4550的最大 SPI 速率为18MHz。

    这些是需要探讨的几个想法。

    此致、

    乔纳森