器件型号: AM625
我使用的是 Octavo 的 osd62-pm-brk、其中有 am6254 处理器芯片。 我从 AM62x 数据表中了解到有 2 个可用的引脚 PR0_UART0_TXD 和 PR0_UART0_RXD。 我们是否可以将这 2 个引脚用于 PRU 内核的调试 UART? 
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
我使用的是 Octavo 的 osd62-pm-brk、其中有 am6254 处理器芯片。 我从 AM62x 数据表中了解到有 2 个可用的引脚 PR0_UART0_TXD 和 PR0_UART0_RXD。 我们是否可以将这 2 个引脚用于 PRU 内核的调试 UART? 
您好 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
您好 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
我通过 在内核中添加补丁 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
您好 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