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.

[参考译文] TMDS64GPEVM:我需要从 cortex-A 内核到 cortex-R 内核传递精确时间(PTP)。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1230185/tmds64gpevm-i-need-to-pass-the-exact-time-ptp-from-the-cortex-a-core-to-the-cortex-r-core

器件型号:TMDS64GPEVM

您好!

我知道可以使用 IPC 传递、但这会随机花费一些时间。

R5内核是否可以在需要时直接从硬件获得时间、就像 cortex A 内核一样?

提前感谢

安东

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


    您好 Anton Vainer

    感谢您的提问、

    [quote userid="528434" url="~/support/processors-group/processors/f/processors-forum/1230185/tmds64gpevm-i-need-to-pass-the-exact-time-ptp-from-the-cortex-a-core-to-the-cortex-r-core 是否存在办法可以让 R5内核在需要时直接从硬件获得时间,就像 cortex a core?

    请详细说明您所说的硬件以及您希望使用或使用的接口。

    此致、

    斯里尼瓦萨

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

    我认为在主域中有一个由 PTP 协议控制的计数器寄存器。 不是很确定。 我是否可以通过 R5内核的地址转换来访问这个计数器并且将它的值转换为实际的、精确的时间呢?

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

    您好 Anton Vainer

    谢谢你。

    我需要 有关您所考虑的实施方法的其他信息、以便能够在内部进行检查。

    此致、

    斯里尼瓦萨

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

    您好!

    根据我的理解、 CPSW IEEE1588支持意味着有一些寄存器用于保存硬件通过网络同步的 A 时间。 是这样吗?

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

    您好 Anton Vainer。

    感谢您的查询。  

    您是否有关于 所考虑用例的具体详细信息? 或者这是一个一般的"如何开始使用"问题吗?

    以下链接可能会很有用

    (+) AM6442:CPT -处理器论坛-处理器- TI E2E 支持论坛

    (+) AM6442:用于 AM6442上的时间敏感网络(TSN)的 PHY -处理器论坛-处理器- TI E2E 支持论坛

    3.2.7.3.1. CPSW3g - Processor SDK AM64X 文档

    (+) SK-AM64:A53和 R 内核之间的时间同步。 -处理器论坛-处理器- TI E2E 支持论坛

    此致、

    斯里尼瓦萨

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

    我认为它更偏向于如何开始。

    我理解在 Linux 方面、 phc2sys 应用程序就是用来获取 PTP 时间的。

    1) 1)它是如何得到时间的?

    2)它是否读取硬件?

    3) 3)如果是、我是否可以从 R5访问该硬件?

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

    您好、Anton、

    我不是 TI、但我们一直面临类似的 问题、请参阅此主题: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1187706/am6421-synchronizing-r5f-timer-with-a53-linux-system-time/4476732。 我没有跟进该线程、因为我们可以通过其他方法在 FPGA 外部生成所需的基于 clock_REALTIME 的 IRQ。

    根据我的理解、没有现成的解决方案。

    php2sys 被用来将一个 PHC 同步至 Linux 系统时钟(反之亦然)。 在 ARMv8 (如 AM6x 中的 Cortex-A53)上 、系统时钟基于架构定义的计时器。 这是 AM64x 上自由运行的时钟单调时钟、由 GTC 驱动。

    该硬件计时器可由 A53内核快速读取并可用于生成计时器中断、但仅基于从0开始的单调时间、无法进行调优。 在 Linux 中、其他一切都是"软件"。 php2sys 计算交叉时间戳并将其输入到时钟算法、该算法基本上会产生一个绝对偏移和一个频率偏移、可用于将 Linux 系统时钟调整到 PHC 时钟。 Linux 获取架构计时器计数器、将该计数器乘以调整后的频率偏移、然后添加绝对偏移、从而生成"clock_REALTIF"。

    遗憾的是、R5f 内核只能访问"原始"GTC 值、该值只能读取、不能用于生成中断。

    PHC 本身在 CPSW CPTS 中实现。 这是一种硬件可调计数器、可用于对传入和传出网络数据包进行时间戳记。 Linux PTP 守护程序决定 CPSW CPTS 和"主"之间的绝对偏移和频率偏移、并同步 CPTS 计数器以跟随主。 该 PHC 计数器显示实际的"纳秒"、但遗憾的是、没有寄存器接口来读取该计数器。 读取 CPTS 计数器的唯一方法是写入一个寄存器、该寄存器将具有"当前"时间戳的事件推送到 CPTS、即使是 FIFO、但该事件 FIFO 由 Linux 内核驱动程序维护、因此您无法直接从 R5f 访问该数据。

    一些随机想法:

    • 您可以使 Linux 时序参数对 R5f 可用。 Linux 用户空间可以访问这些外设(即 clock_gettime 和类似的工作方式、用户空间仅读取架构定时器、然后根据通过内核 vDSO 提供的计时参数来计算 clock_REALTIME)。 然后、R5f 可读取 GTC、并采用与 Linux 用户空间相同的计算。 遗憾的是、根据我的理解、这方面没有稳定的内核接口。
    • 您可以修改 CPSW CPTS 内核驱动程序、将软件推送的时间戳交付到 R5f 可以访问的位置、但这当然也会受到不确定性延迟的影响。 也可以让 R5f 来处理 CPSW CPTS 事件 FIFO、并通过 IPC 提供 Linux 内核驱动程序所需的一切(可能需要相当多的努力、而且没有干净的解决方案)。
    • 您可以查看 CPSW CPTS 提供的 Genf 功能来同步通用"定时器"模块。
    • 您可以将主 CPTS 与 CPSW CPTS 同步、并从 R5f 读取该主 CPTS (需要付出一些努力、可能更干净)
    • 您可以使用其中一个 ICSSG IEP 外设并将其同步到 CPSW CPTS。 内核中可能有更多的支持、因为 ICSSG 驱动程序支持 PTP、因此它是一个 PHC。 我认为、CPSW CPTS 与 IEP 之间尚没有同步的硬件支持。

    不幸的是,我也没有一个解决方案为你,但如果你想投入努力,我很乐意帮助我已经知道的。

    此致、

    多米尼克

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

    您好 Anton Vainer、

    感谢您的关注

    2)它是否读取硬件?

    3) 3)如果是、我是否可以从 R5访问该硬件?

    [/报价]

    能否详细介绍一下您在这里参考的是什么硬件?

    我必须根据您的回复重新分配主题帖。

    此致、

    斯里尼瓦萨

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

    您好、 

    感谢您的详细回答。

    您能否详细说明:

    读取 CPTS 计数器的唯一方法是编写一个寄存器,该寄存器将具有"当前"时间戳的事件推送到 CPTS,即使是 FIFO,但该事件 FIFO 由 Linux 内核驱动程序维护,因此您无法直接从 R5f 访问该数据。

    如何使用 CPSW CPTS?

    我能够生成到 R5的中断吗?

    什么是事件 FIFO? 是否是具有寄存器访问权限的硬件组件?  

    您可以将主 CPTS 与 CPSW CPTS 同步,并从 R5f 读取主 CPTS (相当多的努力,可能更干净)

    听起来不错。 我如何同步这2个计数器?

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

    您好,  

    涉及什么硬件以及涉及什么是我的问题。 "我想知道。"

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

    您好、Anton、

    CPSW CPTS 有什么用?
    什么是事件 FIFO? 是否是具有寄存器访问权限的硬件组件?  [/报价]

    请参阅 TRM (修订版 F)中的12.2.1.4.7章节。 就像我说的、它是一个可以根据其他一些时间主控进行调节的计数器、并且支持"时间戳"。 所有 CPTS 模块都支持 来自系统范围时间同步路由器的_push 输入。 此外、CPSW CPTS 还支持网络数据包时间戳。 这些时间戳会被推入 CPTS 的事件 FIFO 中。 它位于 CPTS 内部、并将(时间戳)事件传递给从 FIFO 读取数据的 CPU、请参阅 TRM 中的第12.2.1.6.3章。

    每个 CPTS 还能够在 Genf 上生成派生的输出、 信号。 这些 Genf 信号也可以通过单独的"微移"一个"PPM"寄存器来调节、就像主计数器一样、但是我认为这种用法有可能会有一些问题。 Genf PPM/微移器基于单独的计数器、只有 Genf 输出的初始起点(通过 Genf COMP 设置)基于主计数器。 通过 PTP、您可以通过 PPM/微移寄存器同步主计数器、因为主计数器是唯一可以为其进行时间戳的功能、但之后您需要"瞬间"将相同的设置应用于 Genf PPM/微移寄存器。 Linux 驱动程序通过在禁用中断时"极其快速"尝试实现这一点(请参阅 https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/net/ethernet/ti/am65-cpts.c?h=ti-linux-6.1.y#n465)、但我相信最终 Genf 输出仍然会相对于主计数器发生漂移。 不过、我们从未验证过这一假设。

    是否可以生成 R5中断?

    CPSW CPTS 生成所有类型的中断、并可以路由到 Linux。 如果您根据 CPTS 计数器寻找中断、该计数器可以通过 Genf COMP 功能工作。 Genf 输出的初始起始点由主计数器确定、我相信大家应该能够将它用作一个一次性计时器。 Genf 可以通过 Timesync 路由器路由到 R5f 中断。

    在"拥有"CPSW CPTS 的 Linux 驱动程序与 R5f 内核的需求之间进行协调可能会产生问题。

    听起来不错。 如何同步2个计数器?

    "在硬件中"、其工作方式是在两个 CPTS 实例之一上输出同步信号、并通过硬件 在另一个实例中输入_push。 这将使您可以获取交叉时间戳并将其输入到时钟算法、该算法会生成主 CPTS 和 CPSW CPTS 之间的绝对偏移和频率偏移:

    CPTS 同步输出 USS CPTS 计数器中用于驱动输出的位之一、因此您会获得"2的幂"数纳秒、例如每33.554.432ns 一次。 您可以使用时间同步路由器将该同步信号路由到其中一个硬件 push 输入、并且每当 CPSW CPTS 同步输出变为高电平时您都会在事件 FIFO 上得到一个事件。 该事件在主 CPTS 事件 FIFO 上推送、并包含 SYNC 输出具有上升沿时的主 CPTS 计数。 现在您需要通过 IPC 向 R5f 提供"当前"CPSW CPTS 计数、但结果为几毫秒。 然后、R5f 可以计算 SYNC 输出变为高电平(即所有低位为零)并具有两个时间戳时 CPSW CPTS 上的时间。

    此致、

    多米尼克

    [/quote]