硬件流控制位不适用于ruby-serialport gem

时间:2015-01-27 15:07:42

标签: ruby serial-port

我正在尝试将USB串行端口适配器的控制位用作通用I / O.这个简单的例子应该将DTR线切换为高电平,然后是低电平。

require 'serialport'

DataBits = 8
StopBits = 1
Parity = SerialPort::NONE
Baud = 38400

port = '/dev/tty.usbserial-A100KXWU'

serial = SerialPort.new(port, 'baud' => Baud, 'data_bits' => DataBits, 'stop_bits' => StopBits, 'parity' => Parity)
serial.flow_control = SerialPort::HARD

loop do
    p serial.signals
    sleep(1)
    serial.dtr = (serial.dtr + 1) % 2
end

输出:

{"rts"=>1, "dtr"=>1, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0}
{"rts"=>1, "dtr"=>0, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0}
{"rts"=>1, "dtr"=>1, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0}
{"rts"=>1, "dtr"=>0, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0}

就Ruby而言,serial.dtr正在发生变化,但DTR引脚的输出电压没有变化。它是一个恒定的+ 7V。

此外,serial实例无法读取应用于来自其他硬件设备的CTS,DSR或DCD的任何更改。

它以sudo权限运行,因此它不是权限问题。这是在OS X 10.10优胜美地。

2 个答案:

答案 0 :(得分:0)

根据http://www.rubydoc.info/gems/serialport/SerialPort:flow_control=

  

注意:SerialPort :: HARD使用RTS / CTS握手。不支持DSR / DTR。

答案 1 :(得分:0)

我正在回答我自己的问题。事实证明,Apple提供的FTDI驱动程序是错误的。他们无法访问控制信号。

我安装了the official FTDI VCP drivers(编写本文时为2.3版),重新启动,现在我可以完全控制。