這一篇我們來談非同步序列 (串列) 傳輸以及一個古董級的傳輸技術: RS-232.

RS-232 是一種常用的序列傳輸技術, 和另外二個我們在嵌入式系統 (embedded system) 常用的序列傳輸技術 I2C 和 SPI 有很大的差異:

  • RS-232 主要是用於非同步序列傳輸. 雖然 RS-232 標準也包括了支援同步的傳輸的部份, 不過現在我們最常用的是它非同步的部份.
  • 它是用在二個系統之間 (一開始的目標就是跨系統), 而不是像 I2C 和 SPI 是用於同一片電路板, 或者同一個系統上.
  • 它是全雙工傳輸. 不過有些它的衍生技術 (RS-485) 只支援半雙工傳輸.訂正: RS-485 不只支援半雙工傳輸, 也可以設置成全雙工傳輸.
  • 早期的傳輸速率和 I2C 和 SPI 比起來是慢了許多. 不過後期修正的極限速率 (RS-232-C) 則已經和 I2C 相當.

有關 I2C 和 SPI 的介紹文章:



我們先看 RS-232 的部份.

RS-232 名稱的由來


RS-232 前面的英文字母實際上是 Recommended Standard 的縮寫, 中文意思是推薦標準. 它是由美國電子工業聯盟 (EIA, Electronic Industry Association) 制定的. 由於它是 EIA 制定的第 232 份建議標準文件, 所以最初的正式的全稱是 EIA-RS-232, 簡稱 RS-232.

第一版的 RS-232 文件在 1960 年 5 月出版 (如何, 夠古老吧?). 多年下來, RS-232 經歷了多次的改版. 其中以 1969 年第三次修訂的 RS-232-C 最為廣泛使用(註一). 目前 RS-232 標準最新的版本是在 1997 年由 TIA/EIA 發行, 編號是 TIA/EIA-232-F. 之後 2002 年及 2012 年的更版只是更改文件編號重新發行, 內容並無更動.

發行機構 標準/文件編號/版本 發行日期
EIA RS-232 (May 1960)
EIA RS-232-A (October 1963)
EIA RS-232-B (October 1965)
EIA RS-232-C (August 1969)
EIA EIA-232-D (November 1986)
TIA TIA/EIA-232-E (January 1991)
TIA TIA/EIA-232-F (1997-09-30)
TIA ANSI/TIA-232-F-1997 (R2002)
TIA TIA-232-F (R2012)

和 RS-232 類似的規範有 ITU-T (前身為 CCITT) V 系列規範(註二)的 V.24 和 V.28. 二者 (RS-232 和 ITU-T) 的用語不用, 但電氣規格幾乎相同.

主要的差異是 RS-232 只規範介面相關的機械及電氣特性, 並沒有規範介面的速率(註三)、modem 用的調變方法...等等.

ITU-T V 系列規範則除了 V.24/V.28 是和 RS-232 對應之外, 還有其他相關的規範: 像是 modem 的傳輸速率和應該使用之調變方法及其他功能 (FAX, error control, data compression...). 例如: V.21 文件定義 300 bps modem 的傳輸規範, V.34bis 文件追加到 33.6 Kbps. V.41 文件定義使用 ITU-T CRC-16 多項式 (polynomial) 作為錯誤偵測碼...

註一: RS-232-C 最為廣泛使用的原因是 1981 年 IBM PC 推出的時候, 直接採用當時最新的 RS-232-C 來作為序列接口 (COM Port) 的標準. 當年的 IBM PC 就是我們現在使用的個人電腦的前身. 伴隨著 Internet 的興起 (需要連接 modem) 以及後來的 windows 作業系統的流行 (需要連接滑鼠 mouse), 個人電腦對 '序列接口' 的需求大增, 所以包含二個 '序列接口' 的 2S1P 介面卡也就成為採購個人電腦時必備的擴充介面卡. 同時也逾來逾多需要和個人電腦整合的設備也都盡可能的採用 IBM PC '序列接口' 相容的 '序列接口' (例如: UPS 的控制介面, 以及為數眾多的儀器控制介面和工業控制設備介面).

註二: ITU-T V 系列的規範文件下載, 及 Wiki 網站說明

註三: RS-232 只陳述其適用的最大傳輸速率, 及建議的傳輸線長度.

UART 與 RS-232 的關係


UART + RS-232 是非同步序列傳輸的一體兩面: UART 是非同步序列傳輸靠近中央處理器 (CPU) 這一端的邏輯電路. UART 的輸出電壓準位為 TTL 相容, 傳輸距離太近, 不具備跨系統所需的電路隔絕能力, 抗干擾能力也太差. 而 RS-232 則是靠近傳輸接頭和傳輸線這一端的, 它擴充了 UART 的傳輸距離, 抗干擾能力與電路隔絕能力.

UART and RS-232 and other transceiver

UART 與 RS-232 及其他 Transceiver 的關係圖

  • UART(註四): UART 是英文 Universal Asynchronous Receiver/Transmitter 的縮寫. 中文翻譯是通用非同步接收傳送器(註五). 指的是實作 '非同步序列傳輸' 的邏輯電路或者積體電路 (IC). 在傳送端利用並列轉序列元件 (Parallel to Serial) 將資料轉換為位元串傳送出去, 接收端則倒過來使用序列轉並列元件 (Serial to Parallel) 將資料回復為原樣.
  • RS-232: 依照 RS-232 的標準文件來看, 它只是一種特定電氣規格的收發驅動電路 (Transceiver)(註六), 主要被運用在傳輸線路上 (並沒有限定是同步或非同步). 一般我們比較容易犯的錯是用 RS-232 來代表非同步序列傳輸 (或者代表 UART), 主要是因為下列幾個原因:
    • RS-232 剛出現時, 人們並沒有意識到會有其他更好的收發驅動電路可以取代它. 其實也要到 15 年之後的 1975 年才有更優秀的收發驅動電路出現: RS-422/RS-423. 在 RS-422/RS-423 出現之前, RS-232 是 '非同步序列傳輸' 唯一可用的收發驅動電路.
    • 同步傳輸設備不常見, 通常同步傳輸設備都是搭配著 '租用專線' (非一常見的 PSTN 線路) 一起租給專線用戶.
    • 由於使用 PSTN 的 '撥接式' 網際網路的流行, 導致一般大眾眼裡 RS-232 幾乎只應用在 '非同步序列傳輸' 的 modem 和 PC 上, RS-232 也就幾乎是 '非同步序列傳輸' 的代名詞.
    因此 非同步序列傳輸和 RS-232 二者常被混用.

好了, 我們回顧一下這一段的重點:

  • UART 是非同步序列傳輸的邏輯電路部份.
  • RS-232 是一種收發驅動電路, 可以利用在各種合用的傳輸上 (不限是同步還是非同步).

註四: 第一個 UART 是 Gordon Bell 先生為 DEC 公司 (Digital Equipment Corporation) 的 PDP-1 電腦所設計的 (它是 PDP-1 的一個 I/O 子系統, 於 1960 年問世). 來源: 維基網站之 Gordon_BellUniversal asynchronous receiver/transmitter.

註五: UART 之所以為通用 (Universal) 的原因是當初每組傳輸的字元單位可能是 5, 6, 7, 8 位元 (7 bit ASCII 編碼要到 1967 年才成為標準), 加上同位元 (parity) 可以是無同位/奇同位/偶同位 (部份 UART 還支援 SP/MK 二種少用的同位元), 再加上停止位元可以是 1/1.5/2 位元, 所以有超級多種組合 (現今的 UART 多保留其組合的多樣性, 不過最常用的組合只有一種: 8N1 8 位元/無同位/1 個停止位元).

註六: 現今經常將 Transmitter + Receiver 縮寫為 transceiver: 收發器.

電氣規範與資料傳送/接收時序


一般 UART 的電路可以分成三大區塊: 傳送區塊, 接收區塊, modem 控制邏輯區塊. 下圖 intel 8251A(註七) 的功能區塊圖比較簡略, 但可以清楚看到此三大區塊的組成. 各位可以和 National Semiconductor NS8250 的功能區塊圖比較看看.

其中, 傳送區塊和接收區塊是二個獨立運作的區塊:

  • 傳送區塊: 作用是將訊息資料由並列 (parallel) 轉換為序列 (serial), 同時附加上 Start, Parity, 和 Stop.
  • 接收區塊: 作用恰好和傳送部份相反, 是以序列方式接收訊息資料並轉換為並列方式供後端的中央處理器 (CPU) 使用. 其中最重要的部份是如何與傳送端取得同步 (根據設定傳輸速率). 有關接收端如何和發送端取得同步的詳細機制要請你參閱這一篇貼文 "UART 接收同步機制及鮑率誤差計算".

電氣規範


RS-232C Signal Level

RS-232 的輸出/輸入電壓準位

上圖是 RS-232 的輸出及輸入電壓準位.

  • RS-232 的輸出是 '負邏輯':
    • 低電位 (-15V~-5V 之間) 為邏輯 1 (又稱 mark, MK)
    • 高電位 (+5V~+15V) 為邏輯 0 (又稱 space, SP)
    • 無負載 (開路) 時, | 輸出電壓 | ≤ 25V.
  • RS-232 的輸入電壓準位:
    • 輸入低電位 (-15V~-3V 之間) 判定為邏輯 1
    • 輸入高電位 (+3V~+15V) 判定為邏輯 0.
    • 線路的直流阻抗應介於 3KΩ ~ 7KΩ, 線路+接收器的等效電容 ≤2500pF.
  • 由於 RS-232 輸入判定的範圍很是寬廣, 因此用較低的電壓驅動 RS-232 收發器也是可以的. 只是傳輸距離比較短而已. 例如: 德州儀器公司 (Texas Instruments) 的 MAX232, 它的接收器可以承受 ±30V 的輸入訊號. Line Driver 部份是獨立供電的, 最高 ±15V. 同時在以 ±5V 為 Line Driver 供電, RL=3kΩ 時的典型輸出是 ±7V.

資料傳送/接收時序


UART Signal Sequence

UART 的序列輸出時序圖

上圖是 UART 晶片序列輸出接腳 (TxD) 的時序圖 (TTL 電位) 以及其對應的 RS-232 接收端訊號時序.

  • 和 RS-232 使用 '負邏輯' 不同, UART 的輸出是 '正邏輯': 低電位為邏輯 0, 高電位為邏輯 1, 電位相容於 TTL.
  • 每個位元的時長是 1/baud 秒(註八).

UART 資料傳送的時序說明如下:

  • 最左邊是斷電時晶片沒有輸出 (低電位).
  • 再來是供電之後, 還沒有訊息需要傳送的閒置狀態 (Idle), 此時 TxD 接腳輸出是持續維持在高電位.
  • 接下來由 StartStop 為一個傳送單位: data frame. 在應用上, 目前大部份都是一個 data frame 包含一個位元組 (Byte, 8 bits) 的訊息資料. 每一個 data frame 都是以 Start bit 開頭, Stop bit 結束.
    1. Start bit 的長度是一個位元. 型態上一定是由 Idle (或 Stop) 的高電位 (1) 轉變為低電位 (0), 然後持續一個位元的時間. Start bit 一開始的下降邊緣很重要, 因為接收端即是以這一個現象來校正自己的時脈訊號, 使它和傳送端的時脈訊號盡可能的接近同步.
    2. Start bit 之後就是變動的資料了, 固定是 lsb (Least Significant Bit, bit0) 先輸出, 再依序輸出到 msb (Most Significant Bit, bit7).
    3. 接著是檢查用的同位元 (parity bit), 它可以設定成三種狀態其中的一個: 不輸出同位元, 使用奇同位, 或者是偶同位.
      • 奇同位: 資料位元+同位元一共有奇數個 1.
      • 偶同位: 資料位元+同位元一共有偶數個 1.
    4. 最後是 Stop bit, 型態一定是回到和 Idle 一樣的高電位 (1), 長度則可以設定是 1/1.5/2 個位元.
  • 如果還有資料要送出, 則重覆上一個動作 (由 Start 開始). 如果沒有資料了就繼續維持在高電位輸出 (Idle) 即可.

一圖勝千言, 下圖 (來自維基百科) 顯示了 RxD 接腳接收一個 ASCII 字元 'K' 的狀況. 視波器上我們所見到的第一個波凸 (圖上 ⓐ, ⓑ 之間) 即是 Start bit, 接著就是資料 1101 0010 (高電位為 0, 低電位為 1), 然後是 Stop bit (低電位 MK). 由於是 bit0 先傳送, 所以我們收到的是 0100 1011b 正好就是字元 'K' 的 ASCII 編號 0x4B.

電位上我們也可以看到 SP 在 6.88v 左右, MK 則在 -6.00v 左右. baud(註八) 應該是 9600 bps (一個 bit 需時 104.167µs), 圖上 ⓐ, ⓑ 之間為 106 µs, 應該是視波器游標標記時的誤差.

UART Signal

視波器上的 RS-232 訊號.
RxD 接腳接收 ASCII 字元 'K' (0x4B, 0100 1011b)
(來源: 維基百科)

註七: 8251A 是一款 USART, 比常用的 8250 UART 多了同步傳輸的功能 (所以有時脈相關的接腳 nRxC 及 nTxC), 但是 Modem 的控制接腳少了幾支 (RI 及 CDC). USART 和 UART 的功能區塊是相同的, 只不過各個區塊的功能內容類似, 差異很小.

最簡單的同步方法就是多一支傳送時脈的接腳來傳送時脈訊號, 然後不用傳送 Start, Stop bit. 像這樣:

Sync Serial

同步傳輸時序圖

有沒有很眼熟? 沒錯, 是不是和 SPI 的時序圖很像啊?

說來 8251A 它也可憐, 由於它並不自帶 baudrate 產生器, 所以被第一代的 IBM PC 拒於門外, 改採 8250 UART. 多年後, 8250 UART 也被接腳相容, 功能更強的 16450 取代. (來源: 維基百科)

當然不傳送時脈, 直接使用編碼的方法來達成同步的方法也是有的, 例如: SMPTE 系統, 或者 Manchester code. 只不過它不屬於 RS-232 制定時期的產物, 而且解時脈的電路麻煩很多.

註八: Baud (鮑) 即調變速率, 是調變傳輸 (或稱符號傳輸) 的通用度量單位. 單位「鮑」(Baud) 本身已是速率, 代表每秒的調變數, 所以不需要寫成 baudrate (rate 是贅字). 即便如此, 中文口語經常還是會用「鮑率」這樣的詞.

Baud 通常不等於 bps, 例如: 1200 bps 的 modem, 其調變端通常是以 600 buad 進行傳輸; 9600 bps 則是以 2400 baud 進行傳輸 (來源: 維基百科). 只有當傳輸系統只用 2 個符號 (Symbol, 通常是 0 與 1) 傳輸時, baud 才會等同於 bps. 例如: 此處的 UART.

控制接腳


RS-232 把設備分為 DCE (Data Communication Equipment)(註九) 及 DTE (Data Terminal Equipment). DTE 指的是電傳打字機, 終端機, 電腦...等處理資料的終端設備. DCE 則是指像是 modem 等這類介於 DTE 及電信傳輸電路之間的通訊設備.

概念上, 一組 '傳送' 與 '接收' 之間需要一個傳輸通道. 因此我們只需要一條三芯的傳輸線即可將二個設備以 RS-232 連接起來: 一送, 一收, 一接地. 不過這並未考慮到二個設備如何將自身狀況回報給對方. 因此 RS-232 通常還需要一些額外的控制接腳. 尤其是 RS-232 一開始並不是為電腦主機 (host computer) 或終端機 (terminal) 而制定, 反而是為了遠距離傳輸而量身打造的: 遠距離連結二台電傳打字機.

遠距離可不只是跨市跨州, 它的目標是跨越美國東西二岸, 甚至於跨越大西洋到達歐洲. 當然, 如此長的距離也不是由 RS-232 提供, 而是由調變解調器 (modem)(註十)所提供. 沒錯! RS-232 最初連結設備就是電傳打字機 (teletypewriter)(註十一)調變解調器 (modem). 這二種設備消化資料的速率很是緩慢且不一致: 電傳打字機主要受限於機械元件的工作速度; modem 則受限於當時的傳輸技術不足, 以及傳輸距離逾遠訊號衰減逾大, 而無法以太快的速度將資料傳輸至遠方; 為此 RS-232 也多定義了一些控制用的接腳, 例如: RTS, CTS, DSR, DTR...等等.

常用 RS-232 接腳表 (非用步傳輸) (完整的接腳表在此)
縮寫 訊號名 方向 DE-9 DB-25 功能說明(註A)
DCD Data Carrier Detect DCE ─▶︎ DTE 1 8 DCE 接收到由遠端發送來的載波
RxD Received Data DCE ─▶︎ DTE 2 3 DTE 接收資料
TxD Transmitted Data DCE ◀︎─ DTE 3 2 DTE 傳送資料
DTR DTE Ready DCE ◀︎─ DTE 4 20 DTE 就緒
SG Signal Ground ── 5 7 訊號接地
DSR DCE Ready DCE ─▶︎ DTE 6 6 DCE 就緒
RTS Request to Send DCE ◀︎─ DTE 7 4 請求傳送.
CTS Clear to Send DCE ─▶︎ DTE 8 5 許可傳送.
RI Ring Indicator DCE ─▶︎ DTE 9 22 DCE 偵測到電話進線 (有電話打進來)
FG Frame Ground ── 1 外殼接地

註A: 由於詳細的接腳功能說明太過繁雜, 在這裡我就不遂一翻譯了, 有興趣的朋友請細讀 RS-232 規範的段落 4 "Function Description of Interchange Circuits" (哪一份都可以) 或者參考 softelectro.ru 網站上這一篇文章 的段落 2.5.4 "The functional description of interchange circuits"

讀這張表要注意的是: 這張表上的接腳名稱雖然是以 DTE 的角度來定義的, 但不論是 DTE 或者 DCE 都是使用這張表. 表中所列的這些接腳名稱, 位置及傳輸方向的定義都是一致的 (不論是 DTE 或者 DCE). 以 RxD 接腳為例, 依據上表 RxD 在 DE-9 接頭的第 2 支接腳, 訊號的方向是 DCE ─▶︎ DTE. 因此, 在 DCE 設備上, RxD 接腳是輸出 (Output), 位在 DE-9 母接頭的 pin 2 上, 用來傳輸資料給 DTE. 反之, 在 DTE 設備上, RxD 接腳是輸入 (Input), 位在 DE-9 公接頭的 pin 2 上, 是用來接收 DCE 來的資料. 所以連接 DCE 和 DTE 二者使用直通傳輸線即可 (一端為 DE-9 公接頭, 另一端為 DE-9 母接頭), 不需要任何的交叉對調.

還有一點: RS-232 標準文件將 RS-232 的資料和控制訊號的訊號準位分開來說明.

RS-232-F Table1 Interchange State
Notation Interchange Voltage
Negative Positive
Binary 1 0
Signal Condition Marking Spacing
Function OFF ON

上表主要是陳述 RS-232 資料接腳是 '負邏輯', 其背後的真實資料 (TTL 端) 要反向; 而控制接腳用的則是 '正邏輯', 是高電位 SP 為該訊號啟用 (enable/ON); 低電位 MK 為該訊號停用 (disable/OFF).

其實, RS-232 資料接腳的 '負邏輯' 來自於 RS-232 收發驅動電路. 實務上, 不但資料接腳用了 RS-232 收發驅動電路, 其他各個控制接腳也都用上了相同的 RS-232 收發驅動電路 (Line Driver/Receiver: DS-1488/DS-1489). 所以前面說的控制接腳使用 '正邏輯', 他們的 TTL 端一樣是要反向的, 一樣是 '負邏輯': 0 為 enable/ON, 1 為 disable/OFF.

關於這點, 各位可以在前面 圖 2. intel 8251A 功能區塊圖 中得到證明. 在 intel 8251A 功能區塊圖中, 我們看到 DSR, DTR, CTS, RTS 這些訊號的接腳名稱前面都附加了一個 'n' 成為 nDSR, nDTR, nCTS, nRTS; 同時這些訊號在區塊圖上都有一個代表 'NOT' 功能的小圓圈. 這意味著它們用的也都是 '負邏輯'.

小結: RS-232 的接腳在 TTL 這一側都使用 '負邏輯': RS-232 這一側的高電位 SP 為該訊號啟用 (enable/ON), TTL 側為資料 0; RS-232 這一側的低電位 MK 為該訊號停用 (disable/OFF), TTL 側為資料 1.

註九: 此為 EIA Standard RS-232-C 的用詞. 自 EIA-232-D 起已經將 DCE 改為 Data Circuit-terminating Equipment 縮寫依舊是 DCE.

註十: 其實它就是以前我們用電話撥接上網時使用的數據機. 只是年代比較早, 傳輸速率沒那麼快. '數據機' 是台灣用語, 大陸的稱呼是 '魔电' 或 '猫'. 不過在此我希望能保留它的原文意義, 因此使用比較學術一點的譯名.

註十一: 最初中大型主機 (host computer) 都是使用電傳打字機作為主控台 (console), 而不是後來常用的終端機 (terminal). 這也是為什麼現在 Unix/Linux 主機的終端機連線裝置檔 (device file) 的檔案名稱是 /dev/tty1, /dev/tty2..., 其中的 tty 正是 teletypewriters 的縮寫. 另外, 經由網路連結 (telnet) 的虛擬終端機則縮寫為 pty (pseudo-tty), 例如: /dev/pty0. 還有, 如果是 xterm 或者 ssh 則是 pts (psuedo terminal slave), 例如: /dev/pts/0.

流量控制


XON/XOFF


最早 DTE/DCE 之間並無法進行硬體流量控制, 只能使用 XON/XOFF 流量控制協定: 一種 in-band 協定, 即在數據通道內傳送特殊控制字符來完成流量控制.

XON/XOFF 的 X 代表傳送 (transmit), 它使用 ASCII 字符表中的用於裝置控制 (Device Controll) 的特殊字符 DC3 (0x13) 代表 XOFF: 暫停傳送DC1 (0x11) 代表 XON: 重啟傳送. 相較於硬體流量控制需要額外的控制接腳, XON/XOFF 軟體流量控制並不需要. 但是缺點是反應時間比較慢, 至少是傳送一個字符的所需的時間(註十二), 還有需要軟體去解析對方送來的資料是否含有 XON/XOFF, 並且需要套用特定的跳脫序列 (escape sequence) 才能傳送含有 0x13 及 0x11 的資料.

XOFF/XON 的意義
Code 意義 ASCII 字符 十六進制數值 按鍵組合
XOFF 暫停傳送 DC3 0x13 Ctrl+S
XON 重啟傳送 DC1 0x11 Ctrl+Q

RTS/CTS, DTR/DSR


RS-232 的控制接腳原本都有一些控制 DCE/DTE 相關的流程規定. 例如: RTS/CTS, 最早這二支接腳是用來控制半雙工 (half-duplex) 數據機 (Bell 202 modem) 的傳輸方向. 當 modem 沒有資料要傳送時會先關閉它們的傳送電路, 需要傳送時會先送出一個同步前導訊號 (synchronization preamble) 給對方的接收器. DTE 需要啟用 RTS 以通知 DCE: DTE 有資料要傳送給它 (DCE). 當與遠端的 DCE 建立 '傳送接收通道' 的工作完成, DCE 則啟用 CTS 來回應 DTE 可以傳送了.

但是隨著傳輸速率更快的新設備出現, 而 XON/XOFF 無法滿足快速反應的需求, 於是有新功能的需求: DTE/DCE 之間需要快速反應的流量控制機制. 於是一些 modem 生產廠自行將 RTS/CTS 重新定義為流量控制: DTE 啟用 RTS 來通知 DCE: 我 (DTE) 可以接收資料了; 停用 RTS 則通知 DCE: 你 (DCE) 太快了, 我消化不來, 你 (DCE) 暫停傳送資料; 而對應的, DCE 也可以啟用 CTS 來通知 DTE: 我 (DCE) 可以接收資料了; 停用 CTS 則通知 DTE: 你 (DTE) 太快了, 我消化不來, 你 (DTE) 暫停傳送資料. 而這套機制, 最終也收入在 RS-232-E 的 Circuit CJ: "Ready to Receive".

DTR 原本是 DTE 用來指示它已經開機, 可以進行後續的操作了. DCE 則是啟用 DSR 來通知 DTE 已經接通遠端 (撥接網路). 此後 DTR/DSR 應持續保持在啟用狀態. 當本次傳輸完成, DTR 則可以停用 DTR 來命令 DCE 掛掉電話. 但是也有一些軟/硬體可以使用 DTR/DSR 來進行流量控制.

後來更有廠家 (Exar, 已被 MaxLinear 收購) 乾脆把這三種流量控制 (XON/XOFF, RTS/CTS 及 DTR/DSR) 直接實作在 UART 晶片上, 使用者只要依需求設定對應的控制暫存器即可. 真正的作到硬體流量控制. (來源: 維基百科)

註十二: 一般狀況下, 多位元組 FIFO (First In, First Out) 的使用會增加 XON/XOFF 的反應時間, 同時也使 UART 的底層趨動程式判定 XON/XOFF 的部份更加複雜.

另, 早期的 IBM PC 所使用的 UART 只有 1 Byte 的 FIFO (其實就只是 register buffer), 所以是每接收 1 Byte 就會產生一次中斷 (interrupt). 此時, 若 baud(註八) 設定 > 9.6Kbps, 就會使系統的 UART 接收中斷太快太多, 使 CPU 頻繁進出中斷服務, 進而拖慢系統響應. 因此 IBM PS/2 改用 16550A 來改善此一問題:

  • 16550A 支援 16 Byte 的 FIFO. 使用 FIFO 時, 16550A 可以將中斷量降低至原來的 8% ~ 12% (FIFO 中斷設定為填滿 3/4 (12 byte) 時, 或者填滿 1/2 (8 byte) 時), 因此傳輸速率可以高達 128Kbps (依 MS-DOS 的要求中斷回應延時為 1ms), 至少是原來 9.6Kbps 的 13 偣.
  • 16550A 也支援 DMA 功能: 只要劃一塊夠大的記憶體, 就可以等 CPU 忙完了再來處理接收來的東西. 若啟用 DMA 傳輸速率更可以高達 1.5Mbps.

(引用來源: 維基百科)

接頭


最初 RS-232 規定 DCE 設備使用 DB-25 母接頭(註十三), DTE 設備使用 DB-25 公接頭(註十三). RS-232-E 加上一種 26 pin 'Alt A' 接頭(註十四). 反而是 IBM PC 後來改用的 DE-9 接頭, 一直不在 RS-232 的標準文件裡. 它被定義在 EIA/TIA-574 (1990/09) 裡: 一份為了因應 IBM PC 自行將 DB-25 接頭改為 D-sub 同系列的 DE-9(註十五) 接頭而產生的標準文件. 由於接頭只有 9 pin, 它只專注在非同步序列傳輸上. 同時因應科技的進步該標準將傳輸速率的上限調整至 38.4Kbps.

即然提到了 EIA/TIA-574 標準文件, 那就順便插播一下伴隨 EIA/TIA-562 標準產出的 EIA/TIA-561 (1990/03/20) 標準文件: 這一份文件改用 8P8C 接頭 (即被誤稱為 RJ45 的接頭, 也就是我們在 Ethernet 裡常用的那種'水晶頭') 來定義非同步序列傳輸的 RS-232 接腳.

EIA-TIA-561 接腳表 (8P8C/RJ45)
訊號名 RJ45 DE-9 DB-25 方向
RI 1(註B) 9 22 DCE ─▶︎ DTE
DSR 1(註B) 6 6 DCE ─▶︎ DTE
DCD 2 1 8 DCE ─▶︎ DTE
DTR 3 4 20 DCE ◀︎─ DTE
SG 4 5 7 ──
RxD 5 2 3 DCE ─▶︎ DTE
TxD 6 3 2 DCE ◀︎─ DTE
CTS 7 8 5 DCE ─▶︎ DTE
RTS 8 7 4 DCE ◀︎─ DTE

註B: Pin1 為多功能接腳連接了 DSR 和 RI. 此意為著 DTE 無法明確區分二者. 這在二部 DTE 互接, 或者 modem 設定成自動回應模式時都不成問題. 只有當 DTE 端想要 (經由 modem) 精細控制電話進線時才會有問題.

回到正題, D-sub 接頭的公母之分端看有無針腳, 有針腳的是為公接頭.

DB-25 母接頭 (female)

DCE 使用的 DB-25 母接頭
(圖片借用自: altronics.com.au)

DB-25 公接頭 (male)

DTE 使用的 DB-25 公接頭
(圖片借用自: altronics.com.au)

D-sub 系列的公接頭針腳都是由較寬一端的左側開始向右計數. 母接頭的針孔自然的要由較寬一端的右側開始向左計數.

DB-25M pinout

DB-25 公接頭正面的接腳順序 (來源: 維基百科)

DE-9M pinout

DE-9 公接頭正面的接腳順序 (來源: 維基百科)

DE-9F pinout

DE-9 母接頭正面的接腳順序 (來源: 維基百科)

與 DB-25 接頭不同, "Alt A" 接頭則分為設備用 (DTE 及 DCE 用一樣的) 及傳輸線用 (傳輸線的二端都用一樣的). 不過文件裡似把這二種接頭的構結尺寸圖貼錯了: 依據 EIA/TIA-232-F 文件, 並比對段落 3.3.1 對 DB-25 公接頭的描述及 3.4.1 對 Alt A 傳輸線接頭的描述. 我們知道 DTE 接頭和 "Alt A" 接頭一樣是用針腳接頭, 也可以確定第 14 頁 Figure 8 Alt A Cable Connector 的內容本應該是傳輸線接頭, 卻被錯貼成了設備接頭; 第 15 頁 Figure 9 Alt A Equipment Connector 的內容本應該是設備接頭, 卻被錯貼成了傳輸線接頭.

3.3.1   Figure 3 illustrates the DTE connector which has male (pin) contacts and a female shell (plug connector). Figure 4 illustrates the DCE connector which has female (socket) contacts and a male shell (receptale connector). Contact numbering is also illustrated in these figures. Figures 5, 6 and 7 illustrate contact spacing and dimensions.

3.4.1   Figure 8 illustrates the Alt A Cable connector which has male (pin) contacts and a female shell (plug connector). Figure 9 illustrates the Alt A Equipment connector which has female (socket) contacts and a male shell (receptale connector). Contact numbering is also illustrated in these figures.

註十三: 公/母接頭一般用 male/female 代表, 縮寫為 m/f (例如: DB-25m/DB-25f) 或者以 plug/socket 或 pin/nest 代表, 縮寫為 p/s (例如: DE-9p/DE-9s)

註十四: 雖然在 TIA-232-F 文件上有它的尺寸圖, 不過我用 "RS-232-F Alt A connector" Google 不到這種新接頭的照片, 大概是沒有廠家真的使用在產品上. 後來用 "26 pins connector" 找到類似的接頭: Mini Delta Ribbon (MDR) 接頭. 但是 "Alt A" 公頭用的是單獨凸出的針腳, MDR 卻是的針腳卻是縮小版的 CN50 的雙面齒狀結構. "Alt A" 接頭應該是 SCSI-2 用的 HD50 接頭同一個系列的. 如下圖的第二個接頭:

D-sub connectors

D-sub 接頭 (來源: 維基百科)

註十五: DE-9 和 DB-25 是 D-sub 同一系列的接頭, 大部份尺寸都相同, 只是接腳數由 25 pin 變成 9 pin, 所以只有整體寬度變窄了. 參考: 維基百科 D-subminiature

Null modem 傳輸線


Null modem 傳輸線源於使用 RS-232 傳輸線將二台電傳打字機直接對接 (省去介於中間的 modem). 而前面提到 DCE 和 DTE 之間使用直通傳輸線即可, 因此要將二台 DTE 對接, 此一傳輸線的資料線必需交叉對接, 同樣的為了模擬 DTE 與 DCE 之間的交握 (handshake) 某些控制線也必需依一定的規則交叉對接:

  • TxD ─▶︎ RxD
  • RTS ─▶︎ CTS
  • DTR ─▶︎ DSR+DCD (或者只接 DSR. DCD 接腳是不是必需接上是依據所使用的軟體是否需要而定)
全硬體交握 Null modem 接線表
Side 1 方向 Side 2
訊號名 DB-25 DE-9 DE-9 DB-25 訊號名
FG 1 -- ── -- 1 FG
RxD 3 2 ◀︎─ 3 2 TxD
TxD 2 3 ─▶︎ 2 3 RxD
DTR 20 4 ─▶︎ 6 6 DSR
1 8 DCD
SG 7 5 ── 5 7 SG
DSR 6 6 ◀︎─ 4 20 DTR
DCD 8 1
RTS 4 7 ─▶︎ 8 5 CTS
CTS 5 8 ◀︎─ 7 4 RTS

由於是連接二台 DTE, Null Modem 後來 (在區域網路尚未流行之前) 大量用於 PC 之間 (的檔案傳輸, 或遠端控制...). 而除了標準的全硬體交握接法之外, Null modem 還有許多變種接法, 比較常用的有三: 無硬體交握 (三芯式), 迴路交握, 部份硬體交握.

  • 無硬體交握 (三芯式): 傳輸太快時有掉字的潛在危險. 必需使用 XON/XOFF 協定控制流量, 以防遠端傳送太快, 本地端 UART 的接收 FIFO 溢出. 掉字有可能是慢速的磁碟機 IO 引起的, 或者 Windows 3.1, Windows 95 等協作式多工作業系統引起的, 如果是某個軟體引發作業系統來不急切換工作, 那真的是無解. 這種接法可適用傳輸軟體較少.

    無硬體交握 (三芯式) Null modem 接線表
    Side 1 方向 Side 2
    訊號名 DB-25 DE-9 DE-9 DB-25 訊號名
    RxD 3 2 ◀︎─ 3 2 TxD
    TxD 2 3 ─▶︎ 2 3 RxD
    SG 7 5 ── 5 7 SG
    無硬體交握 Null modem 接線圖

    無硬體交握 Null modem 接線圖

  • 迴路交握: 同樣只使用三芯的傳輸線, 但二端都使用迴路 (loopback) 偽造出軟體所需的交握訊號, 以達成欺騙軟體的目的. 因為二端並沒有實際進行交握, 所以傳輸太快時也是有掉字的潛在危險. 必需使用 XON/XOFF 協定控制流量, 以防遠端傳送太快, 本地端 UART 的接收 FIFO 溢出. 由於偽造了交握訊號, 傳輸軟體不必開關某些特定的交握功能, 因此這種接法可適用傳輸軟體比前者多.

    迴路交握 Null modem 接線表
    Side 1 方向 Side 2
    訊號名 DB-25 DE-9 DE-9 DB-25 訊號名
    RxD 3 2 ◀︎─ 3 2 TxD
    TxD 2 3 ─▶︎ 2 3 RxD
    SG 7 5 ── 5 7 SG
    DTR

    DCD
    DSR
    20

    8
    6
    4

    1
    6








    6
    1

    4
    6
    8

    20
    DSR
    DCD

    DTR
    RTS
    CTS
    4
    5
    7
    8




    8
    7
    5
    4
    CTS
    RTS
    迴路交握 Null modem 接線圖

    迴路交握 Null modem 接線圖

  • 部份硬體交握: 為了避免前二種 Null modem 接線的缺點, 可以選擇性的使用 RTS/CTS 硬體交握或者 DTR/DSR 硬體交握. 如此變成要使用五芯的傳輸線. 此時傳輸軟體必需關閉沒有實際進行交握的功能. v1 是使用 CTS/RTS 硬體交握, 並使用 DTR 偽造了 DCD. v2 則使用 DTR/DSR 硬體交握, 由於傳輸中 DTR/DSR 會有開開關關的現象故不使用 DTR 來偽造 DCD, 因此限制了相容性. v3 則改為 RTS 來偽造 DCD, 但變成要使用七芯的傳輸線. 即然如此, 不如用一樣是使用七芯傳輸線的全硬體交握 Null modem. 因此, v2/v3 並不多見, 維基百科上也沒有登載這二個版本的 Null modem 接法.

    部份硬體交握 Null modem 接線表 v1
    Side 1 方向 Side 2
    訊號名 DB-25 DE-9 DE-9 DB-25 訊號名
    RxD 3 2 ◀︎─ 3 2 TxD
    TxD 2 3 ─▶︎ 2 3 RxD
    SG 7 5 ── 5 7 SG
    DTR

    DCD
    DSR
    20

    8
    6
    4

    1
    6






    6
    1

    4
    6
    8

    20
    DSR
    DCD

    DTR
    RTS 4 7 ─▶︎ 8 5 CTS
    CTS 5 8 ◀︎─ 7 4 RTS
    部份硬體交握 Null modem 接線圖 v1

    部份硬體交握 Null modem 接線圖 v1


    部份硬體交握 Null modem 接線表 v2
    Side 1 方向 Side 2
    訊號名 DB-25 DE-9 DE-9 DB-25 訊號名
    RxD 3 2 ◀︎─ 3 2 TxD
    TxD 2 3 ─▶︎ 2 3 RxD
    SG 7 5 ── 5 7 SG
    DTR 20 4 ─▶︎ 6 6 DSR
    DSR 6 6 ◀︎─ 4 20 DTR
    RTS
    CTS
    4
    5
    7
    8




    8
    7
    5
    4
    CTS
    RTS
    部份硬體交握 Null modem 接線圖 v2

    部份硬體交握 Null modem 接線圖 v2


    部份硬體交握 Null modem 接線表 v3
    Side 1 方向 Side 2
    訊號名 DB-25 DE-9 DE-9 DB-25 訊號名
    RxD 3 2 ◀︎─ 3 2 TxD
    TxD 2 3 ─▶︎ 2 3 RxD
    SG 7 5 ── 5 7 SG
    DTR 20 4 ─▶︎ 6 6 DSR
    DSR 6 6 ◀︎─ 4 20 DSR
    RTS
    CTS
    4
    5
    7
    8


    ─▶︎ 1 8 DCD
    DCD 8 1 ◀︎─

    8
    7
    5
    4
    CTS
    RTS
    部份硬體交握 Null modem 接線圖 v3

    部份硬體交握 Null modem 接線圖 v3

補一張市售的 Null modem 轉接器相片. 通常我們自己製作的 Null modem 傳輸線是用二個母接頭 (連接二部 DTE), 這種市售的 Null modem 轉接器則有三種型式可供選擇: 公對公 (Male/Male), 母對母 (Female/Female), 還有公對母 (Male/Female). Male/Male 及 Female/Female 這二類是搭配一公一母的直通傳輸線使用的, 可以把直通傳輸線轉變為 Male/Male 及 Female/Female 的 Null modem 傳輸線.

Null modem adapter

DE-9 Null modem 轉接器 (來源: 維基百科)

Yost 轉接頭


Yost 接口的設計目標是:

  • 使用一致的 Cable 即可將設備連起來.
  • 不論 DTE 或 DCE 都是使用 RJ45 母座.
  • 不再需要 Null Modem 接線.

由於大部份都是即存設備, 所以我們需要製作 Yost 轉接頭. DCE 使用的是 DE-9f (或者 DB-25f) 母接頭, 所以我們用 DE-9m (或者 DB-25m) 與 RJ45 母座來製作 Yost DCE 轉接頭. 使用 DE-9f (或者 DB-25f) 與 RJ45 母座來製作 Yost DTE 轉接頭. 製作 Yost DCE 轉接頭時使用 'Yost 接腳表' 的 'DCE' 欄和 'DE-9' 欄; 製作 Yost DTE 轉接頭時使用 'Yost 接腳表' 的 'DTE' 欄和 'DE-9' 欄.

而 Yost 傳輸線的二端使用 RJ45 公接頭, 接法是 pin1 接另一端 pin8, pin2 接另一端 pin7, pin3 接另一端 pin6, pin4 接另一端 pin5... 因為整個次序倒轉, 所以 Yost 傳輸線又稱 Rollover 傳輸線.

另外, 由於 Yost 轉接頭的 pin4 及 pin5 同為接地 (GND), 但 DE-9 (或 DB-25) 只有一支接地腳 (SG) 因此必需將 RJ45 母座的 pin4, pin5 一起 (焊) 接到 DE-9 的 pin5 (或者 DB-25 pin7).

Yost 接腳表
訊號名 Yost 轉接頭(註十六) DE-9 方向
DCE DTE
CTS 8 1 8 DCE ─▶︎ DTE
DSR --(註十七) --(註十八) 6 DCE ─▶︎ DTE
RxD 6 3 2 DCE ─▶︎ DTE
SG 4,5 4,5 5 ──
TxD 3 6 3 DCE ◀︎─ DTE
DTR 2 7 4 DCE ◀︎─ DTE
RTS 1 8 7 DCE ◀︎─ DTE
DCD 7 2 1 DCE ─▶︎ DTE
RI -- -- 9 DCE ─▶︎ DTE

註十六: Yost DTE 轉接頭和 DCE 轉接頭都使用 8P8C (RJ45) 母座.

註十七: Yost DCE 不提供 DSR. 如果有需要 DSR, 請直接用 DSR (DE-9 pin6, DB-25 pin6) 替代 DCD 所佔據的 RJ45 母座 pin7.

註十八: Yost DTE 不提供 DSR. 如果有需要 DSR, 請用 DTR (DE-9: pin4, DB-25 pin20) loopback 給 DSR. 即將 DE-9 這一側的 pin4 和 pin6 接在一起 (或者 DB-25 這一側的 pin20 和 pin6).

對比 Yost DTE 轉接頭和 Yost DCE 轉接頭的接腳順序, 剛好就是整個倒轉過來. 而 Yost 轉接頭的巧妙之處在於它將兩兩成對的接腳 (TxD/RxD, RTS/CTS, DTR/DSR) 依輸入/輸出分群安置在翻轉的位置上 (pin1 vs pin8, pin2 vs pin7...).

前面我們連接二個使用 DE-9 接頭的 DTE 設備時是以 Null modem 傳輸線來將 RxD/TxD, RTS/CTS, DTR/DSR 等兩兩成對的接腳翻轉並連接起來. 換成 Yost 轉接頭, 這個翻轉洽好由 Rollover 傳輸線提供; 而連接使用 DE-9 接頭 DTE 設備和 DCE 設備時只需直通傳輸線即可. 換成 Yost 轉接頭, DTE 轉接頭和 DCE 轉接頭之間已經翻轉了一次, 但 Rollover 傳輸線又翻轉一次, 剛好回到未翻轉的順序.

我們以 Yost DTE 轉接頭的 pin3 RxD 為例: 接上 Yost 傳輸線後 pin3 RxD 位置變成 pin6, 正好可以接上另一個 Yost DCE 轉接頭 pin6 RxD. 或者是接上 Yost DTE 轉接頭 pin6 TxD. 又例如 Yost DTE 轉接頭的 pin8 RTS: 接上 Yost 傳輸線後 pin8 RTS 位置變成 pin1, 正好可以接上另一個 Yost DCE 轉接頭 pin1 RTS. 或者是接上 Yost DTE 轉接頭 pin1 CTS.

下圖是未開封的 RJ45 母座轉 RS-232 (DB-25, DE-9) 轉接器. 可以製作成 Yost 轉接器, 或者依自己的需求製作成其他類似的轉接器.

Unconfigured Yost Adapter

未開封的 Yost 轉接器
(借用自: 蝦皮 yo-hong 網店)

以前工作積攢下來的轉接器

以前工作積攢下來的轉接器
和 RS-232 mini Tester

RS-422/423 及 RS-485


看完 RS-232, 我們順便瞄一下三份後續與 RS-232 類似的的標準.

由於科技的進步, EIA 後續又釋出 RS-422 (1975/05), RS-423 (19??) 及 RS-485 (1983/01). 不過這三個標準都只有電氣規格, 不再規範接頭等機械相關規定.

發行機構 標準/文件編號/版本 發行日期
EIA RS-422 1975/04
EIA EIA-422-A 1978/12
TIA ANSI/TIA/EIA-422-B 1994/05
EIA RS-423 19??
EIA EIA-423-A 19??
TIA ANSI/TIA/EIA-423-B 1995/05
TIA TIA-423-B 1996/02
EIA EIA-RS-485 1983/01
TIA ANSI/TIA/EIA-485-A 1998/03

先看 RS-423, 它和 RS-232 一樣是使用非平衡電路. 它原本是要作為 RS-232 的後繼標準, 結果是市場反應不佳, 現在市場上幾乎找不到使用它的產品.

再來是 RS-422 和 RS-485 這二份標準, 它們和 RS-232 主要的不同點在於它們使用的是平衡電路, 也因此可以改用 UTP 纜線作為傳輸纜線, 進而獲得好處:

  • 因使用平衡電路, 整個傳輸系統的抗干擾能力更強: 干擾同時加在 +/- 二芯輸線上, 因而對訊號差影響很小. 非平衡電路則因為接地線會吸收絕大部份的干擾, 進而使得 EMI 干擾只出現在訊號上.
  • 由於 UTP 纜線的絞對, 它可以:
    1. 消除電容耦合
    2. 消除電感耦合
    3. 減少對外干擾 (EMI): 電流流經導線所產生的電磁場經前後絞對相互抵消, 對外干擾降低.
      magnetic field emissions-1

      平行纜線的電磁場逸散

      magnetic field emissions

      平行纜線與絞線的電磁場逸散比較

RS-485 和 RS-422 類似, 但可以使用二對 UTP 進行全雙工傳輸, 或者也可以縮減為只用一對 UTP 線來進行傳輸, 因此系統只能以半雙工的方式進行慱輸. 同時 RS-485 可以支援多點傳輸.

RS-422 用的最多的是 Apple 公司的 Macintosh. 不過它最終還是不敵後來 PC 所採用的 USB 而退出市場, 不過仍然有許多系統還有使用 RS-422. RS-485 則因為更快更遠更穏定, 因而在工控設備市場 (尤其是惡劣環境, 或者室外設備) 佔有一席之地.

屬性\標準 RS-232-F RS-423 RS-422 RS-485
傳輸線 點對點 點對點, 多點接收 點對點, 多點接收 多點網路
電路型式 非平衡 非平衡 平衡 平衡
單/雙工 全雙工 全雙工 全雙工 半雙工, 全雙工
收發器數目 1 發 1 收 1 發 10 收 1 發 10 收 32 收發點
最長傳輸距離 (註十九) 1.2Km
@1Kbps
1.2Km
@90Kbps
1.2Km
@90Kbps
最大傳輸速率 20Kbps
@15m(註十九)
100Kbps
@12m
10Mbps
@12m
10Mbps
@12m
SP 準位 15~3 V 6~3.6 V 6~2 V (A>B) 5V max. (A>B)
MK 準位 -3V~-15V -3.6~6 V 6~2 V (B>A) 5V max. (B>A)

圖片及內容編輯ing

註十九: 參見附錄一

完整的 RS-232 接腳定義


RS-232-F 接腳表
pin Description V.24
Num.
Circuit Source
1 Sheild -- --
2 Transmitted Data 103 BA DTE
3 Received Data 104 BB DCE
4 Request to Send/
Ready for Receiving
105/
133
CA/
CJ(note1)
DTE
5 Clear to Send 106 CB DCE
6 DCE Ready 107 CC DCE
7 Signal Ground 102 AB
8 Received Line Signal Detector 109 CF DCE
9 (Reserved for Testing) -- --
10 (Reserved for Testing) -- --
11 Unassigned 126 (note4)
12 2nd Received Line Signal Detector/
Data Signal Rate Selector (DCE Source)
122/
112
SCF/
CI(note2)
DCE
13 2nd Clear to Send 121 SCB DCE
14 2nd Transmitted Data 118 SBA DTE
15 Transmitter Signal Element Timing (DCE Source) 114 DB DCE
16 2nd Received Data 119 SBB DCE
17 Receiver Signal Element Timing (DCE Source) 115 DD DCE
18 Local Loopback 141 LL DTE
19 2nd Request to Send 120 SCA DTE
20 DTE Ready 108.1
108.2
CD DTE
21 Remote Loopback/
Signal Quality Detector
140/
110
RL/
CG
DTE
22 Ring Indicator/
Received Energy Present
125/
135
CE/
CK(note5)
DCE
23 Data Signal Rate Select (DTE/DCE Source) 111/
112
CH/
CI(note2)
DCE/
DTE
24 Transmitter Signal Element Timing (DTE Source) 113 DA DTE
25 Test Mode 142 TM DCE
26 No Connection (note3)

note1: When hardware flow control is required Circuit CA may take on the functionality of Circuit CJ.

note2: For designs using interchange circuit SCF, interchange circuit CH and CI are assigned to pin 23. if SCR is not used, CI is assigned to pin 12.

note3: Pin 26 is contained on the Alt A connector only. No connection is to be made to this pin.

note4: Pin 11 is unassigned. It will not be assigned in future versions of TIA/EIA-232. However, in international standard ISO/IEC 2110, this pin is assigned to ITU-T Circuit 126, Select Transmit Frequency.

note5: When Received Energy Presend is used, Circuit CK is assigned to pin 22 replacing Circuit CE.

註N: RS-232-E 定義了一種新的 "Alt A" 接頭, 它多一支接腳 pin26.

註O: 據我所知: EIA Circuit 分為 A, B, C, D... 等幾大類. A 類為接地 (AA, AB), B 類為 Data I/O (BA, BB), C 類為控制訊號 (CA~CF, CG~CI), D 類為 Clock (DA, DB, DD)...

註P: 自 RS-232-D 起上表 pin1, pin4, pin12, pin18, pin21, pin22 等 6 pins 的定義和 RS-232-C 版本有差異.

  • pin1: Protective Ground. (Circuit AA is optional, now it is removed)
  • pin4: Ready to Receiving (RTR) not defined yet. (defined in RS-232-E)
  • pin12: Data Signal Rate Selector (DCE Source) not defined yet.
  • pin18: Local Loopback (LL) not defined yet.
  • pin21: Remote Loopback (RL) not defined yet.
  • pin22: Received Energy Present (REP) not defined yet.

附錄一: 傳輸距離


RS-232 標準文件並未定義其傳輸距離, 這裡所列均是實驗 (經驗) 值. 我在網路上找到了幾個版本. 還有維基百科上的一張 '距離vs速率圖', 不過這張圖個人認為錯誤蠻多的所以就不貼了, 有興趣的人可以參考維基百科的這個連結.

RS-232-C 標準文件 1.3 節陳述了它適用於傳輸速率 ≤20Kbps 的資料傳輸. 規範建議的電纜長度是 50ft (15m), 電纜長度可延伸, 只要電纜+接收器的等效電容 ≤2500pF. 這意味著使用較低電容的電纜就可以延伸 RS-232 的傳輸距離. 所以若是換用 Ethernet 常用的 CAT-5 UTP 纜線, 其單位電纜電容 Cm 約為 16~17 pF/ft, 就可以將長度延長至 30m 左右 (31.5~29.6m, 已扣除接收器的等效電容 20pF).

電纜電容公式 C = Cm+Cs. 其中 Cs = 0.5 * Cm for unshielded cable.

RS-232 傳輸距離
Baud 長度(m)
 (註Q)
長度(m)
 (註R)
長度(m)
 (註S)
0.6 Kbps 1,600m
1.2 Kbps 800m
2.4 Kbps 400m 900m
4.8 Kbps 200m 300m
9.6 Kbps 61m 100m 150m
19.2 Kbps 42.7m 50m 15m
38.4 Kbps 30.5m 25m
57.6 Kbps 18.3m 16m
115.2 Kbps 12.2m 8m

註Q: Wavetronix.com

註R: seabird.com

註S: 依據 Texas Instrument 的實驗結果.

下面這張圖, 主要部份來自維基百科有關 RS-423 的說明. 另外我更動了以下幾點:

  1. 修正 RS-422/RS-485 及 RS-423 的數據線, 並標明的二個拐點的數據.
  2. 依 RS-232 文件的定義, 把它的數據線改為單一個數據點 (15m, 20kbps) 的方形.
  3. 把上面那一張表的三套數據標了上去, 所以你可以很清楚的看到 RS-232 那條線和實際的實驗數據徧離的有多離譜 (這證明當初標準定的很保守).
speed vs length

資料傳輸速率 vs 電纜線長度

附錄二: 如何判定設備是 DCE/DTE


由於 RS-232 標準文件中, 雖然明確的指定 DCE 設備用 DCE 接口, DTE 設備用 DTE 接口. 但是隨著科技的進步, 有時設備外觀沒有足夠的空間來安置合於標準的接口, 有時設備該歸類為哪一類卻不是那麼清晰難以判定: 例如: 使用序列接口的滑鼠, 它並不是通訊設備, 但是為了使用上的方便性, 直接使用了 DCE 接口. 又如: GPS 接收器該用 DTE 接口, 還是 DCE 接口? 於是就有許多設備提供了不一樣的 RS-232 接口. 因此, 有段時間, 工程師總要量測一下, 以確定設備是 DCE 還是 DTE.

我們知道 DTE 設備有三支輸出接腳: TxD, DTR, RTS. 還有 RS-232 接腳再怎麼省, 也至少要有 TxD/RxD 這二支接腳. 所以只要以三用電表量測它們 (TxD/RxD) 和接地之間哪一支存在有電壓 (正/負) 輸出, 即可判定設備是 DTE 還是 DCE. 例如量測結果是 TxD 有負電壓輸出, 那麼設備就是 DTE 類. 反之, 若量測結果是 RxD 有正電壓 (或負電壓) 輸出, 那麼設備就是 DCE 類.

另, 市面上有售賣附雙色 LED 的 RS-232 的小型測試接頭. 這類測試接頭通常是接腳有正電壓輸出時點亮一個顏色的 LED; 接腳有負電壓輸出時點亮另一個顏色 LED. 測試時只要將它接上想要測試的 RS-232 接口上即可. 然後看哪一支接腳的 LED 被點亮來判定, 例如: TxD 亮綠色 LED 時設備為 DTE 類; 反之, RxD 亮綠色 LED 時設備為 DCE 類.

RS-232 Mini Test-1&2

RS-232 mini Tester v1 & v2
(借用自: scancat.com)

RS-232 Mini Test-3

RS-232 mini Tester v3
(借用自: Made-In-China)

知道是 DTE 類或 DCE 類的設備之後, 就可以確定應該用直通線還是 Null modem (全硬體交握) 傳輸線.

再下來就是檢查設備是否有缺省了一些控制接腳. 完整的 DTE 設備應該有三支輸出接腳: TxD, DTR, RTS. 而 DCE 設備應該至少有三支輸出接腳: RxD, DSR, CTS. 完整的 DCE 還要有 CDC 和 RI. 知道連接的雙方各自缺少什麼訊號接腳, 我們就可以利用迴路 (loopback) 偽造出缺少的訊號接腳, 讓對方以為我方可以提供該訊號.

附錄三: 各種接頭之接腳表


RS-232 各種接頭之接腳表
訊號名 Cisco(註T) Yost 轉接頭(註W) EIA-TIA
-561(註Z)
DE-9 DB-25 方向
Con. AUX DTE DCE
CTS 1(註U) 1(註V) 1 8 7 8 5 DCE ─▶︎ DTE
DSR 2 2 --(註X) --(註Y) 1 6 6 DCE ─▶︎ DTE
RxD 3 3 3 6 5 2 3 DCE ─▶︎ DTE
SG 4,5 4,5 4,5 4,5 4 5 7 ──
TxD 6 6 6 3 6 3 2 DCE ◀︎─ DTE
DTR 7 7 7 2 3 4 20 DCE ◀︎─ DTE
RTS 8(註U) 8 8 1 1 7 4 DCE ◀︎─ DTE
DCD -- -- 2 7 2 1 8 DCE ─▶︎ DTE
RI -- -- -- -- 1 9 22 DCE ─▶︎ DTE

註T: Cisco 設備的 Console Port 和 AUX port 都使用 8P8C (RJ45) 母座. 其實它就是用 Yost 接腳順序.

註U: Console Port 的 RTS 與 CTS 內部直接連接在一起.

註V: 此表是正確的. 你從 Cisco 網站查到的 Configure Cable Requirements for Console and AUX Ports 這一份文件有誤, 請參閱表後說明.

註W: Yost DTE 轉接頭和 DCE 轉接頭都使用 8P8C (RJ45) 母座.

註X: Yost DTE 不提供 DSR. 如果有需要 DSR, 請用 DTR (DE-9: pin4, DB-25 pin20) loopback 給 DSR. 即將 DE-9 這一側的 pin4 和 pin6 接在一起 (或者 DB-25 這一側的 pin20 和 pin6).

註Y: Yost DCE 不提供 DSR. 如果有需要 DSR, 請直接用 DSR (DE-9 pin6, DB-25 pin6) 替代 DCD 所佔據的 RJ45 母座 pin7.

註Z: EIA-TIA-561 使用 8P8C (RJ45) 母座.

上表 "註V" 提及的錯誤是: 'Signal' 欄 (第一欄及最後一欄) 的內容除了 RTS 和 CTS 之外應該左右互調. 還有第五欄 'DB-25 Pin' 倒數第 2 格數字 8 應該是 6.

這裡另有一份正確的: Appendix B - Calbe Specifications.

有圖為證:

修正後的 Cisco RJ45 Port and Adapter Pin-outs

Signal Console Port (DTE) RJ45 Rolled Cable Adapter Adapter Signal
RJ45 RJ45 Pin DE-9 Pin DB-25 Pin
CTS 1 8 7 4 RTS
DSR 2 7 4 20 DTR
RxD 3 6 3 2 TxD
GND 4 5 5 7 GND
GND 5 4 5 7 GND
TxD 6 3 2 3 RxD
DTR 7 2 6 6 DSR
RTS 8 1 8 5 CTS

參考資料


無法查看/下載請留言

arrow
arrow
    創作者介紹
    創作者 MagicJackTing 的頭像
    MagicJackTing

    傑克! 真是太神奇了!

    MagicJackTing 發表在 痞客邦 留言(0) 人氣()