2013-10-22 84 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,我可以控制。