Ruby SerialPort似乎没有初始化
我正在使用Ruby 1.8.7 SerialPort gem通过FTDI232 USB转串口转换器与AVR进行通信。我似乎在使用SerialPort初始化一个新的SerialPort时遇到了问题。Ruby SerialPort似乎没有初始化
我发现什么是当我打开Linux上,无论是腻子在Windows或小型机的连接,并发送命令这样,一切正常,因为它应该。
我也注意到,关闭腻子/小型机后,我的代码工作正常。因此,我被引导认为,串行端口初始化串行连接的方式不能正常工作。
有没有其他人遇到此问题或有任何想法,如何解决呢?
编辑: 下面是一个代码示例。 需要“RubyGems的” 需要“的SerialPort”
sp = SerialPort.new("COM5", 115200)
sp.print("A\r")
data = sp.readline("\r\n")
puts data
sp.close
此代码应打开连接并发送一个字符显示的数据从我的AVR想要的类型。然后等待数据被传回,并将其打印到屏幕上。
当我的设备最初连接代码只是挂在读,但停止脚本,打开用腻子连接,关闭连接的PuTTY脚本不正是它应该是后。
在Windows中,一次只能有一个进程连接到串行端口。我不确定Linux。
确保您在代码中正确设置了波特率。
如果你仍然有问题,发布了一些非常简单的示例代码,与预期行为的描述和实际行为一起。
我很确定我已经解决了我的问题。添加一个read_timeout似乎已经修复了它。
sp = SerialPort.new("COM5", 115200)
sp.read_timeout = 1500
使用PuTTY/Minicom必须有一些如何设置它,并在关闭后离开它。
我在Linux debian 3.1.0-1-amd64上遇到过同样的问题。
该问题与ftdi_sio内核模块中引入的错误有关(google为“Fix ftruption issue in USB ftdi driver ftdi_sio.c”)。
我已应用修补程序(请参阅https://lkml.org/lkml/2012/2/1/574)重建模块ftdi_sio.ko,问题现在已解决。
获取内核源代码linux-3.1.10.tar.bz2(我的实际内核是3.1.0-1-amd64)。
应用补丁
重新编译模块(例如如何做到这一点的http://www.cyberciti.biz/tips/build-linux-kernel-module-against-installed-kernel-source-tree.html)
备份原来的模块中 /lib/modules/3.1.0-1-amd64/kernel/drivers/ usb/serial/ftdi_sio.ko 并将其替换为新的。
重启
一个快速和肮脏的解决方法可以也很给力的波特率的变化(不不需要重新编译内核模块):
sp = SerialPort.new("/dev/ttyUSB0")
sp.baud=300 #value which is not often used
sp.baud=9600
...
sp。
也许只有一个进程可以一次控制串口? – 2012-02-15 01:54:52
我不是在同一时间打开它们。如果我拔下电缆然后重新连接,我的代码将无法工作。如果我使用PuTTY/Minicom打开连接,然后关闭连接,然后再次运行我的ruby代码,我的ruby代码完全按照它应有的工作。对不起,我重新阅读了我的文章,并理解了这种混淆。 – idorko 2012-02-15 02:27:38