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.

[参考译文] AM3352:RS485端口仅在 AM3352的 Rx 模式下使用 TI SDK 9.01.00

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1432099/am3352-rs485-port-works-only-in-rx-mode-in-am3352-with-ti-sdk-9-01-00

器件型号:AM3352
Thread 中讨论的其他器件: ISO1176

工具与软件:

尊敬的 TI 团队:

我们有一款基于 AM3352的产品、有2个 RS485端口。
使用旧 SDK [内核4.9.XX]时、RS485端口运行正常、但升级到 SDK 9.01.0后、RS485端口仅在 Rx 模式下工作。

根据 AM335x-evm/kernel-source/arch/arm/boot/dts/ti 中的 dts 文件尝试了多种配置和器件树设置、但 RS485端口使用8250串行驱动程序在 RX 模式下工作。
使用旧的 OMAP 串行驱动器、RS485 Tx 可以正常工作、但 Rx 无法正常工作。  

针对特定端口的 DTS 文件更改如下:

uart2_pins:pinmux_uart2_pins{
PINCTL-SINGLE、PINS =<
AM33XX_IOPAD (0x92C、PIN_INPUT | MUX_MODE1)/*(N19) gmii1_txclk.uart2_RxD */
AM33XX_IOPAD (0x930、PIN_OUTPUT | MUX_MODE1)/*(M19) gmii1_rxclk.uart2_txD */
>;
};

RS485_RTS_PINS:pinmux_gpio_pins{
PINCTL-SINGLE、PINS =<
AM33XX_IOPAD (0x95C、PIN_OUTPUT | MUX_MODE7)/*(A17) spi0_cs0.gpio0_5 */
>;
};

uart2{\f151。}
pinctrl-names ="默认值";
pinctrl-0 =<\uart2_pins>;

RTS-GPIO =<&GPIO0 5 GPIO_ACTIVE_HIGH>;
RS485-RTS -高电平有效;
RS485-RTS-DELAY =<0 0>;
启动时启用 Linux、RS485;
状态="正常";
};

内核配置如下:

#
#串行驱动程序
#
CONFIG_SERIAL_EARLYCON=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_16550A_variants=y
# CONFIG_SERIAL_8250_FINTEK 未设置
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_NR_UARTS=10
CONFIG_SERIAL_8250_RUNTIME_UARTS=10
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_AND_PORTES=y
CONFIG_SERIAL_8250_SHART_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ 未设置
# CONFIG_SERIAL_8250_RSA 未设置
CONFIG_SERIAL_8250_DWLIB=y
CONFIG_SERIAL_8250_FSL = y
CONFIG_SERIAL_8250_DW=y
未设置# CONFIG_SERIAL_8250_RT288X
CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y
CONFIG_SERIAL_OF_PLATFORM=y

#
#非8250串行端口支持
#
# CONFIG_SERIAL_EARLYCON_SEMIHOST 未设置
# CONFIG_SERIAL_MAX3100未设置
# CONFIG_SERIAL_MAX310X 未设置
# config_serial_UARTLITE 未设置
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_SIFIVE 未置位
# CONFIG_SERIAL_SCCNXP is not set (未设置 CONFIG_SERIAL_SCCNXP)
# CONFIG_SERIAL_SC16IS7XX NOT SET (未设置 CONFIG_SERIAL_SC16IS7XX)
# CONFIG_SERIAL_Altera_JTAGUART 未设置
# CONFIG_SERIAL_Altera_UART 未设置
CONFIG_SERIAL_XILINX_PS_UART=y
CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
# CONFIG_SERIAL_ARC 未设置
CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
# CONFIG_SERIAL_FSL_LINFLEXUART 未设置
CONFIG_SERIAL_CONEXANT_DIGICOLOR=y
CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLET=y
CONFIG_SERIAL_ST_ASC=y
CONFIG_SERIAL_ST_ASC_CONSOLE=y
# CONFIG_SERIAL_SPRD not set (未设置 CONFIG_SERIAL_SPRD)
#串行驱动程序结束


进行上述更改后、AM3352正在通过 RS485端口正确接收数据、但传输无法正常工作。
RTS 引脚(GPIO0_5)似乎没有正确切换、因此数据不来自 ISO1176。

您能否回顾并指出端口配置中存在的任何问题?

提前感谢。

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

    嗨、

    在您提供的内核 dts 代码中、pinmux "uart2_pins"在"&uart2"节点中引用、但 pinmux "rs485_rts_pins"在任何位置均未引用。

    请尝试将 GPIO0_5引脚多路复用器从"rs485_rts_pins"移至"uart2_pins"节点、看看这是否可以解决 RS485 TX 问题。

    Pinmux 应如下所示:

    uart2_pins: pinmux_uart2_pins {
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x92C, PIN_INPUT | MUX_MODE1) /* (N19) gmii1_txclk.uart2_rxd */
            AM33XX_IOPAD(0x930, PIN_OUTPUT | MUX_MODE1) /* (M19) gmii1_rxclk.uart2_txd */
            AM33XX_IOPAD(0x95C, PIN_OUTPUT | MUX_MODE7) /* (A17) spi0_cs0.gpio0_5 <EN_485> */
        >;
    };
    

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

    刘斌、您好!

    感谢快速响应。

    是的、这也进行了尝试、但不幸的是结果相同。

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

    嗨、

    在使用旧内核的工作用例和使用 SDK9.1的非工作用例中、请使用一个示波器来捕获3个 UART 引脚的波形。

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

    还请附加非工作案例的 Linux 启动日志。

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

    刘斌、您好!

    感谢您的快速响应。

    请查找所需信息:
    在使用新内核时、RTS 引脚始终保持~1V 电平。

    引导日志:

    e2e.ti.com/.../4532.boot.log

    旧内核[工作中]和新[非工作中]情况下的波形:

    Old_Kernel_Tx .jpg [工作]:

    Old_Kernel_Rx .jpg [工作]:

    New_Kernel_Tx .jpg [不起作用]:

    New_Kernel_Rx .jpg [工作]:



    此外、在 DT 中尝试了以下选项、但按预期仍无法正常工作:

    #1

    uart2_pins:pinmux_uart2_pins{
    PINCTL-SINGLE、PINS =<
    AM33XX_IOPAD (0x92C、PIN_INPUT_PULLUP | MUX_MODE1)/*(N19) gmii1_txclk.uart2_RxD */
    AM33XX_IOPAD (0x930、PIN_OUTPUT | MUX_MODE1)/*(M19) gmii1_rxclk.uart2_txD */
    AM33XX_IOPAD (0x95C、 PIN_INPUT | MUX_MODE7)/*(A17) spi0_cs0.gpio0_5 */
    >;
    };

    #2:
    uart2_pins:pinmux_uart2_pins{
    PINCTL-SINGLE、PINS =<
    AM33XX_IOPAD (0x92C、PIN_INPUT_PULLUP | MUX_MODE1)/*(N19) gmii1_txclk.uart2_RxD */
    AM33XX_IOPAD (0x930、PIN_OUTPUT | MUX_MODE1)/*(M19) gmii1_rxclk.uart2_txD */
    AM33XX_IOPAD (0x95C、 PIN_INPUT_PULLUP | MUX_MODE7)/*(A17) spi0_cs0.gpio0_5 */
    >;
    };

    #3:
    uart2_pins:pinmux_uart2_pins{
    PINCTL-SINGLE、PINS =<
    AM33XX_IOPAD (0x92C、PIN_INPUT_PULLUP | MUX_MODE1)/*(N19) gmii1_txclk.uart2_RxD */
    AM33XX_IOPAD (0x930、PIN_OUTPUT | MUX_MODE1)/*(M19) gmii1_rxclk.uart2_txD */
    AM33XX_IOPAD (0x95C、 PIN_OUTPUT | MUX_MODE7)/*(A17) spi0_cs0.gpio0_5 */
    >;
    };


    #4:
    uart2_pins:pinmux_uart2_pins{
    PINCTL-SINGLE、PINS =<
    AM33XX_IOPAD (0x92C、PIN_INPUT | MUX_MODE1)/*(N19) gmii1_txclk.uart2_RxD */
    AM33XX_IOPAD (0x930、PIN_OUTPUT | MUX_MODE1)/*(M19) gmii1_rxclk.uart2_txD */
    >;
    };

    RS485_RTS_PINS:pinmux_gpio_pins{
    PINCTL-SINGLE、PINS =<
    AM33XX_IOPAD (0x95C、PIN_OUTPUT | MUX_MODE7)/*(A17) spi0_cs0.gpio0_5 */
    >;
    };


    也就是说、AM3352没有按预期切换 RTS 引脚。

    谢谢。

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

    嗨、

    感谢您的参与。

    [报价 userid="302325" url="~/support/processors-group/processors/f/processors-forum/1432099/am3352-rs485-port-works-only-in-rx-mode-in-am3352-with-ti-sdk-9-01-00/5492184 #5492184"]使用新内核时、RTS 引脚始终保持~1V 电平。

    似乎表明引脚 A17 padconfig 未正确设置为 GPIO 模式。 在工作和非工作情况下、请读取相应的引脚 padconfig 寄存器、查看它们是否具有相同的值。

    Linux 引导日志显示内核版本为 v6.6、这并不是 SDK9.1中使用的内核、SDK9.1应该是内核 v6.1。

    请仔细检查您是否确实使用了 SDK9.1内核。

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

    刘斌、您好!

    感谢您提供的意见。
    解决此问题的方法是将标志更新为"rts-gpio" S "(在 DT 和中) 关闭串行 DMA [# CONFIG_SERIAL_8250_DMA 未设置] .

    谢谢。

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

    嗨、

    [报价用户 id="302325" url="~/support/processors-group/processors/f/processors-forum/1432099/am3352-rs485-port-works-only-in-rx-mode-in-am3352-with-ti-sdk-9-01-00 "]

    uart2{\f151。}
    pinctrl-names ="默认值";
    pinctrl-0 =<\uart2_pins>;

    RTS-GPIO =<&GPIO0 5 GPIO_ACTIVE_HIGH>;

    [报价]

    您是说将"RTS-GPIO"更改为"RTS-GPIO"可以解决这个问题吗? 我认为内核支持这两种名称、但建议使用"rts-gpios"。

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

    您好、Bin Liu

    是更改为 RTS-GPIO 并禁用 DMA 都有助于解决问题。

    这也是我的想法、因此我最初没有进行过尝试、但在详细探讨驱动程序后、意识到它需要 RTS-GPIO。

    此外、您是对的、SDK 具有内核 v6.1、但我们升级了内核以包含所有可能的安全补丁。

    谢谢。

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

    嗨、

    [报价 userid="302325" url="~/support/processors-group/processors/f/processors-forum/1432099/am3352-rs485-port-works-only-in-rx-mode-in-am3352-with-ti-sdk-9-01-00/5502017 #5502017"]

    是更改为 RTS-GPIO 并禁用 DMA 都有助于解决问题。

    这也是我的想法、因此我最初没有进行过尝试、但在详细探讨驱动程序后、意识到它需要 RTS-GPIO。

    [报价]

    感谢您提供的信息。 我不知道不再支持 xxx-GPIO devicetre UART 引脚名称。

    我从内核源中挖掘出来、然后找到了内核提交

       d99482673f95 ("serial:mctrl_gpio:在请求之前检查 GPIO 属性是否存在")

    强制 UART devicetree GPIO 引脚名称应为"xxx-GPIO"、不再支持"xxx-GPIO"。