Serial Port 系列(1) 關於Serial Port的基本認識

不論是在論壇或是部落格上,長久以來關於序列埠程式的開發一直都還有滿多人在詢問相關的議題,也因此讓我想要寫一個關於這方面比較完整的系列文,只是我這個大懶鬼不曉得要花多久時間才能把整個系列做完。不過這總是個開始,第一篇咱們不談程式,先來瞭解序列埠的基本知識。

       不論是在論壇或是部落格上,長久以來關於序列埠程式的開發一直都還有滿多人在詢問相關的議題,也因此讓我想要寫一個關於這方面比較完整的系列文,只是我這個大懶鬼不曉得要花多久時間才能把整個系列做完。不過這總是個開始,第一篇咱們不談程式,先來瞭解序列埠的基本知識。

 

       RS232

       在過去的時代中我們常見到電腦有兩種外型的RS232 序列埠,一種是 DB25、另一種則是 DB9,數字代表的是該接頭的針腳(Pin)數,現在如果運氣很好買的到內建RS232 通訊埠的電腦的話,多半是 DB9而且通常其標準是RS232C。

      

       首先來看一下關於RS232的腳位分布,其實這也有很多種不同的規格,這篇文討論的主要是著重在一般個人電腦所使用的規格,並且以 DB9為討論對象;下圖為電腦端( 或稱DTE端 )DB9 RS232C的接腳位置圖 。關於RS232的更多說明可以參考維基百科 (1) RS-232  (2)   Data terminal equipment

RS232-9-pin-define02

 

腳位 簡稱 說明 方向
1 DCD Received Line Signal Detector 載波偵測訊號 DCE → DTE
2 RD (Rx) Received Data 接收傳進來的資料 DCE → DTE
3 TD (Tx) Transmited Data 傳送訊號 DTE → DCE
4 DTR Data Terminal Ready 資料終端備妥 DTE → DCE
5 GND Signal Ground 接地  
6 DSR Data Set Ready 已準備好開始接收資料 DCE → DTE
7 RTS Request To Send 要求開始傳送資料 DTE → DCE
8 CTS Clear To Send 資料已經清除 DCE → DTE
9 RI Ring Indicator 響鈴指示 DCE → DTE

 

        這個表還是看起來很模糊對不對?由上表的方向性來看,只要是 DTE → DCE的一般來講在程式撰寫中就是設置;而DCE → DTE的在程式中則是接收與判斷,當然這是指你寫的是電腦端的程式,如果你寫的是設備端的韌體 (或是寫設備端的模擬程式) 又是另一回事了。

 

        接下來開始用Modem與電腦的關係來說明這九個接腳的作用,以下說明是取材至我的.Net序列埠啟蒙書 [Visual Basic 2005 與自動化系統監控 (RS232 串列通訊篇)--文魁出版],這本書大約是我看過對於接腳及串列埠基本知識的講解最為平易近人的一本書,如果你想多瞭解詳情,這本書值得一讀。

 

       (1) Pin 1:載波偵測其實說穿了就是Modem藉由這個接腳告訴電腦現在電話線上有沒有載波,大部份不是和Modem相關的程式應該都不會用到。

       (2) Pin 2:接收資料這點應該不用太做說明,基本上就是Modem要傳送的資料內容就是送到這個接腳。

       (3) Pin 3:當電腦要傳送資料到Modem時由此接腳送出。

       (4) Pin 4:電腦通知Modem狀態已經就緒,可以開始接收資料。

       (5) Pin 5:地線,這個功能是用來當做基準,訊號線和地線的伏特數差值會決定該訊號為1或是0。

       (6) Pin 6: 由Modem通知電腦狀態已經就緒,可以開始接收資料。

       (7) Pin 7:電腦送出訊號給Modem,表示要開始傳送資料。

       (8) Pin 8:由Modem送出訊號給電腦,表明電腦已可傳送資料過來。

       (9) Pin 9:響鈴指示由Modem通知電腦現在電話上有人撥號進來。

 

       上述九的接腳中的TD、RD與GND幾乎是所有的設備都會用到的 ,因為你總要傳接訊號;DCD與RI則是在Modem以外的設備幾乎都用不到,至於DTR、DSR、RTS與CTS則要看設備如何定義其通訊決定是否派的上用場 (如果你的設備用的是 RS485/422 那大概是不會用到,因為沒這麼多條線)。

 

       RS485與RS422

       (1) RS485則簡單多了,它就只有正負兩條線,一條負責基準,另一條則負責訊號。不過它的程式寫起來和RS232也沒啥兩樣,就把它當做是一個只接了 TD、RD與GND的RS232來看就差不多了。RS485的特性是它是半雙工的,也就是無法同時傳送與接收,因為它只有一條線傳訊號,不過RS485可傳輸的距離比起RS232來遠了不少,可靠度也比較高。

       (2) RS422則可視為RS485的全雙工版本,因為它有四條線,其中一對是TD與其基準、另一對則是RD與其基準。

       (3) RS485/422 可靠度高的原因在於它的基準線路不是採地線準位,因此一旦被干擾通常就是訊號與基準同時被干擾,因此準位差就比較不會出錯。

 

       Null Modem

       如果我們想要連結兩個DTE設備,例如兩端都是電腦,會需要用到Null Modem,說來這也沒什麼學問就是跳線而已,通常在電子材料零件行應該都問的到,關於其跳線詳細內容可以參考 [維基百科  Null modem]。

 

       這一篇就為序列埠做個簡單的介紹,做為整個系列的開頭,希望我自己有耐心和時間完成整個系列。