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:串行端口设置 2M 波特率实际测量值仅为大约 1.85m

Guru**** 2460850 points
Other Parts Discussed in Thread: AM625, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1544025/am625-the-serial-port-setting-2m-baud-rate-is-actually-measured-to-only-about-1-85m

器件型号:AM625
主题: SysConfig 中讨论的其他器件

工具/软件:

我将串行端口的波特率设置为 2M、但使用示波器测量的实际波特率仅约为 1.85m。

在哪里可以配置设置以实现 2M 的实际波特率?

我将器件树的时钟配置为 52M、实际测得的波特率为 1.85m
&main_uart4 {
	bootph-all;
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&main_uart4_pins_default>;
	clock-frequency = <52000000>; 
	//dmas = <&main_pktdma 0x4404 0>, <&main_pktdma 0xc404 0>;
	//dma-names = "rx", "tx";
};
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jie:

    当打开 UART 端口时、在 Linux 用户空间中通过 UART 应用程序配置 UART 波特率。

    您可以参考以下程序作为示例。

    位于 master nsekhar/serialcheck··GitHub 上的 serialcheck/serialcheck.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将应用层的波特率设置为 2M、但实际测得的波特率为 1.85。

    我查看了 am625 的 TRM 手册中的串行端口波特率设置表 12-338。 在 48M 的参考时钟下、其中没有 2M 波特率。
    这就是我尝试将参考时钟更改为 52M 的原因。 参考时钟为 45M 时、从分频到串行端口的波特率只能分频为 1.843M
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我目前不在办公室、无法自行检查、但您是否已检查时钟树工具以查看 UART fclk 是否支持 52MHz? 在更改器件树后、您是否使用 k3conf 来检查 UART 是否确实在 52MHz 上运行?

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

    您好、Bin

    您能否发送到时钟树工具的链接?
    在串行终端中执行命令“cat /sys/kernel/debug/clk/clk_summary “时、我找不到 52M 时钟频率。
    在串行驱动程序中、我只能看到分频值为 13 和 16 的自动时钟分频的源代码。 如果串行波特率设置为 2M、则驱动程序将执行 clk / 13 / div_13、得到的正好是 1.843M。 是否可以添加分频因子 12? 这样、它就可以被 2M 整除。

    static void omap_8250_get_divisor(struct uart_port *port, unsigned int baud,
    				  struct omap8250_priv *priv)
    {
    	unsigned int uartclk = port->uartclk;
    	unsigned int div_13, div_16;
    	unsigned int abs_d13, abs_d16;
    
    	/*
    	 * Old custom speed handling.
    	 */
    	if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) {
    		priv->quot = port->custom_divisor & UART_DIV_MAX;
    		/*
    		 * I assume that nobody is using this. But hey, if somebody
    		 * would like to specify the divisor _and_ the mode then the
    		 * driver is ready and waiting for it.
    		 */
    		if (port->custom_divisor & (1 << 16))
    			priv->mdr1 = UART_OMAP_MDR1_13X_MODE;
    		else
    			priv->mdr1 = UART_OMAP_MDR1_16X_MODE;
    		return;
    	}
    	div_13 = DIV_ROUND_CLOSEST(uartclk, 13 * baud);
    	div_16 = DIV_ROUND_CLOSEST(uar

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

    尊敬的 Jie:

    要访问时钟树工具、请访问 https://dev.ti.com/、点击页面底部的红色“显示所有可用工具“按钮、然后点击“SysConfig"磁“磁贴。

    在 SysConfig 窗口中、点击“Software Product:“右侧的下拉菜单、选择“AM6X Clock Tree (1.1.4)“。 然后在右下拉菜单中选择“Device"。“。

    最后、点击“Start"(“(开始(开始)按钮将打开时钟树工具。

    根据时钟树工具、默认情况下 AM62x UART fclk 源来自 PLL1_hsdiv0、即 192MHz。 fclk 也可以源自 PLL1_hsdiv1、即 160MHz。

    因此、如果将 fclk 源切换到 PLL1_hsdiv1、则可使用 160M/div_16/5 实现 2M 波特。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Bin。
    这是器件树中 UART4 的基准时钟配置、设置为 160M。 我使用 SerialCheck 将波特率设置为 2M、但实际测得的波特率仅在 700K 左右。

    ./serialcheck_comen -b 2000000 -d /dev/ttyS6 -f ./binary_1W_ttyS6 -l 2786918 -m d &

    &main_uart4 {
    	bootph-all;
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_uart4_pins_default>;
    	clocks = <&k3_clks 155 2>;
    
    	//dmas = <&main_pktdma 0x4404 0>, <&main_pktdma 0xc404 0>;
    	//dma-names = "rx", "tx";
    };






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

    尊敬的 Jie:

      Clocks =<&K3_CLKS 155 2>;

    我不确定这是否是更改时钟的正确方法。 我从来没有这样做过。 正确的方法是不更改“Clocks"属性“属性、但将以下内容添加到 uart4 节点:

      Assigned-clocks =<&K3_CLKS 155 0>;
      assigned-clock-parter =<&k3_CLKS 155 2>;

    请按此更改您的器件树、如果 UART 波特率仍然不正确、我将提供一个内核调试补丁、以查看如何在 UART 寄存器中配置波特率。