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.

[参考译文] TCAN4550-Q1:CAN 消息传输中观察到的延迟

Guru**** 2461600 points
Other Parts Discussed in Thread: TCAN4550, TCAN4550-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1477546/tcan4550-q1-delays-observed-in-can-message-transfer

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

工具与软件:

尊敬的团队:

我们使用 TCAN4550、并通过 SPI 连接 iMX8DXL 处理器。 当我们执行 CAN 消息传输时、我们观察到一些延迟、由于这些延迟、吞吐量也降低。 随附的文件中增加了详细信息和我们的一些问题。 如果您需要任何其他信息、请告诉我。

/cfs-file/__key/communityserver-discussions-components-files/138/Issue-Observed_5F00_TI.pdf

此致、

Ankita

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

    Ankita、您好!

    处理器负责控制 SPI 时序、并负责用户确定的所有延迟。  TCAN4550-Q1将仅根据 SCLK 边沿转换接收 SDI 引脚上的数据并在 SDO 引脚上输出数据。  NCS、SCLK 和 SDI 信号由处理器生成、因此 TCAN4550中的任何设备都无法帮助优化或调整您确定的延迟。

    TCAN4550-Q1数据表提供了 TCAN4550-Q1接口的开关特性。

    对于 TCAN4550-Q1吞吐量的 SPI 优化、我唯一的建议是:

    -将 SPI 时钟频率提高到支持的最大水平

    -使用长度字段可以在单个 SPI 事务中读取/写入多个连续寄存器或 MRAM 数据单元,而不是单个32位字事务。  这可减少来自每个 SPI 事务开头的32位标头字(R/W 操作代码、地址和长度字段)的 SPI 位开销。  这也减少了 NCS 引脚在字之间从高电平转换为低电平之间的空闲时间。

    -将寄存器读/写事务数量减少到最小值。

    总体 CAN 消息吞吐量可能取决于处理器负载以及处理与 TCAN4550-Q1的 SPI 通信的效率。

    此致、

    Jonathan

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

     Jonathan、您好!

    感谢您的答复。 我们想知道以下问题:

    • 在检查此 TCAN 芯片时、您的测试设置是什么?
    • 有关延误的情况如何?  您有没有发现类似的东西?您能提供相似的时序图吗?  
    • 对于1MB 和5Mb 数据比特率的8字节和64字节消息、您看到了多大的吞吐量?  

    此致、

    Ankita

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

     Jonathan、您好!

    此外、在接收到26条消息(水印)后、将发生中断、并且在我们看到 SPI 行中的实际数据之前(即、在文档图像中所示的周期1之前)、CS 切换次数大约是 SPI 行中的六倍、并且在 SPI 行中看到一些数据。 我们想知道这些数据是什么。

    此致、

    Ankita

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

    Ankita、您好!

    检查此 TCAN 芯片时您的测试设置是什么?

    TCAN4550已在多种不同的 MCU 和 SPI 协议测试设备上使用和测试。

    关于所涉及的延迟情况如何?  您有没有发现类似的东西?您能提供相似的时序图吗?  [报价]

    MCU 控制 SPI 时序、当 nCS 引脚为低电平时、TCAN4550-Q1将仅在每个 SCLK 周期内在相应的 SDI 和 SDO 引脚上接收或提供一个数据位。  与 SPI 通信相关的延迟来自 MCU、这会因不同 MCU、SPI 驱动程序固件和 MCU 中的整体负载等而异

    是的、一些 MCU 特定延迟很常见。  一些 MCU 可以在完整的32位或64位块中处理 SPI 事务、而其他 MCU 只能支持16位或8位块、从而导致 SPI 信号出现额外的延迟。  其他延迟来自总体负载以及 MCU 在 SPI 通信期间尝试支持的其他功能。

    在该论坛中、我可以为您解答有关 TCAN4550-Q1 SPI 时序的任何问题。  如果您有与数据表规格表中列出的设置/保持参数相关的问题、请告知我。  

    任何与处理器相关的时序延迟问题都不在本论坛的讨论范围内、并且我只能提供一般级别的支持、因为它与 TCAN4550-Q1器件的直接运行有关。

    对于1MB 和5Mb 数据比特率的8字节和64字节消息、您看到的吞吐量是多少?  [报价]

    同样、我也没有为您提供具体的数字、数字可能会因多种因素而有所不同、例如已发送的消息数量与已接收的消息数量之比、MCU SPI 通信的整体效率、以及 MCU 是否必须在消息之间对数据进行任何处理。  这些都是您需要确定的应用特定问题。

    我可以提供一个简单的电子表格工具、用于帮助计算这些类型问题的答案。  但请注意、此电子表格假定所有 SPI 寄存器和 MRAM 传输均使用一个32位字。  这意味着每个 SPI 标头中的长度字段= 1、并且对于每个32位数据字、都有一个关联的32位标头字、其中包含 SPI 读取/写入操作码、地址和长度字段。  当长度字段设置为较大的数字时、如果单个 SPI 消息中可以传输多个32位数据字、则不包括来自突发模式类型数据传输的任何效率优化。  这样做将减少所需的标头字的数量并提高 SPI 通信的整体效率。  如果您的应用利用了长度场突发模式通信、则需要将该因素纳入计算中。

    e2e.ti.com/.../3125.Throughput-Calculator-v1.xlsx

    此外、在接收到26条消息(水印)后、发生中断并且在我们看到 SPI 线中的实际数据之前(即在文档图像所示的周期1之前)、CS 切换次数大约是 SPI 线中的六倍并且看到某些数据。 因此、我们想知道这些数据是什么。
    [/quote]

    文档中的图像不显示 MOSI 和 MISO 数据字节、因此我建议您放大逻辑分析仪捕获图、以准确确定所传输的数据。  我怀疑这与读取和清除中断寄存器位、读取 RX FIFO 状态寄存器来获取 RX 缓冲区 Get 索引等相关

    此致、

    Jonathan

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

    您好!

    感谢您的答复。

    我们想知道、在《软件用户指南》第5.2节中、它曾提到:"TCAN45xx SPI 报头有一个字参数、说明将传输多少个字(每个4字节)的数据。"  所以、是否有可能在默认的5.15 tcan4x5x 驱动程序代码中将其增加到8个字节? 如果是,请告诉我们,或者如果有任何补丁,你可以提供,这将是伟大的。

    此致、

    Ankita

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

    Ankita,

    多字写入和读取函数已包含在内、这被称为"突发"模式通信。 请参阅 TCAN4x5x_spi.c 文件以了解相关函数。  

    有3个功能与突发写入或读取 SPI 事务相关、因为这需要对片选(NCS)信号进行一些特殊处理、该信号必须在整个 SPI 事务期间保持低电平。

    第一个"start"(启动)功能将 nCS 引脚拉至低电平、并写出此事务中将传输的起始地址和32位字的数量。

    第二个突发"写入"或"读取"函数用于传输数据。

    "结束"功能会在 SPI 事务结束时再次将 NCS 引脚拉至高电平。

    此致、

    Jonathan

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

    您好!

    此 TCAN4x5x_spi.c 是否存在于默认的5.15 BSP 中? 是否需要添加此文件? 如果是、请共享该文件。

    此致、

    Ankita

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

    Ankita、您好!

    抱歉、我想您提到的是我们的 TCAN4550演示软件参考代码 (链接)、但您似乎引用了 Linux 驱动程序。

    我不是 Linux 专家、我在器件级别支持 TCAN4550、但我相信最初发布的驱动程序仅使用单字 SPI 事务。  2023年发布了一款修订版驱动器、旨在使用多字 SPI 事务尽可能优化驱动器的吞吐量。  我不确定您使用的是哪个版本、但最新发布的驱动程序是可用的最佳驱动程序。

    此致、

    Jonathan

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

    您好!

    感谢您的答复。 我们使用的是 BSP 的5.15.52版本。 您能否向我们发送此最新发布的更新驱动程序代码的链接?

    此致、

    Ankita

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

    Ankita、您好!

    重申一下、我在 TCAN4550器件方面的专业知识、而不是 Linux 方面的专业知识。  我知道更新的驱动程序于2023年上传到 Linux 内核中、现在得到 Linux 社区的支持、而且很可能通过普通的 Linux 代码库也能找到。  但是、由于我不通过 Linux 使用 TCAN4550、因此我没有关于驱动程序本身的任何具体链接或信息。

    如果您对器件寄存器的配置或操作有任何疑问、我很乐意为您提供帮助。  但我不是 Linux 相关问题的好资源、您可能可以通过专门讨论 Linux 相关问题的论坛获得更好的答案。

    此致、

    Jonathan

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

    您好!

    感谢您的答复。 我们想知道、在 TCAN 方面、您是否限制仅使用基于 GPIO 的芯片选择线路? 我们是否可以使用本机芯片选择。 因为在使用本机芯片选择 时、我们会在初始化 tcan 模块时出现内核紧急情况。 如果您能获得与此相关的信息、那会很好。

    此致、

    Ankita

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

    Ankita、您好!

    SPI 片选是 TCAN4550的输入信号、有几项要求、都与处理器如何控制该信号无关。

    TCAN4550需要:

    • 芯片选择信号在每个 SPI 读取/写入事务的开始转换为低电平(不能永久连接至低电平)。
    • 芯片选择信号必须在至少包含64位(和时钟周期)的整个 SPI 事务期间保持低电平。
      • 前32位来自包含读取/写入操作码0x41或0x61的标头字、寄存器或 MRAM 位置的地址、以及要从地址位置读取/写入的数据的数量(或长度)。
      • 如标头字的长度字段中所示、每个数据字都有额外的32位。
    • 芯片选择信号必须在每个 SPI 读取/写入事务结束时转换为高电平
    • 如长度字段所示、片选为低电平时检测到的时钟周期数必须是32的倍数、并与标头+数据字所需的时钟周期数匹配。  (长度= 1时为64位、长度= 2时为96位、以此类推)

    本机 SPI 外设驱动程序可能因处理器而异、许多处理器无法使用完整的32位字或多个32位字、并希望在每个8、16或32位数据后驱动芯片选择低电平和高电平、这会导致错误。  因此、可能需要对芯片选择进行 GPIO 控制。  然而、如果处理器的本机驱动器可被配置成将芯片选择保持在低电平以获得正确数量的数据位来满足 TCAN4550的要求、那么这将是理想选择。

    但从 TCAN 方面来看、只要芯片选择和相应的 SPI 数据/时钟信号满足数据表中概述的时序和格式要求、它不关心处理器如何控制芯片选择信号以及是来自本机驱动程序还是通过 GPIO 控制。

    此致、

    Jonathan

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

     Jonathan、您好!

    感谢您的答复。 现在、我们已经在默认的5.15 BSP 中配置了本机芯片选择、我们可以初始化 tCAN 模块并使 CAN 链路接通、但这样我们就无法进行任何消息事务。 那么、有什么想法可以帮助我们解决这个问题?

    此致、

    Ankita

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

    Ankita、您好!

    如果我对您的理解正确、您就能够通过 SPI 与 TCAN4550进行通信、但您无法发送或接收任何 CAN 消息。  是这样吗?  我不确定"使 CAN 链路接通"到底意味着什么。

    如果是、您可以在配置完成后读取 TCAN4550寄存器的日志文件并创建最终值吗?  我可以检查最终器件配置是否有错误。

    在尝试发送或接收可能也有助于识别问题的 CAN 消息时、监控状态、中断、错误计数器和协议状态寄存器还可以提供有关错误条件的信息。

    此致、

    Jonathan

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

    Jonathan、您好!

    感谢您的答复。 以上都是可行的、我们还有一些其他问题  

    这里、周期4和周期5包含我们已发送的实际数据、最后4个字节是实际数据。 另外、在这个实际数据周期之前、我们在每个8字节数据延迟器中额外观察到3个周期。 因此、我们想知道基于 SPI 的 CANFD 传输是否预计总共有6个周期、以及有哪些周期? 同样在 Cycel 4和5中、除了实际的4字节(32位)数据外、还有另外4字节的数据、这些是什么、我们能否将其一起传输8字节、以便两个周期减少为1个周期的实际传输?

    关于周期中的数据的详细信息,我在邮件中附上了 LA 会话,因为我无法在论坛中附加它。

    此致、

    Ankita

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

    Ankita、您好!

    我没有看到关于 LA 会话的电子邮件。  我将发送一封电子邮件、看看我们是否可以连接该设备、并将其用于共享 LA 会话数据。

    此致、

    Jonathan