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:PR0_UART0_TXD 和 PR0_UART0_RXD 可用作 PRU 调试 UART?

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1589387/am625-pr0_uart0_txd-and-pr0_uart0_rxd-can-be-used-as-a-pru-debug-uart

器件型号: AM625

我使用的是 Octavo 的 osd62-pm-brk、其中有 am6254 处理器芯片。 我从 AM62x 数据表中了解到有 2 个可用的引脚 PR0_UART0_TXD 和 PR0_UART0_RXD。 我们是否可以将这 2 个引脚用于 PRU 内核的调试 UART?

image (16).png

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

    您好 Meera、

    是的、PRU 子系统中有一个完整的硬件 UART 外设。 有几种使用方法:

    A53 内核运行的固件  

    从 Linux SDK 11.0 开始(我认为,Linux SDK 11.1 肯定支持)、Linux A53 内核可以像系统中任何其他 UART 一样控制 PRU 硬件 UART。 在 arch/arm64/boot/dts/ti 中为 pruss_uart 提供 grep

    错误处理  

    PRU 内核还可以控制硬件 UART。 例如、可在 PRU 软件支持包中找到:
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am62x/PRU_Hardware_UART

    此致、

    Nick

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

    您好、Nick、
         感谢您的快速答复。 我们是否可以 通过更改器件树来将这 2 个引脚 PR0_UART0_TXD 和 PR0_UART0_RXD 用作 PRU 调试控制台?  

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

    您好 Meera、

    请提供有关“PRU 调试控制台“含义的其他信息。

    此致、

    Nick

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

    PRU 调试控制台意味着、与 MCU 调试 UART 一样、我们可以在使用 printf 或不向 MPU 发送 RPMsg 的情况下启动的主 CPU 的控制台上打印调试消息吗?  

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

    您好 Meera、

    可以、PRU 可以向 UART 写入字符。 您 可以使用我在前一个响应中链接的该 PRU 固件工程作为起点。

    还可以在运行时使用其他方法来调试 PRU 内核。 我仍在将 PRU 入门实验室移植到即将推出的 AM62x PRU Academy。 现在、您可以在现有 PRU 入门实验室的实验 5 中找到有关调试 PRU 内核的其他提示:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/11_01_05_03/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs_Lab5.html

    此致、

    Nick

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

    感谢您发送编修。 要启用 PRU_UART、需要对器件树进行哪些修改? 你能帮我做吗?


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

    我通过 在内核中添加补丁 8250_pruss.c 来添加 PRU UART 驱动程序、还添加了内核模块 config_serial_8250_PRUSS=m  

    之后我添加了补丁  

    diff --git a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    index b3715472d77c..a17185bc18d6 100644
    --- a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    +++ b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi
    @@ -1191,6 +1191,17 @@ pruss_iepclk_mux: iepclk-mux@30 {
     				};
     			};
     		};
    +	
    +		pruss_uart0: uart@28000 {
    +			compatible = "ti,pruss-uart";
    +			reg = <0x28000 0x40>;        /* offset 0x28000, size 8KB */
    +			interrupt-parent = <&pruss_intc>;
    +			interrupts = <6 4 4>;        /* event 20, channel 1, host 0 (per TI) */
    +			clocks = <&k3_clks 81 13>;     /* pruss_core_clk */
    +			clock-names = "fck";
    +			status = "disabled";
    +		};
    +			
     
     		pruss_intc: interrupt-controller@20000 {
     			compatible = "ti,pruss-intc";
    diff --git a/arch/arm64/boot/dts/ti/k3-am625-osd625-brk.dts b/arch/arm64/boot/dts/ti/k3-am625-osd625-brk.dts
    index 16da1b3fe308..26f400d69f17 100644
    --- a/arch/arm64/boot/dts/ti/k3-am625-osd625-brk.dts
    +++ b/arch/arm64/boot/dts/ti/k3-am625-osd625-brk.dts
    @@ -28,6 +28,7 @@ opp-1400000000 {
     	aliases {
     		serial2 = &main_uart0;
     		serial3 = &main_uart1;
    +		serial4 = &pruss_uart0;
     		mmc1 = &sdhci1;
     		usb0 = &usb0;
     		usb1 = &usb1;
    @@ -287,6 +288,14 @@ AM62X_IOPAD(0x0198, PIN_OUTPUT, 2) /*MCASP0_AXR2  -> UART1_RTSn */
     		>;
     	};
     
    +	pruss_uart_pins: pruss-uart-pins {
    +		pinctrl-single,pins = <
    +			AM62X_IOPAD(0x01d8, PIN_INPUT, 6) /* (C15) MCAN0_TX.PR0_UART0_RXD */
    +			AM62X_IOPAD(0x01dc, PIN_OUTPUT, 6) /* (E15) MCAN0_RX.PR0_UART0_TXD */
    +		>;
    +	};
    +		
    +
     	mikrobus0_uart_pins_default: mikrobus0-uart-default-pins {
     		pinctrl-single,pins = <
     			AM62X_IOPAD(0x01f8, PIN_INPUT, 1) /* MMC0_DAT7.UART2_RXD */
    @@ -381,6 +390,12 @@ &main_uart1 {
     	status = "okay";
     };
     
    +&pruss_uart0 {
    +	pinctrl-names = "default";
    +	pinctrl-0 = <&pruss_uart_pins>;
    +	status = "okay";
    +};
    +
     &main_gpio0 {
     	bootph-all;
     };


    我看到我的系统中

    root@osd62-pm-brk:~# dmesg | grep uart
    [    7.776514] 30068000.uart: ttyS4 at MMIO 0x30068000 (irq = 465, base_baud = 20833333) is a 16550A


    但我无法测试此 PRU_UART 功能。 请帮助我解决这个问题。

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

    我在 PRU_Hardware_UART 中添加了资源表、并使用 Remoteproc 进行刷写。 它的工作就像一个魅力!!!!!

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

    您好 Meera、

    对延迟深表歉意。 我很高兴听到你能够取得进展。

    您使用的是哪个版本的 Linux 内核?

    我预计、如果您使用的是 Linux 内核 5.10 或更高版本(我认为任何早期的 Linux 内核版本都不支持 AM62x)、那么当您使用 RPMsg 在 Linux 和 PRU 内核之间进行通信时、只需添加资源表。

    您尝试在设计中实现什么?  

    Linux 控制 PRU 硬件 UART

    我相信在 Linux SDK 11.0 中、我们增加了对 Linux 控制 AM62x 上 PRU 硬件 UART 的支持 (Linux 内核 6.12)。 您可以在 arch/arm64/boot/dts/ti 下的 DTS 文件中搜索“pruss_uart"来“来查找更多信息:
    k3-am62-main.dtsi
    k3-am62x-sk-common.dtsi

    请注意、控制 PRU 硬件 UART 的 Linux 不需要将任何固件加载到 PRU 内核中。 Linux 只向 PRU 子系统供电、并开始直接读取和写入 PRU 硬件 UART 寄存器。

    用于控制 PRU 硬件 UART 的 PRU 内核  

    如果您希望 PRU 内核向 PRU HW UART 发送和接收数据、而不是 Linux 向 PRU HW UART 发送和接收数据、则可以使用 PRU_Hardware_UART 工程作为起点。

    此致、

    Nick

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

    关于资源表问题的另一条说明:

    有关 TI Linux SDK 中何时实际需要 PRU 资源表的更多信息、请参阅  
    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/11_01_05_03/exports/docs/common/PRU-ICSS/Resource_Tables.html

    如果您使用的是 Linux 内核的非 TI 分支、我不确定您是否会拥有与 TI 官方分支 ti-linux-kernel-X.X.X.X.y 中的驱动程序相同的 PRU Remoteproc 驱动程序提交 如果您使用的是非 TI 内核分支、可能仍需要资源表来加载任何 PRU 固件。

    请注意、所有其他非 Linux 内核都需要资源表、以便由 Linux Remoteproc 驱动程序加载(在 AM62x 上、这意味着 M4F 内核)。

    此致、

    Nick