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.

[参考译文] AM623:UART1 而非 UART0 上的调制解调器控制信号 (DCD、RI、DTR、DSR)

Guru**** 2815875 points

Other Parts Discussed in Thread: AM623

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1608280/am623-modem-control-signals-dcd-ri-dtr-dsr-on-uart1-instead-of-uart0

器件型号: AM623

您好:

我们有一个外部组合 RS‑232 / RS‑485 端口。 可以使用 GPIO 来切换该模式、这工作正常。

在新硬件版本中、我们迁移到 AM623 处理器并将 RS‑232 接口连接到 UART1

以下是器件树配置:

main_uart1_pins_default: main-uart1-default-pins {
    pinctrl-single,pins = <
        AM62X_IOPAD(0x01e8, PIN_INPUT, 1)  /* (B17) I2C1_SCL.UART1_RXD */
        AM62X_IOPAD(0x01ec, PIN_OUTPUT, 1) /* (A17) I2C1_SDA.UART1_TXD */

        AM62X_IOPAD(0x0194, PIN_INPUT, 2)  /* (B19) MCASP0_AXR3.UART1_CTSn */
        AM62X_IOPAD(0x01e0, PIN_INPUT, 4)  /* (B16) I2C0_SCL.UART1_DCDn */
        AM62X_IOPAD(0x01e4, PIN_INPUT, 4)  /* (A16) I2C0_SDA.UART1_DSRn */

        AM62X_IOPAD(0x0198, PIN_OUTPUT, 2) /* (A19) MCASP0_AXR2.UART1_RTSn */
        AM62X_IOPAD(0x01d8, PIN_OUTPUT, 4) /* (C15) MCAN0_TX.UART1_DTRn */
    >;
};

RX 和 TX 工作正常。 最小两个位 CTS DCD 在外部、更改会正确地反映在驱动程序内。 我也可以切换输出信号 RTS DTR 使用stty -hupcl、和可以在物理端口上看到更改。

起初,一切似乎都很好——直到我测试了 DSR 发生正转换。 无论 DSR 是从外部驱动为高电平还是低电平、串行驱动程序始终将其报告为0

我使用以下命令读取调制解调器状态:

cat /proc/tty/driver/serial | grep "^0:"

为了进行进一步研究、我添加了一些调试代码:

unsigned int serial8250_modem_status(struct uart_8250_port *up)
{
    struct uart_port *port = &up->port;
    unsigned int status = serial_in(up, UART_MSR);

    /* DEBUG: Print MSR register value for UART1 (mapbase 0x02810000) */
    if (port->mapbase == 0x02810000)
        dev_info(port->dev,
            "MSR=0x%02x CTS=%d DSR=%d DCD=%d RI=%d\n",
            status,
            !!(status & UART_MSR_CTS),
            !!(status & UART_MSR_DSR),
            !!(status & UART_MSR_DCD),
            !!(status & UART_MSR_RI));

即使在那里、 DSR 始终报告为 0 处于高电平状态时也是如此。

之后、我检查了 TRM 并找到以下陈述:

(TRM 摘录)

根据该文件、UART1 正式不支持这些信号。 然而、让我感到困惑的是、我能够读取和/或驱动器 全部 除外 DSR

我们实际上并不在我们的应用程序中使用 DSR、因此这对我们来说不是一个功能性问题。 然而、这就提出了一个问题:

从长远来看、其他调制解调器控制信号 (CTS、RTS、DTR、DCD) 是否真的可以在 UART1 上使用、或者我们是否应该将 RS‑232 接口移至 UART0 而是?

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

    以下是缺失的 TRM 图片:

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

    尊敬的 Enrico:

    我知道您的疑问是关于 AM62x 数据表和 TRM 的 UART 引脚描述存在差异。 我正在将该主题路由给我们的 UART 专家征求意见。

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

    尊敬的 Enrico:

    Bin 指出、这是 TRM 和数据表之间的差异。 有关引脚可用性和 IO 详细信息、请始终参阅数据表:

    也就是说、TRM 更通用、这些类型的集成详细信息目前在数据表和 TRM 部分中进行了介绍 4、模块集成 。  

    对于 DSR 的特定问题、我需要几天时间进行内部检查。

    此致、

    Stan

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

    您可以停止调查。 我刚刚意识到 DSR 线路上有一个下拉 电阻器、但它未连接到我们的 DB9 插头。 这就是驱动程序始终将其读为零的原因。 因此、我们将使用不带 DSR 的 UART1 进行应用。

    感谢你的帮助。

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

    尊敬的 Enrico:

    感谢您的反馈。 我很高兴你找到了原因。

    此致、

    Stan