[Standard] RS-232序列通訊
HISTORY
RS-232在1962年由美國電子工業聯盟(EIA, Electronic Industry Association)引入,做為電傳打字機(electromechanical teletypewriters)與數據機(modems)溝通的推薦標準,全名為EIA-RS-232,RS表示推薦標準(recommended standard),232是識別號碼;後來越來越多的電子終端用來取代電傳打字機,所以這些電子終端也都支援RS-232,於是EIA在1969年發布了RS-232-C版本,C表示第三次的修改版本,其部份的原因就是為了配合這些電子終端的電氣特性。但是做為一個推薦標準,就表示廠商沒有強制性的要求要遵照標準,因此許多印表機、POS終端、測試儀器的廠商在設計兼容RS-232的介面時,就會與實際的標準有所差異,例如針腳的配置、錯誤的信號等等;直到個人電腦開始發展,並且使用RS-232的標準,這些周邊設備才慢慢地使用RS-232的標準,到1990年代,RS-232依舊是每台個人電腦的標準配備;後來傳輸速度更快、使用更便利的USB問世,才讓RS-232逐漸的消失在一般商用電腦上,但RS-232依舊在大型交換機、PLC、CNC、工業電腦等設備上可以看到。
現今最新的版本為美國電子工業聯盟與美國電信工業協會(TIA, Telecommunications Industry Association)發行的EIA/TIA-232-F,但C版本依舊一直修訂內容,以改善與其他標準間的相容性,同時維持與舊版本的相容性,所以C版本依舊是目前業界中常見的標準。
SCPOE OF STANDARD
1969年EIA的RS-232-C標準定義了以下內容:1.電氣特性,包括電壓電平、信號速率、時序、耐壓等級、短路做法、最大負載電容。
2.介面的機械特性,包括可插拔的連接器以及針腳。
3.連接器中每條線路的功用說明。
4.介面線路在特定電信應用的子標準。
對於字元的編碼、字元的構成、傳輸的順序或者錯誤的檢測並沒有在這份標準中定義,字元的格式與傳輸的位元速率(bit rate)則是由串列埠口設定,對於傳輸的位元速率也僅限制要小於20,000bps。
在RS-232標準中,資料利用位元的時間序列發送,同時支援同步與非同步傳輸,同步傳輸DTE會向DCE取得時鐘信號,利用時鐘信號接收端與傳送端同時動作,而非同步傳輸則是傳送端會利用信號的轉換告知接收端即將開始傳輸資料。
除了傳輸資料數據的線路外,RS-232也定義了幾個用於控制的線路,而且每個傳輸或控制的線路只能單向操作,也就是DTE傳送資料到DCE的線路與DCE傳送資料到DTE的線路不會是同一;也因為線路都是往固定的方向傳送資料或者控制信號,所以可以達到全雙工的運作。
ELECTRICAL CHARACTERISTICS
RS-232中定義了在資料傳輸線路中邏輯0與邏輯1的電壓電平,以共地(common ground)針腳為0伏特,+3至+15伏特的正電壓為邏輯0,也稱為space,代表ON,-3至-15伏特的負電壓為邏輯1,也稱為mark,代表OFF,而-3到+3伏特的電平則會被判斷為無效的信號。對於控制信號線路而言,正電壓代表著生效(asserted)或者啟用(active)狀態,而富電壓代表著失效(deasserted)與停用(inactive)狀態,控制信號線路包括RTS(request to send)、CTS(clear to send)、DTR(data terminal ready)、與DSR(data set ready)。
標準中定義了最大開路電壓(open-circuit voltage)為25伏特,而通常會使用的信號電壓電平為±5伏特、±10伏特、±12伏特、與±15伏特這四種;某些RS-232驅動晶片會有內建線路,可以從3或5伏特的電壓來供應給晶片使用,這些驅動器或者接收器也規定必須要能承受短路或者將近±25伏特的電壓電平;同時迴轉率(slew rate)與信號的電壓變換速度也同樣有所規範。
對於接收端或者發送端驅動電路中的積體電路來說,電壓電平可能會高於積體電路所使用的電平(5伏特),所以還需要中介電路轉換為積體電路可用的電平;這些中介電路也保護內部電路,避免RS-232埠口可能出現的短路或者暫態(transients),同時提供資料傳送時符合迴轉率所需的電流。
另外,RS-232使用單端信號傳輸,也就是纜線內所有的信號線都透過一條地線來判斷電壓電平,這使得RS-232在信號傳輸上有著很大的缺點;假設輸出端輸出了+5伏特的信號,但是由於作為電平基準的地線被干擾,使得地線有+2.5伏特的電壓,這樣接收端認為收到的電壓只有+2.5伏特,而判斷為無效信號;所以RS-232的信號傳輸很容易受到現場環境的影響。
CONNECTORS
在RS-232的架構中,設備可分為數據終端裝置(DTE, data terminal equipment)與數據通訊裝置(DCE, Data Communications Equipment),也有人稱數據電路終端裝置(data circuit-terminating equipment),在規範中定義了在這兩種裝置的連接器中,每條線路用來傳送或者接收何種信號;根據標準,DTE的連接器為公頭,或稱針頭,DCE的連接器為母頭,或稱孔頭。標準中建議使用D-sub 25pin的連接器,或稱DB25,但是對於現在大多數的設備來說,並沒有使用到那麼多的信號腳位,同時考量到線材與連接器的成本,以及設備的外觀(DB25在設備上佔用的空間較大),現在大部分的設備都使用D-sub 9pin的連接器,或稱DB9,僅保留幾個比較重要或者常用的針腳;甚至USB或者RJ45都可以被拿來做為連接器使用,這些連接器通常稱為序列埠(serial port)、控制埠(console port)、或者COM port。
然而並非DB25或DB9就必然是用於RS-232的通訊上,有些設備的製造商雖然使用DB25或DB9的連接器,但是卻不是RS-232-C的標準,而是用於其他設備上,如印表機;也有些電腦在連接器的某些針腳上會使用標準外的電壓或信號。
CABLES
在RS-232標準的文件中,並沒有定義電纜的最大長度,而是定義了纜線(包括連接器)的最大電容為2500pF;我們知道信號是利用電壓電平形成脈波做1與0的判斷,波形的好壞會影響訊號的清晰度,如果纜線的電容越大,放電的速度就越慢,脈波的波形變換就越慢,對於接收端來說訊號就越不容易快速判斷;所以如果電纜的電容越低,表示可以在不超過標準的前提下使用更長的電纜,而且放電的速度也會越快,接收端收到的信號也更清晰;而在實務上的經驗來說,RS-232的纜線長度大都會被限制在15公尺以下。同時,資料的傳輸速率也會影響傳輸的距離,我們一般會說RS-232的傳輸距離是15公尺,這是在傳輸速率為9600bps的條件下,當傳輸速率越快,傳輸的距離也會越短,例如傳輸速率為2400bps時,傳輸距離可以到60公尺,而當傳輸速率提高到19200時,傳輸距離會變為7.6公尺;但這些數據資料並不是絕對值,實際的傳輸距離還是會受到現場環境與纜線材質等因素影響,唯有透過實際的測試才可以了解最佳的傳輸距離為何。
另外,RS-232在標準中定義的信號是針對電傳打字機所設計的,對於現在的設備來說,部分信號是不需要使用的,所以如果設備只需要數據的傳送,可以使用數據傳送、數據接收、共地三條線路來達成連線;甚至只有單向資料的傳送時,可以使用一條數據線與一條共地線來連接。
FUNCTION OF CIRCUIT
下表會列出RS-232常用的信號以及在DB9與DB25上的針腳位置(針腳位置是以DTE公頭的角度來看)。信號 | 方向 | 針腳位置 | ||||
名稱 | 目的 | 縮寫 | DTE | DCE | DB25 | DB9 |
Protective Ground | 設備內部使用的接地 | 1 | ||||
Transmitted Data | DTE傳送數據至DCE | TxD | OUT | IN | 2 | 3 |
Received Data | DCE傳送數據至DTE | RxD | IN | OUT | 3 | 2 |
Request To Send | DTE要求向DCE傳輸數據 | RTS | OUT | IN | 4 | 7 |
Clear To Send | DCE已經準備好接收DTE的數據 | CTS | IN | OUT | 5 | 8 |
Data Set Ready | DCE已經準備好接收與發送數據 | DSR | IN | OUT | 6 | 6 |
Common Ground | 零電壓參考基準 | GND | 7 | 5 | ||
Data Carrier Detect | DCE正接收遠端DCE的載波 | CD/DCD | IN | OUT | 8 | 1 |
Test Pin | 9 | |||||
Test Pin | 10 | |||||
11 | ||||||
Data Carrier Detect(2) | DCE正接收遠端DCE的載波 | CD/DCD | IN | OUT | 12 | |
Clear To Send(2) | DCE已經準備好接收DTE的數據 | CTS | IN | OUT | 13 | |
Transmitted Data(2) | DTE傳送數據至DCE | TxD | OUT | IN | 14 | |
Transmitter Clock(DCE) | 僅用於DCE為數據機且同步傳輸時的定時信號,當信號由OFF變為ON,DCE會傳送下一個bit的資料 | ST | IN | OUT | 15 | |
Received Data(2) | DCE傳送數據至DTE | RxD | IN | OUT | 16 | |
Receiver Clock/Receive Timing | 當信號由ON變為OFF時,DTE會接收下一個bit的資料 | RT | IN | OUT | 17 | |
Local Loopback | DTE發送信號要求本地數據機信入測試狀態,信號會由DTE發送,經過本地數據機再回傳到DTE,確認通訊的完整性 | LL | OUT | IN | 18 | |
Request To Send(2) | DTE要求向DCE傳輸數據 | RTS | OUT | IN | 19 | |
Data Terminal Ready | DTE已經準備好接收、發起或繼續通話 | DTR | OUT | IN | 20 | 4 |
Remote Loopback | DTE發送信號要求遠端數據機信入測試狀態,信號會由DTE發送,經過本地數據機到遠端數據機再回傳到DTE,確認通訊的完整性 | RL | OUT | IN | 21 | |
Ring Indicator | DCE在電話線路上偵測到撥入的響鈴信號 | RI | IN | OUT | 22 | 9 |
Data Signal Rate Detector | DTE或DCE其一發送,用於兩者間鮑率的選擇 | 23 | ||||
Transmitter Clock(DTE) | 由DTE提供的定時信號,只在ST與RT不使用時作用 | TT | OUT | IN | 24 | |
Test Mode | 當LL或RL啟用時,若DCE為數據機則會啟用此信號表示正在測試模式中 | TM | IN | OUT | 25 |
FLOW CONTROL
這邊比較有趣的是RTS與CTS;在最原始的定義中,DTE與DCE架構下,DCE是送出資料的一方,DTE是接收資料的一方;如果DCE是一台半雙工數據機,當DTE要向DCE傳送資料時,必須從DTE的RTS傳送有效信號,當DCE的RTS收到有效信號後,會在系統負載允許接收數據時,透過CTS傳送有效信號給DTE的CTS,所以RTS/CTS在最早的定義中,是用於DTE與DCE在半雙工時收發模式的切換。後來隨著設備的推陳出新,以及標準的不完整(RS-232只定義信號用途,並沒有定義信號與針腳的關聯),在許多廠商各自開發自己的序列介面的情況下,RS-232的針腳定義變得相當混亂,直到IBM成為了默認的表準,RS-232的針腳位置才有了規範;依照著規範更多相關的設備推出,許多人希望RS-232埠口的用途可以更廣泛,甚至可以連接非RS-232的設備,所以傳統的定義已經無法滿足當下的潮流。
此時Hayes推出了SmartModem,重新定義了RS-232信號的應用, RTS與CTS不再用於半雙工時收發的切換,而是用於流量的控制;RTS為輸出信號,傳送有效信號告知本設備準備好接收數據,而CTS為輸入信號,接收有效信號判斷是否可向對方設備傳送數據;舉例來說,A設備的RTS會送出有效信號到B設備的CTS,表示B設備可以向A設備傳送數據了,而B設備的CTS收到A設備RTS送來的有效信號時,就知道可以向A設備傳送數據了,同理B設備的RTS也會向A設備的CTS傳送有效或無效的信號,透過這種方式可以知道對方設備是否可以接收數據,來達到流量控制的目的,這就是我們一般所說的硬體流量控制。
硬體流量控制在傳輸時需要5條線路(TxD、RxD、CTS、RTS、GND),而當我們使用三線式的接線法時,就無法使用硬體流量控制,必須使用軟體流量控制;軟體流量控制是透過Xon與Xoff兩個數據來進行,接收方如果有足夠的緩衝接收數據時,會傳送Xon的信號,在16進位中為0x11,相對的如果沒有足夠的緩衝空間來接收數據時,會傳送Xoff信號,在16進位中為0x13,這兩個信號可以透過TxD的線路進行傳送,如此只需要維持原本的三線式就可以達到流量控制的目的。
NULL MODEM
在RS-232的標準中,通訊是可以以全雙工的方式進行的,每條線路只能向一個方向傳送資料,而且線路的兩端必定為DTE與DCE設備;例如,DTE的TxD對應到DCE的同腳位也必為TxD,因為Transmitted Data對於DTE是指傳送資料到DCE,對於DCE而言是指接收DTE所傳送的資料,訊號的名稱一樣但是功能不同,而這種接線的方法我們稱為Straight Through。但如果必須連接兩台DTE或DCE時,如果兩邊使用Straight Through的話就無法通訊了;例如兩台DTE的TxD都是傳送資料,名稱一樣功能也相同,使用Straight Through兩邊都會透過同一條線路一直傳送資料,如此會造成信號碰撞導致無法接收資料;所以這時就要使用Null Modem的方式,也就是俗稱的跳線,將一邊的輸出信號導引到另一邊的輸入信號,例如將一邊的TxD對應到另一邊的RxD。
以目前IoT的實務上來說,PC、PLC、電表等設備都屬於DTE設備,DCE設備則比較少見,DCE設備大多是數據機、DSU(Data Service Unit)、CSU(Channel Service Unit)等通信設備;所以以實物上的經驗來說,一般在IoT的設備都屬於DTE設備,所以TxD與RxD大多以跳接的方式接線,也就是一端的TxD連接到另一端的RxD。
留言
張貼留言