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.

[参考译文] TMDS62LEVM:如何使用 SOC_MODULEGetClockFrequency ()

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1488462/tmds62levm-how-to-use-soc_modulegetclockfrequency

器件型号:TMDS62LEVM
主题中讨论的其他器件:AM62LSysConfig

工具/软件:

您好、

在哪里可以找到模块 ID 和时钟列表? 似乎不能像 Am62x 那样点击

谢谢、

Dazong

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

    您好、Dazong、

    上述 API 用于获取所有外设模块的时钟频率。

    因此、如果您想知道任何外设的工作频率、只需传递模块 ID 和时钟 ID。

    工作频率结果应在 clockrate 变量中可用。

    通常、我们需要将这些详细信息添加到 SCI 文档中。  我需要查看这些详细信息。  

    目前、请使用以下文件获取时钟 ID 和外设 ID。

    C:\ti\freertos_sdk_am62lx_11_00_00_05\source\drivers\scp\scmi\scm\am62lx soc

    此致、

    Anil.

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

    Dazong,

    以下链接有助于获取有关外设运行频率即频率的详细信息。  

    https://dev.ti.com/sysconfig/#/config/?args=--product%20%2Fmnt%2Ftirex-content%2Fsitara_ctt_1_1_4%2F.metadata%2Fproduct.json%20--device%20AM62L%20--package%20%22FCBGA%20P$OPEN$ANBP$CLOSE$%22%20--variant%20AM62L31-G%20--context%20system

    此致、

    Anil.

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

    谢谢 Anil、

    我尝试得到的模块频率是 LPDDR4。  

    我能够找到模块 id AM62LX_DEV_DDR16SS0

    但在 scmi_clocks.c 文件中以关键字搜索 DDR4时、时钟 ID 似乎尚不可用

    请您确认一下。

    谢谢、

    Dazong

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

    您好、Dazong、

    我   无法找到 DDR ID、我觉得软件中不提供此 DDR ID、因为 ROM 引导加载程序已经 初始化 DDR、用户无需再次触摸 DDR INIT。

    尝试使用时钟 ID 作为0和1、检查正在获得的频率值。

    是否要确认 DDR 是否以正确的频率运行?

    还是要在软件中读取 DDR 频率? 这是你的 要求吗?

    此致、

    Anil.

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

    尊敬的 Anil:

    我们的硬件验证软件的前几行将打印模块频率、以便确保它们以正确的速度运行。

    我们读取的25MHz 带有  AM62Lx_DEV_DDR16SS0、时钟值为0和1、似乎错了。 请检查您这边的值吗? 我们使用 SDK 中的 tiboot3.bin。

    SoC_moduleGetClockFrequency (AM62LX_DEV_DDR16SS0、0、&clkrate)

    SoC_moduleGetClockFrequency (AM62LX_DEV_DDR16SS0、1、&clkrate)

    谢谢、

    Dazong

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

    您好、Dazong、

    希望其他外设没有问题。

    我怀疑时钟 ID 有问题以获取 DDR 频率、我可以在内部与团队核实并告诉您。

    此致、

    Anil.

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

    您好、Dazong、

    我已与内部团队核实。

    向 SCM 内核请求获得 DDR 时钟频率 SCM 内核侧存在一些问题。

    所以,我们不支持这个请求,并且 到目前为止,没有 PAN 来支持这个问题。

    现在、请跳过此请求并继续使用其他外设。

    另外、如果  不满足该读取的 DDR 频率、会对您的应用产生影响吗?

    如果您遇到 DDR 以外的任何问题、请告诉我。

    此致、

    Anil.

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

    尊敬的 Anil:

    借助硬件验证、我们希望确保所有外设处于正确的时钟频率、而从软件读取是最直接/最简单的方法。 您能提出另一种可以验证 LPDDR4频率的方法吗?

    SPI 频率也显示25MHz、我们将其设置为的位置

    谢谢、

    Dazong

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

    您好、Dazong、

    对于 DDR、我可以向内部专家咨询如何确认 DDR 以哪种频率运行?

    对于 SPI、您似乎已在第140行配置了50MHz 时钟、但在 SCI 空闲请求后您仍然看到了25MHz 时钟?

    这是问题吗?

    此致、

    Anil.

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

    尊敬的 Anil:

    25MHz 的这个 SPI 输入时钟也来自  SOC_MODULEGetClockFrequency ()。

    SoC_moduleGetClockFrequency (AM62LX_DEV_MCSPI1、0、&clkRate);

     谢谢、

    Dazong

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

    您好、Dazong、

    请使用下面的链接传递时钟 ID 以获取特定的外设 频率。

    尝试使用302而不是0、然后查看您是否能够获得50MHz 时钟。

    https://github.com/TexasInstruments/arm-trusted-firmware/blob/ti-master/docs/plat/ti-am62l.rst

    此致、

    Anil.

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

    谢谢 Anil、

    是、有效Slight smile

    Dazong

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

    您好、Dazong、

    为了验证 AM62L SOC 上的 DDR 频率、我确定了两种可能的软件方法。 下面是每种方法的详细说明。

    方法1:监控其他外设中的 DDR PLL 输入使用情况

    方法:
    •DDR PLL 输入时钟由多个外设(例如、计时器、其他高速接口)使用。
    •如果任何外设共享该时钟,我们可以监控该外设的时钟配置。
    •在 AM62L 中、DDR PLL 输入时钟不与任何其他 IP 共享-它仅专用于 DDR 子系统。

    由于没有其他外设可以间接监控 DDR 频率、因此该方法不适用。


    方法2:检查输入到 DDR 输出时钟的 PLL 比例因子

    方法:
    •我们不会监视另一个 IP、而是检查时钟树配置以确定 DDR 频率。
    •PLL 的输入时钟为25MHz、它通过 PLLHSDIVA 块生成 DDR 频率。
    •要监测的关键参数是 HSDIVCLKOUT2、它负责提供最终的 DDR 时钟。
    •通过读取 HSDIVCLKOUT2的比例因子、我们可以确认是否生成了预期的频率。

    AM62L 中的实现:
    DDR PLL 接收25MHz 输入时钟。
    2. PLLHSDIVA 块使用分频器(HSDIVCLKOUT2)缩放此输入。
    3。预期比例因子为5、因此 DDR 时钟为25MHz× 5 = 400MHz。
    4.通过检查 HSDIVCLKOUT2比例因子是否设置为5、我们可以确认 DDR 在400MHz 下运行。

    https://dev.ti.com/sysconfig/#/config/?args=--product%20%2Fmnt%2Ftirex-content%2Fsitara_ctt_1_1_4%2F.metadata%2Fproduct.json%20--device%20AM62L%20--package%20%22FCBGA%20P$OPEN$ANBP$CLOSE$%22%20--variant%20AM62L31-G%20--context%20system

    请确保、您不应在该寄存器中设置任何会影响 DDR 的值。

    此致、

    Anil.

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

    尊敬的 Anil:

    我现在忙于处理另一项任务、我将在本周晚些时候尝试并更新您。

    谢谢您、

    Dazong

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

    您好、Dazong、

    我不会关闭此主题、也不会征求您的反馈。

    此致、

    Anil.

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

    尊敬的 Anil:  

    从 USB 引导后、DDR 时钟是在 TF-A 阶段初始化还是在更高版本中初始化?

    谢谢、

    Dazong

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

    您好、Dazong、

    DDR 时钟初始化和配置在 TF 阶段1中完成(仅限阶段)。

    您可以在下面查看这些详细信息。

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM62LX/11_00_00_05/exports/docs/api_guide_am62lx/BOOTFLOW_GUIDE.html

    此致、

    Anil.

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

    尊敬的 Anil:

    1)如会议所述、让我从 DDR4的输入时钟频率了解 TI 的情况。

    根据您读取值的建议方法、我得到了  

    FB_DIV_INT = 80
    hsdiv = 4

    我想它在500MHz 上运行。

    2)在会议中,我讨论了 I2C 时钟频率问题。 因为我们正在逐个实施模块。 您希望我测试所有模块并一次性提供所有 Matter、还是希望我逐个模块更新此模块

    谢谢、

    Dazong

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

    您好、Dazong、

    在会议中、我讨论了 I2C 时钟频率问题。 因为我们正在逐个实施模块。 您希望我测试所有模块并一次性提供所有重要内容、还是希望我按模块更新此模块

    是的、上面的一个对所有模块进行有意义和完整的测试、并在一条不起作用的注释中分享所有详细信息。

    我们可以一次性修复它们。

    [引用 userid="628999" url="~/support/processors-group/processors/f/processors-forum/1488462/tmds62levm-how-to-use-soc_modulegetclockfrequency/5757517 #5757517"]

    hsdiv = 4

    我想它在500MHz 上运行。

    [/报价]

    您能否确认您正在读取的寄存器地址是哪一个?

    此致、

    Anil.

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

    尊敬的 Anil:

    从中读取值

      INFO ("FB_DIV_INT =%d\n"CSL_REG32_RD (0x04060030)和0xFFF);
      INFO ("hsdiv =%d\n"CSL_REG32_RD (0x04060088)& 0x3F);
    谢谢、
    Dazong
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="628999" url="~/support/processors-group/processors/f/processors-forum/1488462/tmds62levm-how-to-use-soc_modulegetclockfrequency/5757517 #5757517"]

    1)如会议所述、让我从 DDR4的输入时钟频率了解 TI 的情况。

    根据您读取值的建议方法、我得到了  

    FB_DIV_INT = 80
    hsdiv = 4

    我想它在500MHz 上运行。

    [/报价]

    您好、Dazong、

    根据时钟配置和测试结果:
    •活动 HSDIV 值设置为4。
    •在时钟树计算中、使用的公式为:
    有效分频器= HSDIV + 1、
    实际分压器变为5。
    •给定基础频率时、生成的 DDR 输入时钟为:
    基本频率/5 = 400 MHz。

    在 DDRSS (DDR 子系统)中:
    •DDR PHY 和 EMIF 模块在内部将400 MHz 时钟乘以2、从而产生800 MHz DDR 时钟。
    •由于 DDR (双倍数据速率)同时在时钟的上升沿和下降沿传输数据、因此有效数据速率变为:
    800 MHz× 2 = 1600MT/s (每秒兆次传输)。

    此致、

    Anil.

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

    感谢您的详细解释、Anil!

    您能告诉我、我在哪里可以找到此信息、我检查了 TRM、但找不到。  "DDR PHY 和 EMIF 模块在内部将400 MHz 时钟乘以2、从而产生800 MHz DDR 时钟"

    谢谢您、

    Dazong

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

    您好、Dazong、

    是的、TRM 中目前并未提及此信息。

    但是、我参考了 AM62L 时钟 IP 规范文档、据此、DDRSS 输出时钟固定在800 MHz。

    遗憾的是、我无法与您共享此内部文档、但为了供您参考、您可以将 DDRSS 输出视为始终在800 MHz 中运行。

    我还将咨询硬件专家、了解我们如何在未来的修订版本中将此详细信息整合到 TRM 中。

    此致、

    Anil.

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

    尊敬的 Anil:

    我们已经探测了 LPDDR4 clk 并验证它是否在800MHz 上运行。  

    是的、 如果 可以在 TRM 中包含此信息"将400 MHz 时钟乘以2 "、那会很好。

    我计划保持该工单打开、直到我们确认可以读取我们使用的所有模块的 clk。 如果您认为其他情况、请告诉我。

    谢谢、

    Dazong

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

    您好、Dazong、

    我不会关闭此主题。

    当您在读取外设时钟频率时遇到任何问题时、请分享所有详细信息。

    此致、

    Anil

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

    尊敬的 Anil:

    我现在正在分析 TF-A。 您能验证我是否查看了正确的时钟设置文件吗?

    PLL:ti-processor-sdk-linux-am62lxx-evm-11.00.00.00.03\board-support\ 受信任的固件 -a-2.11+git\plat\ti\k3\am62l\scmi\drivers\am62lx\ soc clocks

    措辞:ti-processor-sdk-linux-am62lxx-evm-11.00.00.00.03\board-support\ TI-u-boot -2024.10+git\dts\上游\Arm64\ti\ src k3-am62l-main.dtsi

    我应该查看的任何其他文件? 我尝试实现的是确保时钟设置、然后将值放入  

    https://dev.ti.com/sysconfig/#/config/?args=--product%20%2Fmnt%2Ftirex-content%2Fsitara_ctt_1_1_4%2F.metadata%2Fproduct.json%20--device%20AM62L%20--package%20%22FCBGA%20P$OPEN$ANBP$CLOSE$%22%20--variant%20AM62L31-G%20--context%20system

    使用网站的可视输出,比较来自 SOC_ModuelGetClockFrequency ()的结果

    例如这些字段

    从 USB DFU 引导时、我不确定是否从 uboot 设置了外设

    谢谢、

    Dazong

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

    您好、Dazong、

    请查看 SCMI 呼叫流程。

    应用程序请求为特定 IP 设置时钟或打开或关闭 PSC。

    该请求会在控件跳转到 ATF 时写入共享存储器。  

    ATF 将决定是否执行特定操作是时钟设置还是 GET 或 PSC ON 或 OFF。

    因此、在 ATF 文件夹的第一级、您可以检查这些包装器文件。

    ATF 请求这些调用来执行时钟设置或 PSC 开/关操作。

    int32_t SOC_moduleGetClockFrequency(uint32_t moduleId, uint32_t clkId, uint64_t *clkRate);
    

    要获取时钟 ID、我们需要传递模块 ID 和时钟 ID、这些 ID 可在以下 below.h 文件中找到。

    因此、您需要使用这些文件来获取特定的 IP 频率。

    所有 PLL 设置均由 ROM 引导加载程序完成、同样、用户无需触摸它们。

    我不确定您是否要更新或重新配置不同的 PLL 设置?

    为什么要更改 PLL 设置?

    ​请告诉我、以上答复已解决了您的疑问。  

    此致、

    Anil.

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

    尊敬的 Anil:

    我们有两个问题:

    1)我们尝试使用 ti_power_clock_config.c 中的 gSocModuleClockFrequency[]设置计时器模块(计时器2和3)的时钟频率 当我们使用下面的 SysConfig 中所示的 HFOSC0_CLKOUT_SERDE 等选择时钟时、我们无法使 TFA 成功引导:

    SOC_ModuleClockFrequency gSocModulesClockFrequency[] = {
        { AM62LX_DEV_TIMER2, AM62LX_DEV_TIMER2_TIMER_TCLK_CLK_PARENT_GLUELOGIC_HFOSC0_CLK, 25000000 },
        //{ AM62LX_DEV_TIMER3, AM62LX_DEV_TIMER2_TIMER_TCLK_CLK_PARENT_GLUELOGIC_HFOSC0_CLK, 25000000 },
        
        { SOC_MODULES_END, SOC_MODULES_END, SOC_MODULES_END },
    };

    a)我们如何才能使其正常工作?

    b)标有红色的两个时钟来自哪里?

    c)计时器3没有像计时器2那样的11个时钟多路复用器选项、它们是否在内部连接?  

    2)我们还尝试使用下面的片段为 MCSP1设置不同的频率。

    SOC_ModuleClockFrequency gSocModulesClockFrequency[] = {
        { AM62LX_DEV_MCSPI1, AM62LX_DEV_MCSPI1_CLKSPIREF_CLK, 2400000000 },
        
        { SOC_MODULES_END, SOC_MODULES_END, SOC_MODULES_END },
    };
     

    但是、我们注意到、当使用某些时钟频率(例如2.4GHz、1000MHz、800MHz、700MHz、500MHz 等)时、TFA 引导无法完成

    而1.2GHz、600MHz、400MHz、300MHz、200MHz 等其他频率似乎可以正常工作。

    这是什么原因?

    此致、

    Simeon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid="648028" url="~/support/processors-group/processors/f/processors-forum/1488462/tmds62levm-how-to-use-soc_modulegetclockfrequency/5836971 #5836971"]

    a)我们如何才能使其正常工作?

    [/报价]

    您好 Simeon、

    SoC 中的所有计时器都有一个针对其输入时钟源的多路复用器选择机制。

    计时器时钟(TCLK)源
    •TCLK 指计时器输入时钟、它源自时钟多路复用器的输出。
    •例如、要选择 HFOSC 作为 TIMER2的输入时钟、以下参数是正确的:

    AM62LX_DEV_TIMER2_TIMER_TCLK_PARENER_GLUELOGIC_HFO SC0_CLK

    发出 SCMI 时钟设置请求后、您是否收到否定响应?
    •如果基于 SCMI 的方法不起作用、建议尝试直接进行多路复用寄存器配置、如下所示。

    您可以直接为计时器时钟源配置多路复用器、如下所示:
       
    /* ----------- TimerP ----------- */
    #define CONFIG_TIMER0_CLOCK_SRC_MUX_ADDR (0x9117000u)
    #define CONFIG_TIMER0_CLOCK_SRC_HFOSC0_CLKOUT (0x0u)
    
       
       
        /* set timer clock source */
        SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MAIN, 2);
        *(volatile uint32_t*)AddrTranslateP_getLocalAddr(CONFIG_TIMER0_CLOCK_SRC_MUX_ADDR) = CONFIG_TIMER0_CLOCK_SRC_HFOSC0_CLKOUT;
        SOC_controlModuleLockMMR(SOC_DOMAIN_ID_MAIN, 2);
    MCSPI 时钟注意事项:
    •MCSPI 功能时钟(FCLK)固定在50 MHz、无法直接修改。
    •如果需要 SPI 输出时钟(比特率)以24 MHz 运行、您可以使用 MCSPI 模块的预分频器和比特率寄存器来实现这一点。
    •这些设置可以通过 SysConfig 进行配置、也可以在代码中手动配置、而不是通过 SCMI 进行配置。

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

    尊敬的 Anil:

    我们正在研究的仍然是外设的输入时钟。

    我们要使用的文件是 ti_power_clock_config.c

    uint32_t gSocModules[];
    SOC_ModuleClockFrequency gSocModulesClockFrequency[];
    void Module_clockEnable(void);
    我们观察到的 是:
    当将计时器输入时钟设置为  AM62LX_DEV_TIMER2_TIMER_TCLK_PARENER_GLUELOGIC_HFOSC0_CLK 时、我们会使应用程序一开始就卡住(  加载应用程序二进制文件后、根本无法打印 UART)
    { AM62LX_DEV_TIMER2, AM62LX_DEV_TIMER2_TIMER_TCLK_CLK_PARENT_GLUELOGIC_HFOSC0_CLK, 25000000 },

    2.当使用 MCSPI 输入时钟频率时,我们观察到它可以设置为50MHz 以外的其他值,如100MHz ,并且 SOC_ModuleGetClockFrequency()也将返回100MHz。 我猜测 hsdiv_clkout6正在做一些事情、因为可以将除法设置为/1到/128之间的值。 我们要尝试一些不超过2.4GHz 的值

    { AM62LX_DEV_MCSPI1, AM62LX_DEV_MCSPI1_CLKSPIREF_CLK, 2400000000 },

    正如 Simeon 提到的、"1.2GHz、600MHz、400MHz、300MHz 200MHz 似乎工作"。 "使用的时钟频率如2.4GHz、1000MHz、800MHz、700MHz、500MHz 等将失败"

    { AM62LX_DEV_MCSPI1, AM62LX_DEV_MCSPI1_CLKSPIREF_CLK, 600000000 },
    SOC_moduleGetClockFrequency(AM62LX_DEV_MCSPI1, AM62LX_DEV_MCSPI1_CLKSPIREF_CLK, &clkRate);
    info("MCSPI1 CLK RATE: %d\n", clkRate);
    Print: MCSPI1 CLK RATE: 600000000

    我想这最终是两个问题。

    1.如果我们要更改 HSDIV 的值、是否建议使用  CSL_REG32_WR ()直接更改寄存器本身?

    2.如果我们要更改多路复用器输入(如 timer2的情况)、为什么有效的父时钟名称 AM62LX_DEV_TIMER2_TIMER_CLK_PARENER_GLUELOGIC_HFOSC0_CLK 不工作、整个应用程序就卡滞了

    谢谢、

    Dazong

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

    尊敬的 Anil:

     尝试直接配置计时器的多路复用器寄存器后、我看不到时钟频率变化、仍会获得100MHz。 使用 CONFIG_TIMER0_CLOCK_SRC_MUX_ADDR)= CONFIG_TIMER0_CLOCK_SRC_HFOSC0_CLKOUT 时、我认为它应该是25MHz、因为它直接来自 HFO?

    SOC_controlModuleUnlockMMR(SOC_DOMAIN_ID_MAIN, 2);
        *(volatile uint32_t*)AddrTranslateP_getLocalAddr(CONFIG_TIMER0_CLOCK_SRC_MUX_ADDR) = CONFIG_TIMER0_CLOCK_SRC_HFOSC0_CLKOUT;
        SOC_controlModuleLockMMR(SOC_DOMAIN_ID_MAIN, 2);

    计时器 CLK 速率:100000000

    谢谢您、

    Dazong

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
     尝试直接配置计时器的多路复用器寄存器后、我看不到时钟频率变化、仍在获取100MHz。 使用 CONFIG_TIMER0_CLOCK_SRC_MUX_ADDR)= CONFIG_TIMER0_CLOCK_SRC_HFOSC0_CLKOUT 时、我认为它应该是25MHz、因为它直接来自 HFO?

    您好、Dazong、

    是、上述多路复用器设置为 HFOSC 时钟。 计时器仅在25MHz 下运行、而不在100MHz 下运行。

    您能否确认您是如何确认计时器在100MHz 运行的?

    你从 ATF 读了吗?

    此致、

    Anil.

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

    尊敬的 Anil:

    仍然是裸机应用程序中的 SOC_moduleGetClockFrequency ()

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

    您好、Dazong、

    使用当前多路复用器设置、计时器在25 MHz 下运行。 我建议将计时器配置为生成10ms 的中断、然后验证实际的中断间隔以确认行为。

    SOC_moduleGetClockFrequency

    SCMI 时钟频率调用似乎返回了不正确的值。 这是因为计时器频率未通过 SCMI 接口的多路复用器选择进行设置。 因此、ATF 不知道在应用程序级别配置的预分频器设置、因此采用默认值进行响应。

    对于某些外设(如 I2C、SPI 等)、ATF 提供功能时钟(FCLK)速率、并且任何进一步的时钟分频都  是在 IP 级别使用预分频器配置发生的、那么您可能会收到 FCLK、而不是外设工作的实际频率。

    我的建议:
    始终从 ATF 检索 IP 的基频(FCLK)、然后读取 IP 的预分频器设置。 使用这两个值将可获得外设的准确有效时钟速率。

    此致、

    Anil.

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

    我会试一试 Anil、

    在裸机应用程序中、如果我要更改 hsdiv、我是否应该直接写入寄存器?

    我想设置所有时钟信息的最佳方法是在 ATF 或 BSL 中。 如果想要这样做、我应该修改 ATF 中的哪个文件?

    谢谢、

    Dazong

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

    您好、Dazong、

    在进行任何更改之前、请确认 您计划修改哪个 HSDIV。

    这一点很重要、因为修改 HSDIV 会影响多个 IP、不正确的变化会导致系统性能下降。


    重要注意事项:
    •HSDIV 更改会影响使用该输出的所有时钟使用者。
    •如果 SoC 的 PLL 通过同一 HSDIV 馈送多个外设、更改其分频器可能会意外减慢多个模块的速度。

    关于 ATF 和时钟控制:

    •ATF 不会公开简单的 API。
    •它将 SCMI (系统控制和管理接口)用于所有器件控制操作(例如时钟、复位和电源域)。

    SCMI 时钟和 PSC 控制流程:
    1.应用程序将消息写入 SCMI 共享内存。
    2.应用程序发出 SMC (Secure Monitor Call)调用 ATF。 在这里,应用程序停止并跳转到 ATF 代码。
    3.在 ATF 内部,该消息被解析并发送给  时钟设置/获取和 电源域(PSC)启用/禁用
    4. ATF 处理请求,并通过相同的共享内存发回响应。
    5、应用程序在 SMC 返回后读取结果。

    建议检查的文件:

    要了解 SET_CLOCK、GET_CLOCK 和 PSC 启用的完整流程、请执行以下操作:
    •从代码中的 SCMI 协议层开始。
    •跟踪通过特定于平台的服务处理程序的流量。
    •然后、调用进入内部时钟/PSC 驱动程序层(不是单个 API、它是一个链接调用流程)。

    以下代码位于 ATF 侧、因此当 SCMI 调用基于 SET、GET 或 PSC 启用的请求时、ATF 会调用特定的 API。

    此致、

    Anil.