【问题标题】:Control RTS line when communication via RS-485 serial通过 RS-485 串行通讯时控制 RTS 线
【发布时间】:2013-10-22 21:38:17
【问题描述】:

我正在尝试通过带有内核 2.6.39 的 Linux 机器上的串行接口 RS-485 进行通信。我将this breakout boardpySerial 模块一起使用。当我通过界面写东西时,我的数据经常被破坏。在分线板的产品页面上有人提到:

我从一开始就注意到,我需要在发送串行数据后延迟大约 25 毫秒,然后才能将 RTS 线拉低,否则传输会损坏或无法传输。

我发现 RTS 线在我写入字节时很快变高,但在写入后立即变低。我如何保持这条线高(更长一点)?

【问题讨论】:

  • 通常必须使用 TIOCSRS485 ioctl 将 Linux 串行端口驱动程序配置为 RS-485 模式。此 ioctl 采用一个数据结构,该结构指定如何重新利用 RTS 握手信号并控制发送器。有一个参数可以指定您想要的等待时间。阅读lxr.free-electrons.com/source/Documentation/serial/… 您可能应该执行 get ioctl 来读取结构,增加保持时间,然后执行 set ioctl。

标签: python linux pyserial rs485


【解决方案1】:

您可以手动设置 RTS:

setRTS(level=True)

然后在 25 毫秒延迟后清除它:

setRTS(level=False)

【讨论】:

  • 不,我试过了,它不起作用。阅读我的答案,了解原因。
  • 您可能必须禁用流量控制并使用setRTS手动执行此操作
【解决方案2】:

经过多次反复试验,我想我找到了问题所在。我的假设是,当我使用 serial.write() 时,内核之外的 RS-485 驱动程序将 RTS 线设置为高电平。 serial.write() 将字符写入 /dev/ttyS1。从这一刻起,用于 RS-485 的 Linux 驱动程序控制串行总线以写入字符。在此操作期间,它将在实际写入时刻将 RST 线设置为高电平。

我无法在更高级别上控制此写入操作,我想我必须侵入驱动程序或将 RTS 线连接到我可以控制的不同 GPIO。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2017-06-21
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多