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.

[参考译文] SK-AM62P-LP:Linux SDK 中的 UART COM

Guru**** 2473260 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1453842/sk-am62p-lp-uart-com-from-linux-sdk

器件型号:SK-AM62P-LP

工具与软件:

尊敬的专家:

我们正在尝试使用来自 A53内核(主域)的 uart5来运行 Linux 系统的 UART 通信。

我已经完成了快速签入、器件树文件似乎未 在其中定义。

您能告诉我如何访问此链接吗?

此致、
去巴希

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

    Debashis、您好!

    您必须在内核 devicetree 中启用 UART5才能在 Linux 中使用 UART。 请参阅下面链接的说明。

    https://dev.ti.com/tirex/explore/node?node=A__AS4TOb7e5T1d6.5bfnXv2Q__AM62P-ACADEMY__fp5YxRM__LATEST&placeholder=true

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

    刘斌、您好!

    我先检查 menuconfig 、发现缺省情况下已经启用。
    因此、我直接更改了 main_uart5的器件树文件(k3-am62p5-sk.dts)、方法是引用 main_uart1的类似文件。

    aliases {
    		serial0 = &wkup_uart0;
    		serial2 = &main_uart0;
    		serial3 = &main_uart1;
    		serial5 = &main_uart5;
    		mmc0 = &sdhci0;
    		mmc1 = &sdhci1;
    		mmc2 = &sdhci2;
    		spi0 = &ospi0;
    		ethernet0 = &cpsw_port1;
    		ethernet1 = &cpsw_port2;
    		usb0 = &usb0;
    		usb1 = &usb1;
    	};
    main_uart5_pins_default: main-uart5-default-pins {
    		pinctrl-single,pins = <
    			AM62PX_IOPAD(0x1d8, PIN_INPUT, 1)	/* (B23) UART0_RXD */
    			AM62PX_IOPAD(0x1dc, PIN_OUTPUT, 1)	/* (F20) UART0_TXD */
    		>;
    		bootph-all;
    	};
    	
    &main_uart5 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_uart5_pins_default>;
    	/* Main UART5 is used by USER firmware */
    	status = "okay";
    	bootph-all;
    };


    之后、我构建了.dtb 文件并将其传输到目标板。

    输出电容损耗:
    root@am62pxx-evm:~# cat /proc/tty/driver/serial
    serinfo:1.0 driver revision:
    0: uart:unknown port:00000000 irq:0
    1: uart:unknown port:00000000 irq:0
    2: uart:8250 mmio:0x02800000 irq:251 tx:20146 rx:429 RTS|DTR|DSR
    3: uart:unknown port:00000000 irq:0
    4: uart:unknown port:00000000 irq:0
    5: uart:8250 mmio:0x02850000 irq:253 tx:8016 rx:7561 DSR
    6: uart:unknown port:00000000 irq:0
    7: uart:unknown port:00000000 irq:0
    8: uart:unknown port:00000000 irq:0
    9: uart:unknown port:00000000 irq:0
    10: uart:unknown port:00000000 irq:0
    11: uart:unknown port:00000000 irq:0
    root@am62pxx-evm:~# dmesg | grep base_baud
    [    1.669955] 2800000.serial: ttyS2 at MMIO 0x2800000 (irq = 251, base_baud = 3000000) is a 8250
    [    1.684830] 2850000.serial: ttyS5 at MMIO 0x2850000 (irq = 253, base_baud = 3000000) is a 8250
    


    我所做的一切都是对的吗?

    当 I 通过echo "hello" > /dev/ttyS5在一个端子中运行来环回 RX 和 TX 时cat /dev/ttyS5、数据会通过、但有一些不稳定的行为。 数据之间出现异常数量的垂直空白空间。 此空格将一直保留、直到我按 Control-C 停止它。

    此致、
    去巴希

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

    Debashis、您好!

    无论我做了什么、这是正确的吗?

    是的、UART5似乎配置正确。

    当我通过echo "hello" > /dev/ttyS5在一个终端运行循环 RX 和 TX 时cat /dev/ttyS5、数据正在通过、但有一些不稳定行为。 数据之间出现异常数量的垂直空白空间。 此空格将继续、直至按 Control-C 停止。

    我不确定导致问题的原因、但请在执行 echo/cat 命令之前运行以下命令、并告诉我这是否可以解决问题。

    # systemctl disable serial-getty@ttyS5.servICE
    # stty -F /dev/ttyS5 115200 -echo.

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

    刘斌、您好!

    现在它开始工作了。 非常感谢您的支持。 实际上、我以前也尝试过相同的方法、但我不知道禁用操作、我想在文档中也不可用。

    此致、
    去巴希

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


    您好、Bin、

    现在我无法运行它卡住的 stty 命令。 我也有同样的问题。 可以告诉我如何验证它已恢复为115200、我是否必须每次都执行该操作、或者是否有任何方法可以修复它?

    问题:

    root@am62pxx-evm:~# systemctl disable serial-getty@ttyS5.servICE
    删除了/etc/systemd/system/getty.target.wants/serial-getty@ttyS5.service'。
    [ 1461.657287] systemd-ssh-generator[1271]:将 SSH 绑定到 AF_UNIX 套接字/run/ssh-unix-local/socket.
    [ 1461.658092] systemd-ssh-generator[1271]:→通过"sh .host"本地连接
    [1461.686934] systemd-sysv-generator[1273]:sysv service '/etc/init.d/ethercat 缺少本机 systemd 单元文件。  ️ 自动生成用于兼容性的单位文件。 请更新软件包以包含本机 systemd 单元文件、从而使其安全、稳健且面向未来。  ️ 此兼容性逻辑已被弃用、预计很快会删除。  ️ μ A
    root@am62pxx-evm:~# stty -F /dev/ttyS5 115200 -echo

    此致、
    去巴希

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

    您好、Bin、

    我从内核的角度也看到了这条打印语句。

    [ 258.795712]审核:type=1112审核(1735627359.362:243):pid=886 uid=0 auid=4294967295ses=4294967295 subj=kernel msg='op=login acct="ooHHh" ex="/usr/bin/login hostname=am62pxx-evm addr=? Terminal=ttyS5 res=failed'

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

    您好、Bin、
    当我通过简单的写入和读取代码来读取 UART 数据时、您可能会看到不稳定的行为

    root@am62pxx-evm:/home/uart# ./serial_posix 
    Read from serial port: Hello, Serial Port!
    Login incorrect
    
    root@am62pxx-evm:/home/uart# ./serial_posix 
    Read from serial port: Hello, Serial Port!
    root@am62pxx-evm:/home/uart# ./serial_posix 
    Read from serial port: Hello, Serial Port!
    root@am62pxx-evm:/home/uart# ./serial_posix 
    Read from serial port: Hello, Serial Port!
    root@am62pxx-evm:/home/uart# ./serial_posix 
    Read from serial port: Hello, Serial Port!
    root@am62pxx-evm:/home/uart# ./serial_posix 
    Read from serial port: p
    am62pxx-evm login: 
    am62pxx-evm login: Debian GNU/Linux trixie/sid am62pxx-evm ttyS5
    p
    am62pxx
    root@am62pxx-evm:/home/uart# ./serial_posix 
    Read from serial port: -evm login: 
    am62pxx-evm login: Debian GNU/Linux trixie/sid am62pxx-evm ttyS5
    p
    am62pxx-evm login
    root@am62pxx-evm:/home/uart# ./serial_posix 
    Read from serial port: : 
    am62pxx-evm login: Debian GNU/Linux trixie/sid am62pxx-evm ttyS5
    p
    am62pxx-evm login: 
    am62px
    


    它会读取一些与登录相关的内容。


    此致、
    去巴希

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

    Debashis、您好!

    处理器 SDK rootfs 提供名为 serialcheck 的 UART 工具。 请使用此工具检查 UART 读写访问。

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

    您好、Bin、

    看一下屏幕截图。
    我怀疑运行此串行检查需要 CTS 和 RTS、因为我刚刚使用跳线将 RX 连接到 TX。



    此致、
    去巴希

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

    Debashis、您好!

    由于未连接 CTS 和 RTS 引脚、请运行不带"-h"选项的串行检查程序、以不使用硬件流控制。

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

    刘斌、您好!

    我已经浏览过 serialcheck.c 的代码,我对此有一些怀疑。

    1.我们将其设置为在阻塞式读写的情况下读取64个字节、超时为0.8秒、因为它使用的是这个函数(ret = fcntl (FDF_SETFL、0);)

    new_term.c_cc[VMIN] = 64;
    new_term.c_cc[VTIME] = 8;


    如果我的理解是正确的 、要获取数据、需要使用一些轮询机制、假设当它接收到读取中断时、它将运行并读取数据、另外我可以看到计数也随之增加、但为什么直到0.8秒才阻止读取或直到它接收到64字节、请向我解释为什么?

    此致、
    去巴希

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

    Debashis、您好!

    这似乎与内核 TTY 框架或 Linux 用户空间终端编程有关,与平台 UART 模块无关,对不起,我没有答案。