2013-10-22 82 views
0

我想通过内核2.6.39的Linux机器上的串行接口RS-485进行通信。我正在使用this breakout board以及pySerial模块。当我通过界面写东西时,我的数据经常被损坏。在接口板别人的产品页面中提到:当通过RS-485串行通信时控制RTS线

我从一开始就注意到了,我需要有一个约25毫秒的延迟我送串行数据后,我才可以,否则带来的RTS线低传输被破坏或不被传输。

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

+0

通常需要使用** TIOCSRS485 ** ioctl将Linux串行端口驱动程序配置为RS-485模式。这个ioctl采用了一个数据结构,它指定了RTS握手信号是如何转用的并且应该控制发射机。有一个参数可以指定你所要的保持时间。阅读http://lxr.free-electrons.com/source/Documentation/serial/serial-rs485.txt你可能应该做一个让ioctl读取结构,增加停滞时间,并做一套ioctl。 – sawdust

回答

0

您可以通过手动设置RTS:

setRTS(level=True) 

后然后将其清除25毫秒的延迟有:

setRTS(level=False) 
+0

不,我试过了,它不起作用。请阅读我的答案,理由。 – OrangeTux

+0

您可能必须禁用流量控制并使用'setRTS'手动执行 – jramirez

0

大量的试验和错误后,我想我找到了问题。我推测,RS-485驱动程序关闭内核时,将使用serial.write()将RTS线路设置为高电平一段时间。 serial.write()将字符写入/ dev/ttyS1。从此刻起,用于RS-485的Linux驱动程序控制串行总线以写入字符。在此操作期间,它会在实际写入时间内将RST线设置为短时间到高。

我无法控制这个写操作的更高层次,我想我必须破解驱动程序或连接RTS线到不同的GPIO,我可以控制。