萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> Linux操作系統下的四個串口

Linux操作系統下的四個串口

   最有有個項目,用到了PC104的板子(PCM-3341),Linux的系統。

  但是在項目中至少要用到3個RS232,看datasheet,夠用。板子有3個獨立的RS232和一個RS232/485復用口。但是在實際測試用,遇到個問題。1口和2口都能正常工作(後來發現也是有問題的,讀傳感器數據的時候,讀不完全),但是3口和4口卻出現了很奇怪的現象。

  主要表現為:

  1.可以輸入輸出

  2.輸入輸出速率很慢

  3.發現數據在緩存裡頭,每次大概只能輸出12個字符左右(不確定的長度)。

  開始一直沒有找到原來,後來咨詢別的技術人員,估計是中斷問題。

  以google發現了下面的文章:原始出處,問題解決了,很感謝高手的指點。可惜還沒來得及去深入。

  LINUX默認支持四個串口:COM1(ttyS0),COM2(ttyS1),COM3(ttyS2),COM4(ttyS3)(較新的linux中已不使用cuaX來區分撥入撥出),通常情況下,COM1和COM3共同使用IRQ4,COM2和COM4共同使用IRQ3。

  雖然LINUX支持共享中斷技術,但它無法發現實際的物理中斷沖突。在上述情況下,COM3和COM4因為中斷沖突而無法正常使用。本文介紹了如何在Red Hat 8.0環境下使用COM3和COM4。

  由於當前開發項目需要同時使用四個串口,而所用的開發用工控機恰好有四個,省去了買多口卡的麻煩,直接編程使用了COM3和COM4。當進行測試時,問題出現了:COM3和COM4收發數據非常的慢,幾個BYTES的數據在115.2K的通訊速率下要一二十秒才能發出或收到,完全不能滿足對應用的要求。

  通過查檢資料,確認這是一種典型的中斷沖突故障,使用方法如下:

  setserial /dev/ttyS2 irq 0

  再使用通訊程序,現在數據傳輸就看不到有明顯的延遲了。這是由於將COM3設置為irq0中斷時,設備實際上並未使用中斷,而是使用了polling技術,從而證明了故障是由於中斷機制造成的,有沖突發生。

  主板上COM3和COM4的跳線表明可使用IRQ5和IRQ7,於是設置好跳線並運行

  setserial /dev/ttyS2 irq 5

  setserial /dev/ttyS2 irq 7

  使用通訊程序,發現故障依然,懷疑仍有沖突。查閱資料知,IRQ5和IRQ7通常為並口使用,但當前系統未使用並口啊。進入BIOS發現裡面設置了並口並占用IRQ7,將該項DISABLE掉。似乎和IRQ5沒多大關系,發現設置中IRQ5和7為"PCI/ISA PnP",改為"Legacy ISA"方式後,重啟,COM1--COM4均可正常使用。

copyright © 萬盛學電腦網 all rights reserved