【问题标题】:Socat pseudo terminal: Can you make use of data lines (DTR, RTS etc)?Socat 伪终端:可以使用数据线(DTR、RTS 等)吗?
【发布时间】:2017-05-12 00:09:22
【问题描述】:

我正在使用 socat 创建一个虚拟串行端口。

socat -d -d pty,echo=0,raw pty,echo=0,raw

到目前为止,这按预期工作。使用 echo/cat 我可以发送/接收文本等。
但是像 DTR 或 RTS 这样的信号线呢?我将如何使用 pty 获取/设置这些行的状态?这甚至可能吗?我在任何地方都找不到关于它的任何提及。

【问题讨论】:

    标签: linux serial-port pty


    【解决方案1】:

    socat 是一个管道处理程序,基本上可以让您点击 Tx 和 Rx“线”,而无需关心数据何时准备好/接收到的信号。

    RTS/CTS/DSR/DTR 是串行连接器中的实际引脚,用于控制 Tx/Rx 线路上的情况。

    在我的脑海中,我没有使用 socat 也没有尝试做任何类似的事情,我得到的最低级别是 EMV 接口和协议,有时我也懒得在机器之间快速地 netcat 东西cp 到 httpd 主目录中的目录...无论如何,如果您尝试使用 socat 连接两个实体(不同的机器,或同一台机器上的应用程序),您将使用相同的管道并指定一些控制字符以便它们结束同时向上说话(必须记下这一点并尝试以某种方式与我的妻子一起实现它),或者使用两个单独的管道,一个用于 Rx,一个用于 Tx:实体 1 的 Tx 进入实体 2 的 Rx,实体 2 的 Tx 进入实体 1 的 Rx。

    【讨论】:

    • 好吧,我基本上是在尝试创建一个代理。 pty <-> application <-> serial port <-> device 我正在与之通信的设备使用信号线通过将 rts 设置为 1 100 ms 来接收诸如“进行硬重置”之类的命令。我需要一种手动控制这些的方法。
    • 那么您实际上已将设备插入串行端口?如果是这种情况,我不确定你为什么使用 socat?也许您正试图破坏协议?
    【解决方案2】:

    从您的评论看来,您想控制 RTS/CTS 独立于您的数据流。您必须编写一个应用程序来使用 ioctls 与串行端口进行交互。

    我发现这个有用的论坛帖子(带有示例应用程序) https://www.linuxquestions.org/questions/programming-9/manually-controlling-rts-cts-326590/

    【讨论】:

      【解决方案3】:

      您可以使用硬件流控制线 (RTS/CTS):

      socat stdio file:/dev/ttyAMA0,crtscts=1,b9600
      

      如今,这在与 RS485 收发器通信时最有用,因为这是仍在使用的半双工串行线路的最常见示例。在一些常用的收发器上,例如75HVD12,DE(驱动使能)引脚连接到主机的 RTS。还有一个低电平有效 /RE(接收使能)引脚连接到 RTS 或 CTS。

      如果您可以访问 GPIO,例如在 Raspberry Pi 上,您可以将 DTR 和 DSR 分别分配给输出和输入引脚。或者,如果 USB 适配器(如 FTDI232)连接到计算机,它将断言 DTR。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 2019-01-25
        • 2014-08-16
        • 1970-01-01
        • 1970-01-01
        • 2015-12-26
        • 2020-06-08
        相关资源
        最近更新 更多