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:用于 OSPI 驱动程序的 Linux u-boot 和内核时钟配置

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1102275/am6442-linux-u-boot-and-kernel-clock-configuration-for-ospi-driver

器件型号:AM6442

您好!

我们将最新的 Linux SDK 与 AM6442配合使用、并拥有使用 QSPI 闪存的客户硬件。 查看器件树、客户代码中的最大时钟配置为40MHz。 驱动程序以某种方式假设 OSPI 硬件模块接收到200MHz 的内部时钟、并且驱动程序为 OSPI_CLK 配置一个/6分频器、该分频器现在应为33.3MHz

但是、当查看示波器时、OSPI_CLK 实际上为27.6MHz。

我们确定 OSPI 硬件模块的内部时钟实际上是166.66MHz、而不是200MHz、并通过 K3_conf 实用程序验证该时钟。

两个问题:

[] OSPI 模块的输入时钟是在哪里定义的? 是 u-boot 器件树条目还是其他位置?

[]为什么假定 OSPI 模块接收到200MHz 时钟,u-boot 和内核驱动程序?

谢谢!

-Gunter

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

    大家好、Gunter、

    感谢您的提问、我叫 Andrew、我很乐意为您提供帮助。  我已将您的问题转达给团队、希望在接下来的1-2个工作日内得到您的回复。  在我研究这个问题时、您是否有任何关于这个问题的更新/发展需要我们加以考虑?

    此致、

    Andrew

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

    大家好、Gunter、

    感谢您的耐心等待。  有关 OSPI_CLK 的更多信息、请参阅 AM64x TRM、特别是第184-187页: https://www.ti.com/lit/ds/symlink/am6442.pdf?ts=1623989396311&ref_url=https%253A%252F%252Fwww.google.com%252F

    有关 AM64x 的 QSPI/OSPI 闪存过程的更多详细信息、请参阅以下文档: https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/07_03_01_006/exports/docs/linux/Foundational_Components/U-Boot/UG-QSPI.html

    有关 AM64x 引导过程的一般信息: /cfs-file/__key/communityserver-discussions-components-files/791/AM64x_5F00_Boot_5F00_Overview.pdf

    这些是否有助于澄清您遇到的问题?

    此致、

    Andrew

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

    尊敬的 Andrew:

    实际上、问题是一个非常具体的软件问题以及 Linux 驱动程序行为问题。 我们认为驱动器中存在一个错误、即它假定输入时钟错误并根据该错误做出决策。 问题是、我们来了解它的底部。

    此致、

    -Gunter

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

    您好!

    您是否对此主题有更新?

    谢谢!

    -Gunter

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

    大家好、Gunter、

    感谢您的耐心等待、对延迟表示歉意。  您是否想发布从 k3conf 实用程序收到的确切输出? 此外、您能否提供"OSPI_CLK"的示波器捕获

    此致、

    Andrew

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

    大家好、Gunter、

    您能否向我们提供有关您是否仍遇到此问题的更新信息?

    此致、

    Andrew

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

    尊敬的 Andrew:

    是的、问题仍然存在、因为我认为这是一个 Linux 时钟驱动程序问题、其中驱动程序假定使用不同的源时钟来确定 SPI 时钟的乘法器和分频器。 驱动程序假定源时钟为200MHz、而实际时钟为166MHz。

    以下是 k3conf 输出:

    此致、

    -Gunter

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

    尊敬的 Andrew:

    再次查看我最初在这方面的问题:

    两个问题:

    [] OSPI 模块的输入时钟是在哪里定义的? 是 u-boot 器件树条目还是其他位置?

    []为什么假定 OSPI 模块接收到200MHz 时钟,u-boot 和内核驱动程序?

    此致、

    -Gunter

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

    大家好、Gunter、

    感谢您提供的其他信息、我已将您的观察结果转达给团队、希望他们能尽快提供最新信息。

    此致、

    Andrew

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

    大家好、Gunter、

    感谢您的耐心等待。  我实际上在相关主题上找到了另一个用于 AM64x 的 E2E 主题、该主题详细介绍了 OSPI0_CLK 属性的访问和设置过程: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1096598/am6442-ospi_ecc-interrupts

    我还引用了下面 DTS 文件中需要查找的相关代码部分:

    ospi0_pins_default: ospi0-pins-default {
    pinctrl-single,pins = <
        AM64X_IOPAD(0x0000, PIN_OUTPUT, 0) /* (N20) OSPI0_CLK */
        AM64X_IOPAD(0x002c, PIN_OUTPUT, 0) /* (L19) OSPI0_CSn0 */
        AM64X_IOPAD(0x000c, PIN_INPUT, 0) /* (M19) OSPI0_D0 */
        AM64X_IOPAD(0x0010, PIN_INPUT, 0) /* (M18) OSPI0_D1 */
        AM64X_IOPAD(0x0014, PIN_INPUT, 0) /* (M20) OSPI0_D2 */
        AM64X_IOPAD(0x0018, PIN_INPUT, 0) /* (M21) OSPI0_D3 */
        AM64X_IOPAD(0x001c, PIN_INPUT, 0) /* (P21) OSPI0_D4 */
        AM64X_IOPAD(0x0020, PIN_INPUT, 0) /* (P20) OSPI0_D5 */
        AM64X_IOPAD(0x0024, PIN_INPUT, 0) /* (N18) OSPI0_D6 */
        AM64X_IOPAD(0x0028, PIN_INPUT, 0) /* (M17) OSPI0_D7 */
        AM64X_IOPAD(0x0008, PIN_INPUT, 0) /* (N19) OSPI0_DQS */
    >;
    };

    请告诉我们这是否有帮助、或者您是否需要进一步的帮助。

    此致、

    Andrew

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

    您好 Gunter、

    很抱歉耽误你的时间。

    [引用 userid="10468" URL"~/support/processors-group/processors/f/processors-forum/1102275/am6442-linux-u-boot-and-kernel-clock-configuration-for-ospi-driver "]驱动程序以某种方式假设 OSPI HW 模块接收到200MHz 的内部时钟,并且驱动程序为 OSPI_CLK 配置了一个/6分频器,该分频器现在应为33.3MHz[/quot]

    您能否指向驱动程序假定 OSPI 输入时钟为200MHz 的代码? 驱动程序在何处配置/6分频器? 或者、您是如何确定这些信息的?

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

    您好、Bin、

    k3conf 显示实际 OSPI 内部时钟为166MHz (而非200MHz)、我们可以看到/6分频器、示波器上的 OSPI 接口时钟为27.6MHz (166MHz/6)。

    此致、

    -Gunter

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

    您好 Gunter、

    内核 DTS 将 OSPI 输入时钟设置为166MHz、将最大输出时钟设置为40MHz。 因此、分频器应该为/6、这将产生27.6MHz 的输出时钟。 分频器/4将使输出时钟为41.5MHz、超过最大40MHz 设置。

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

    您好、Bin、

    我将要求客户测试该理论、方法是将 ospi 输出时钟设置为45MHz、然后使用示波器测试 ospi 时钟速度。

    [1]如果驱动器假定 输入时钟为166MHz (我们认为是这样):

    在 DTS 中配置为45MHz 的 ospi 输出时钟、然后查看驱动程序是否配置了分频器/4。

    它应该根据166MHz/4 = 41.5MHz 的计算结果来实现、这是可能的最高时钟、但低于45MHz。

    [2]如果驱动器假定 输入时钟为200MHz:

    同时、我们要在此处测试驱动器没有错误地假设输入时钟为200MHz。 如果驱动器恰好假设输入时钟为200MHz、则应将其配置为分频器/6、从而达到33MHz。 这是可能的最高时钟、低于45MHz。 它不应配置为分频器/4、因为这会导致50MHz 输出时钟、高于45MHz。

    此致、

    -Gunter