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.

[参考译文] AM6442:如何在 AM64x (AM6422/AM6442)上使用 Yocto 中的 PRU-ICSSG 实现 IEEE 1588硬件 PTP

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1514990/am6442-how-to-implement-ieee-1588-hardware-ptp-on-am64x-am6422-am6442-with-pru-icssg-in-yocto

器件型号:AM6442
主题:AM6422中讨论的其他器件

工具/软件:

大家好:

我正在使用 Yocto Linux 在 AM6422平台上实现 IEEE 1588 PTP 和硬件时间戳。

我想要实现的目标是:

  • 一个 Grandmaster 和一个普通时钟之间基于时间戳的完全硬件时间同步。
  • 使用硬件时间戳来正确使用 ptp4l 和 phc2sys。

问题:

  • 要将以太网端口绑定到带硬件时间戳的 PRU-ICSSG、需要什么内核/器件树配置?
  • 是否需要将任何特殊固件加载到 PRU 内核(PTU 固件)?
  • 如何确认时间戳实际上是在硬件中获取的、而不是在软件中获取的?
  • 是否有任何适用于 PTP 的使用 Yocto、ptp4l 和基于 PRU 的以太网的工作示例或参考工程?

任何指导、文档或工作示例设置都将非常有用。

提前感谢!

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

    ICSSG 只是一种具有 IEEE1588时间戳的以太网实现、与 AM6x 系列中的其他以太网外设 CPSW3G 相比、没有什么独特的。 多年来、PTP 示例一直是使用标准 Linux 命令的 SDK 的一部分。

    https://software-dl.ti.com/processor-sdk-linux-rt/esd/AM64X/latest/exports/docs/linux/Foundational_Components pTP/PRU-ICSS/PRU_ICSSG Linux_Drivers 以太网.html#pTP-normal-clock 

    TI 没有任何独特之处、

    ethtool -T eth2

    将在 Linux 中打印出以太网端口与硬件时间戳的相关功能。

    有一个关于运行此 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1009997/am6442-linux-time-sensitive-networking-on-sitara-processors-including-am64x 的分步网络研讨会 。 对于 ICSSG、只需替换任何以太网设备、默认 SDK eth2为 ICSSG1端口。

     Pekka

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

    嗨、Pekka、

    我现在有了这款器件、并使用您之前分享的文档和在线研讨会 pdf、继续使用 AM6422上的 IEEE 1588 PTP 和硬件时间戳。 我对 PRU-ICSSG 以太网和 PTP 仍然相对较新、因此我想确认一些观察结果并澄清一些疑问。

    我已经确认上支持硬件时间戳 eth2

    root@am64xx-evm:~# ethtool -T eth2
    Time stamping parameters for eth2:
    Capabilities:
            hardware-transmit
            software-transmit
            hardware-receive
            software-receive
            software-system-clock
            hardware-raw-clock
    PTP Hardware Clock: 2
    Hardware Transmit Timestamp Modes:
            off
            on
    Hardware Receive Filter Modes:
            none
            all

    我还看到 PRU 以太网固件已成功加载:

    root@am64xx-evm:~# dmesg | grep prueth
    [   14.307022] icssg-prueth icssg1-eth: TI PRU ethernet driver initialized: single EMAC mode
    [   15.272186] remoteproc remoteproc12: Booting fw image ti-pruss/am65x-sr2-pru0-prueth-fw.elf, size 39464
    [   15.313383] remoteproc remoteproc13: Booting fw image ti-pruss/am65x-sr2-rtu0-prueth-fw.elf, size 31140
    [   15.343257] remoteproc remoteproc4: Booting fw image ti-pruss/am65x-sr2-txpru0-prueth-fw.elf, size 39068

    However, I noticed a discrepancy: in the device tree (k3-am642-evm.dts), the firmware names are listed as am64x-sr2-*, but the dmesg log refers to am65x-sr2-*. Interestingly, I can also see the same am65x-sr2 strings referenced inside the icssg-prueth.c driver.

    	icssg1_eth: icssg1-eth {
    		compatible = "ti,am642-icssg-prueth";
    		pinctrl-names = "default";
    		pinctrl-0 = <&icssg1_rgmii1_pins_default>;
    		sram = <&oc_sram>;
    		ti,prus = <&pru1_0>, <&rtu1_0>, <&tx_pru1_0>, <&pru1_1>, <&rtu1_1>, <&tx_pru1_1>;
    		firmware-name = "ti-pruss/am64x-sr2-pru0-prueth-fw.elf",
    				"ti-pruss/am64x-sr2-rtu0-prueth-fw.elf",
    				"ti-pruss/am64x-sr2-txpru0-prueth-fw.elf",
    				"ti-pruss/am64x-sr2-pru1-prueth-fw.elf",
    				"ti-pruss/am64x-sr2-rtu1-prueth-fw.elf",
    				"ti-pruss/am64x-sr2-txpru1-prueth-fw.elf";
    

    问题:

    1. 即使存在命名不匹配(DT 中的 am64x-sr2与日志和驱动程序中的 am65x-sr2)、PRU 以太网接口也可以正常工作。
      这是否只是 AM64x/AM243x 器件之间的常见命名重用?

    2. 是否没有办法分析预编译的固件二进制文件、而是查看 PRU-eth 固件(尤其是 PTP 处理)的源代码?
      我想了解如何在 PRU 内实现实际的硬件时间戳。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尽管存在命名不匹配(DT 中的 am64x-sr2与日志和驱动程序中的 am65x-sr2)、但 PRU 以太网接口仍然工作正常。
    这是否只是 AM64x/AM243x 器件之间的常见命名重用?

    子系统 ICSSG 是相同的。 带有该子系统的第一个器件是 AM65x、因此一些文件和驱动程序在其名称中具有该名称。 因此、命名不匹配只是这种情况的一种产物。

    没有分析预构建的固件二进制文件、是否有办法查看 PRU-eth 固件的源代码(尤其是 PTP 处理)?
    我想了解如何在 PRU 内实现实际的硬件时间戳。

    我们不共享 PRU 网络固件的源代码。 生成的时间戳在理论上尽可能接近 RGMII 接口。 固件只读取时间戳并将其传递给驱动程序使用的数据结构。

     Pekka

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

    感谢您的澄清。

    我刚才还怀疑 INDUSTRIAL-COMMUNICATIONS-SDK 以太网固件是预编译的、不是开源的、那么 PRU-AM64X 的预期用途是什么? 我缺少什么吗?

    它主要用于评估 Profinet、EtherCAT 等协议吗? 或者、它是否还包含与带有 PRU-ICSSG 的 IEEE 1588 PTP 相关的工具或示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PRU 以太网固件是经过预编译的、不是开源的、那么 INDUSTRIAL-COMMUNICATIONS-SDK AM64X 的预期用途是什么? 我是否遗漏了某些内容?

    这个基于 FreeRTOS 的   R5内核 INDUSTRIAL-COMMUNICATIONS-SDK AM64X 与 Linux 使用 ICSSG 无关。 使用工业现场总线运行基于 R5的网络可以与 Linux 共存、但每个以太网外设都由现场总线协议或 Linux 拥有。  ICSSG-AM64X 有不同的 INDUSTRIAL-COMMUNICATIONS-SDK 固件、也是闭合源固件。 有一个 EtherNet/IP 文件总线的这种共存示例、请参阅 https://software-dl.ti.com/processor-industrial-sw/esd/ind_comms_sdk/am64x/latest/docs/api_guide_am64x/EXAMPLES_INDUSTRIAL_COMMS_ETHERNETIP_ADAPTER_TUNNELING_DEMO.html 

    它主要用于评估 Profinet、EtherCAT 等协议吗? 或者、它是否还包含与带有 PRU-ICSSG 的 IEEE 1588 PTP 相关的工具或示例?

    EtherCAT-AM64X 用于评估和生产 IO-link 主站、INDUSTRIAL-COMMUNICATIONS-SDK 子器件、PROFINET 器件和 EtherNet/IP 适配器。 基于以太网的版本利用 IEEE 1588时间戳功能来实现时钟同步。 具体取决于哪个选项接近 IEEE1588 PTP 或使用方式不同。

     Pekka