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.

[参考译文] AM625:更改 UART 时钟速度

Guru**** 2476355 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1463108/am625-changing-uart-clock-speeds

器件型号:AM625

工具与软件:

您好!

  我正在将 UART 用于 RS485、并想尝试将设计提高到最大值。

我发现通过系统、UART 的时钟速度为48Mhz。

我通过使用"clocktool"和:

# cat /sys/class/tty/ttyS0/uartclk
48000000

这样可以实现3Mbps 速率。 (16分频)

作为参考、我可以在 UART:

使用"k3conf 转储时钟155"

我看到:

---------------------------------------------------------------------------------------------------------------------------- |
|器件 ID |时钟 ID |时钟名称|                                                     状态         |时钟频率|
---------------------------------------------------------------------------------------------------------------------------- |
|  155   |    0   | DEV_UART4_FCLK_CLK                                             | CLK_STATE_READY | 48000000 |        
|  155   |    1   | DEV_UART4_FCLK_CLK_PARTNER_USART_PROGRAMED_CLOCK_DIVIDER_OUT4 | CLK_STATE_READY | 48000000 |        
|  155   |    2   | DEV_UART4_FCLK_CLK_PARTNER_HSDIV4_16FFT_MAIN_1_HSDIVOUT1_CLK    | CLK_STATE_READY | 160000000 |       
|  155   |    5   | DEV_UART4_VBUSP_CLK                                            | CLK_STATE_READY | 125000000      |
---------------------------------------------------------------------------------------------------------------------------- |

我编辑了"k3-am62-main.dtsi"、并更改了行:

时钟=<&K3_CLKS 155 2>;

收件人:

时钟=<&K3_CLKS 155 0>;

我确认速度现在更高:

# cat /sys/class/tty/ttyS0/uartclk
160000000

我还可以在启动时看到这一点:

[   1.653580] 2840000.serial: ttyS0在 MMIO 0x2840000处(IRQ = 428、BASE_BAUD = 10000000)是一个8250
[   1.655597] 2860000.serial: ttyS1、在 MMIO 0x2860000处(IRQ = 429、BASE_BAUD = 10000000)是一个8250

我做了一些测试、它工作正常。  现在、我想了解如何进一步推进这一过程。

请在时钟工具中参考此图像:

我想能够修改"hsdiv_clkout0"的 HSDIV 以及 UART4_CLK_CTRL 分频值。

但我似乎不知道如何实现这一点。  

您能向我指出正确的方向吗? 谢谢!

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

    尊敬的 Jason:

    [报价 userid="624199" url="~/support/processors-group/processors/f/processors-forum/1463108/am625-changing-uart-clock-speeds "]

    我编辑了"k3-am62-main.dtsi"、并更改了行:

    时钟=<&K3_CLKS 155 2>;

    收件人:

    时钟=<&K3_CLKS 155 0>;

    [报价]

    这不是更改 UART fclk 输入的正确方法、但我们稍后将回来讨论此问题。

    [报价 userid="624199" url="~/support/processors-group/processors/f/processors-forum/1463108/am625-changing-uart-clock-speeds "]我想修改"hsdiv_clkout0"的 HSDIV 以及 UART4_CLK_CTRL 分频值。

    我不确定我是否理解这一点、请详细说明。

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

    我可以尽我所能详细说明。

    查看我提供的图像、您可以看到 PLL1_hsdiv0块设置为192.0 MHz。  还有一个"/4"分频值标记为 UART4_CLK_CTRL。  因此 UART 速度为48Mhz、最大波特率为3Mbps。

    在使用时钟工具时、如果我更改标记为 HSDIV 的项目(这是连接到 PLL1_HSDIC_A 块的特定分频值、且输出标记为 hsdiv_clkout0)、那么我可以更改该192Mhz。  

    我的想法是、通过处理这些项、我可以设置 UART 时钟速度并测试更高的波特率。

    但是,我不知道如何更改内核 dts 来反映这些更改(可能不是内核 dts )。

    这是我被卡住的地方。  我不知道 如何实现 从时钟工具中获取这些概念并将它们应用到我的电路板。

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

    感谢您的讲解。

    更改 PLL1_clkout0的频率不是一个好主意、因为它是多个模块的 clk 源。 更改该值可能会破坏其他模块的功能。

    但是、可以更改"UART4_CLK_CTRL"分频器。 将其更改为2可获得6Mbps 波特、将其更改为1可获得12Mbps 波特。

    我没有对其进行测试、但以下内核 devicetree 补丁应该会将 UART4输入时钟更改为96MHz。

    diff --git a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    index b3715472d77c..b71c87390aa1 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    @@ -417,6 +417,9 @@ main_uart4: serial@2840000 {
                    interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>;
                    power-domains = <&k3_pds 155 TI_SCI_PD_EXCLUSIVE>;
                    clocks = <&k3_clks 155 0>;
    +               assigned-clocks = <&k3_clks 155 0>;
    +               assigned-clock-parents = <&k3_clks 155 1>;
    +               assigned-clock-rates = <96000000>;
                    clock-names = "fclk";
                    status = "disabled";
            };

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

    我将对其进行测试。 您能解释一下这三行内容、以便我理解吗?

    +              分配的时钟数=<&K3_CLKS 155 0>;
    +              assigned-clock-parents =<&K3_CLKS 155 1>;
    +              指定时钟速率=<96000000>;

    如果我想操作时钟、我想确切地知道它们在做什么。

    分配的时钟速率是合理的、但它的值与前两行有关。

    谢谢!

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

    "assigned-clock rates"指定"assigned-clocks"中时钟的时钟频率。

    "assigned-clock-parents"指定"assigned-clocks"的输入源。 它与时钟速率设置无关。 对于 UART4 (器件 ID 155)、时钟"0"的输入默认为"1"、因此您可以跳过此行、但为了清楚起见、我始终专门设置父级。

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

    在您提到的第二个答复中:

    "但是、您可以更改"UART4_CLK_CTRL"分频器。 将其更改为2可获得6Mbps 波特、将其更改为1可获得12Mbps 波特。"

    但我没有看到此信息、是吗?  我想这就是我要去的方向、所以我可以将 UART 速度设置为192Mhz。   如果有可能、我会更高一些、但您提到这可能(肯定)会破坏其他事情。

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

    隐含 UART4_CLK_CTRL 分频器。 PLL1_clkout0为192MHz、将 Assigned-clock-rate 设置为96000000将使分频器设置为"2"、将其设置为192000000将使分频器设置为"1"。

    顺便说一下、即使 UART 硬件也可以在192MHz 下运行、以生成12Mbps 波特率、但我不确定您是否可以在 Linux 中成功地使用12Mbps 波特率的 UART、而不会在 RX/TX 中发生超限或欠载。 Linux 中测试的最大波特率为3Mbps。

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

    AM62x TRM 第4.7.4.1节专门提到不支持高于3.6Mbps 的波特率。

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

    谢谢你的解释!   我只是做一些实验,但我确实明白,可能有一些局限性。  最终、我试图找到一种方法/接口、在多个非以太网系统之间移动相当数量的数据。

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

    明白了!