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.

[参考译文] Linux/AM3358:启动时对 RS485的 AM335x RTS 控制

Guru**** 2540720 points
Other Parts Discussed in Thread: AM3358, SN65HVD75

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/743798/linux-am3358-am335x-rts-control-of-rs485-at-boot-up

器件型号:AM3358
主题中讨论的其他器件: SN65HVD75

工具/软件:Linux

我们使用的是连接到 RS485收发器的 UART 4和5、并已将 Tx/RX 控制线连接到各自来自 UART 的 RTS 信号。

当应用程序运行时、一切工作正常、但在启动期间、RTS 线路默认为"1"、这将启用 RS485发送器。 我明白为什么会发生这种情况、但我有点被误认为是要做什么。

那么、我的问题是、在串行驱动器的 RS485模式需要使用它们之前、有哪些解决方案可以让系统以低 RTS 线路启动?

谢谢

Ty

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否指定 AM335x 封装类型以及您用于 RTS 信号的引脚?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    顺便说一下、AM335x 的 UARTx_RTSn 信号为低电平有效。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    **我在键入此问题时解决了我的问题,我已将其提交将来参考**

    我想我在解释我要实现的目标方面做得不好、我将添加更多详细信息。

    我们有一个电路板、在该电路板上、我们从 AM3358向 UART 4和5添加了 RS485收发器。 我已经创建了一个器件树来设置引脚多路复用器、以便将 Tx、Rx 和 RTS 从每个 UART 路由到焊盘、在这里、它们可以连接到 SN65HVD75 RS485收发器。 每个收发器的 DE 和/RE 引脚连接在一起并连接到 RTS 引脚、RO 引脚连接到 Rx、DI 引脚连接到 UART 的 Tx 线路。 查看我的不良喷漆图:

    在软件中、我将8250驱动程序配置为模拟 RS485模式、在该模式下、驱动程序将根据发送还是接收来控制 RTS 线路。 要求是驱动程序在传输输出字节之前将 RTS 线路拉为高电平、然后在最后一位之后将线路返回低电平。

    上述所有功能均正常工作、并且我们有正常工作的 RS485端口。  

    我的问题是、当没有应用程序打开 COM 端口时、就像在系统启动期间一样、8250串行驱动程序会将 RTS 线路置于空闲状态、正如 Biser 指出的那样、空闲状态为高电平(低电平有效、高电平空闲)。 这种高空闲状态会导致启用 RS485收发器的线路驱动器、这将导致其他想要使用 RS485总线的设备出现问题。

    **解决方案**

    最新内核(此时为4.18.16)在内核串行驱动程序中支持名为  Linux、在引导时启用 RS485 、可在驱动程序探测期间将 UART 设置为 RS485仿真模式、因此 RTS 线路在系统引导时不会变为高电平。 您可以将此参数添加到器件树中的每个 UART 中以启用此功能。

    抱歉、当前的 TI Linux 内核 SDK (目前为5.01.00.11)不包含这些更改、您必须将其修补到中。