序列程式設計/RS-232 連線
序列程式設計: 介紹和OSI網路模型 -- RS-232接線和連線 -- 典型的RS232硬體配置 -- 8250 UART -- DOS -- MAX232驅動器/接收器系列 -- Windows中的TAPI通訊 -- Linux和Unix -- Java -- Hayes相容調變解調器和AT命令 -- 通用序列匯流排 (USB) -- 形成資料包 -- 錯誤糾正方法 -- 雙向通訊 -- 資料包恢復方法 -- 序列資料網路 -- 實際應用開發 -- IP over序列連線
RS-232 是一個用於計算裝置之間序列資料通訊的標準。該標準可追溯到 1962 年,但多年來已進行過重大修訂以適應通訊技術的變革。至少,RS-232 連線可能由連線兩臺裝置的單根電線組成。最常見的簡單連線包含三根電線:傳送 (tx)、接收 (rx) 和接地 (gnd)。但是,完全實現的連線可以包含多達 25 根電線。早期的 RS-232 連線通常用於將終端裝置連線到調變解調器,因此這些主題通常交織在一起。
在序列通訊領域,有兩種不同型別的裝置
- DTE - 資料終端裝置
- DCE - 資料通訊裝置
在實踐中,資料終端裝置 (DTE) 和資料通訊裝置 (DCE) 之間的區別僅僅是功能上的區別。這是一個調變解調器和序列通訊裝置主題混合在一起的例子。在這裡,調變解調器可以被認為是 DCE,而面向使用者的終端是 DTE。幾年前,當使用分時計算系統很普遍時,使用者會撥打電話,將電話聽筒放在聲學調變解調器上,然後將該調變解調器連線到一個簡單的啞終端,終端使用 RS-232 電纜。典型的連線速度通常為 50 波特或 110 波特,儘管非常快的連線可以達到 300 波特。順便說一下,當第一個 IMP (互連訊息處理器) 形成 ARPAnet (網際網路的古老前身) 的第一個節點/路由器時,這正是他們使用的連線系統。這後來讓位於其他通訊系統,但這是網際網路的起源。
在更現代的環境中,想象一下在一個非常危險的地方的一臺裝置,比如在鋼材加工廠中測量軋輥或其他鋼材加工裝置的溫度。這也將是一種我們現在稱之為“資料通訊裝置”的形式,我們也希望能夠遠端控制它。用於工廠控制室的 PC 將是資料終端裝置。還有許多其他類似的裝置,並且可以在各種裝置上找到 RS-232 連線。
之所以稱為“直連”連線,是因為當電纜連線在一起時,每端的每根電線都連線到相同的引腳。
通常你並不總是想將一臺裝置連線到計算機,但也希望將兩臺計算機連線在一起。不幸的是,當使用“直連”序列連線將兩臺計算機連線在一起時,兩臺計算機會在同一條電線上相互衝突。
一種使此方法起作用的方法是使用一對調變解調器將兩臺計算機連線在一起。如前所述,這是一項非常常見的任務,在 1980 年代和 1990 年代初期,使用調變解調器讓計算機互相呼叫並交換各種資訊,這很常見。
現在想象一下,如果這兩臺電腦在同一個房間裡。它們不需要透過物理調變解調器,而是透過一個“空調變解調器”,或者說根本不存在的調變解調器。為了讓這工作,你必須“交叉”一些電線,這樣當你從一端傳輸一些資訊時,另一臺電腦就能檢測到並接收相同的資訊。
除了簡單地允許一臺電腦與另一臺電腦通訊和傳輸資料外,空調變解調器連線還可以用來“模擬”DCE裝置的行為。這在本文系列中的一些討論中會特別重要,在那裡你可以嘗試編寫一些自己的序列通訊軟體。根據我個人的經驗,我不得不在很多情況下編寫這些“模擬器”,要麼是因為我要與之通訊的裝置還沒有完成,要麼是因為很難獲得該裝置的樣本,而我手頭只有通訊協議規範。
有時,你並不想與另一臺電腦通訊,而是想測試傳輸裝置本身。一種實用的方法是在終端裝置(例如帶有序列資料連線的PC)上新增一個“迴環”聯結器。這個聯結器沒有連線任何電纜,而是將傳輸線迴路到接收線。這樣,你就可以模擬資料傳輸和接收。一般來說,這只是為了測試裝置,但也可以用來測試軟體元件。當使用這種型別的聯結器時,你會收到你傳輸的每個位元組。如果你將傳輸子例程與資料捕獲子例程分離,它可以提供一個受控系統來測試你的應用程式。
當檢查裝置傳輸的序列資料變得非常困難時,有時能夠“快照”正在傳輸的資訊會很方便。這可以透過一種或多種協議分析器來實現。
所做的是修改電纜,允許第三臺電腦簡單地讀取正在傳輸的資料。有時通訊協議會變得非常複雜,以至於你需要看到整個交換過程,並且需要“即時”檢查它,而不是透過某種軟體偵錯程式。這樣做的另一個目的是檢查資料交換,以用於反向工程,如果你試圖發現一塊裝置的工作原理。通常,儘管有書面規範,但實際上傳輸資料時發生的事情的實際實現方式與最初計劃的可能會有很大不同。基本上,這是一個用於開發序列通訊協議和軟體的強大工具,不應該被忽視。
有一些連線協議分析器的常用方法,將在下面討論。
監控和分析序列埠資料的最便捷工具之一是RS232協議分析器。該軟體允許擷取所有序列控制程式碼並記錄有關它們的詳細資訊。捕獲的資料可以在四種不同的檢視中同時檢視,即表格、行、轉儲或終端模式,每個顯示都提供了一種獨特的表示RS232分析器捕獲資料的形式。
Y型“電纜”不僅僅是一些電纜,還包含電子元件——假設它不是劣質電纜。它應該放置在序列線之間,並在第三個聯結器上映象所有訊號。然後,這個第三個聯結器可以連線到協議分析器(例如帶有某種顯示軟體的PC)。
+-----+ serial +---------+ serial +-----+
| DTE |----------| Y Cable |----------| DCE |
+-----+ +---------+ +-----+
|
|
+----------+
| Analyzer |
+----------+
建議不要使用無源Y型電纜。這種電纜會使DTE和DCE的傳送器過載,這可能導致傳送器損壞。RS-233標準要求傳送器能夠承受短路。然而,現代的高度整合的裝置可能不再符合該標準的這一特定方面。
通常,連線到分析器的線路也是一條序列線路,而分析器是帶有序列介面和某種顯示軟體的PC。這種簡單的Y型電纜解決方案的缺點是它只支援半雙工通訊。也就是說,一次只有一個站點(DTE或DCE)可以說話。原因是來自DTE和DCE的兩個TX線被合併成一條連線到分析器的TX線。如果DTE和DCE同時傳送,它們的訊號會在連線到分析器的第三條線上混合,而分析器可能根本看不到任何可解碼的訊號。
請參閱http://www.mmvisual.de/fbintermdspy.htm,瞭解有關Y型電纜的一些簡單電路的示例。
更高階的Y型電纜解決方案將來自DTE和DCE的TX資料分別提供給分析器。這種分析器能夠顯示全雙工通訊。先進的專業系統不僅顯示解碼的數字資訊,還監控模擬訊號電平和時序。
在這種情況下,分析器位於DTE和DCE之間。它基本上是一些裝置(例如PC),帶有兩個序列介面。分析器將來自每個站點的每個訊號映象到另一個站點,並顯示流量。
+-----+ serial +----------+ serial +-----+ | DTE |----------| Analyzer |----------| DCE | +-----+ +----------+ +-----+
原則上,這種分析器的簡單版本可以使用任何帶有兩個序列介面的PC構建。所需要的只是一些軟體,這並不難編寫。但是,這種裝置會缺少一個方便的功能。專業分析器能夠自動檢測序列通訊的速度。自制解決方案需要配置為匹配序列通訊的速度。專業裝置也經過最佳化,以確保電路中的延遲最小。此外,簡單的自制基於PC的分析器不能用於分析因訊號電壓電平問題造成的故障。然而,任何型別的協議分析器都比沒有好。即使是最簡單的分析器也很有用。
請參閱設定開發環境(用於調變解調器開發),獲取更多資訊。

RS232分解盒(BOB)是一個相當精巧的硬體,通常將許多功能組合在一起。它基本上由兩個RS232聯結器和一個接線板(或開關)組成,該接線板(或開關)允許更改聯結器之間的佈線。接線板和一小段電線比單獨使用(DIP)開關更可取,因為接線板允許訪問訊號以用於其他目的。
如果某個裝置的引腳分配(DTE/DCE)未知,則分解盒非常有用。接線板允許快速更改佈線,從直連到空調變解調器連線,或設定迴環連線。
由於補丁欄位提供對所有訊號的訪問,因此它也允許使用分線盒連線 協議分析儀 或示波器。更好的分線盒還提供一些訊號電平資訊,透過帶有 LED 來指示訊號電壓。此資訊在試圖識別未知引腳排列時非常有用。高階 BOB 包含用於測量接地電位差的電路和脈衝陷阱電路,用於查詢訊號毛刺。
市售的分線盒有多種型別。也可以用電路板上少量簡單的零件來構建一個有用的 BOB。補丁欄位可以使用 DIL IC 插座製作,如果使用雙色雙針 LED(三針 LED 不行),則 LED 的佈線很簡單。每個訊號線應該透過這樣的 LED 和一個 680 歐姆電阻與 GND(訊號接地)串聯連線。自制分線盒配有幾個 RS232 聯結器,可能還有一個用於連線協議分析儀的聯結器,以及一些簡單的金屬或塑膠外殼。
另一個用於開發和測試序列應用程式和裝置的巧妙硬體和/或軟體是字元序列發生器。這樣的發生器會產生重複的序列線路資料序列。例如,這樣的發生器可能會在無休止的迴圈中重複著名的“The quick brown fox…”句子。另一個常見的測試序列是生成從 0x00 到 0xFF 的所有 8 位程式碼,並在迴圈中重複。這樣的迴圈包含所有 7 位 ASCII 和 8 位 ISO Latin 1 字元,加上前 32 個不可列印的控制字元,例如可以揭示解碼錯誤或傳輸錯誤。同樣非常常見的是調變解調器測試序列,它使用通用調變解調器命令(Serial Programming:Modems and AT Commands)來建立調變解調器連線,傳送一些資料並在迴圈中拆除調變解調器連線。
商用硬體字元發生器提供了大量附加功能,通常與協議分析儀結合使用。因此,它們相當昂貴。但是,就像 BOB 一樣,可以以少量現金構建一個有用的 DIY 字元序列發生器。這可以透過普通計算機上的軟體來實現(一些簡單的無休止的軟體迴圈將相同的資料反覆傳送到序列介面),或者透過少量廉價的電子元件來實現。一些小型獨立硬體在現場和開發過程中進行快速測試時,通常比例如配備某些軟體的 PC 或筆記型電腦更方便。
一個簡單的經典硬體字元發生器基本上由一個波特率發生器、一個 UART(Serial Programming:8250 UART Programming)、一個(E)EPROM、一個二進位制計數器和一個線路驅動器(Serial Programming:MAX232 Driver Receiver)組成。通常,這些元件中的每一個都是一個簡單的單個 IC。(E)EPROM 應該包含字元序列。波特率發生器驅動 UART 和二進位制計數器。二進位制計數器驅動(E)EPROM 的地址線。結果是字元序列在(E)EPROM 的資料線上產生。這些資料線被饋送到 UART 的輸入端。UART 的輸出端連線到序列線路驅動器。所有這些都可以很容易地安裝在一個簡單外殼中的小型原型板上。
一個更現代的硬體字元發生器可以圍繞這些小型微控制器之一(例如,Atmel AVR)構建。這特別容易,因為這些微控制器已經包含序列介面,只需要一些序列程式設計 - 這是 這本書 的主題。
如果你想進行一個通用的 RS-232 連線,你可以取一堆長線,並將它們直接焊接到你正在使用的裝置的電子電路板上,但這往往會造成很大的混亂,而且這些焊接連線往往會斷裂,並可能出現其他問題。為了解決這些問題,並使裝置的安裝或拆卸更容易,一些標準聯結器被開發出來,這些聯結器通常出現在大多數使用 RS-232 標準的裝置上。
這些聯結器有兩種形式:公頭聯結器和母頭聯結器。母頭聯結器有孔,可以讓公頭聯結器上的插腳插入聯結器中。
這是一個母頭 DE9 聯結器(不正確地稱為“DB-9”聯結器,正確地稱為 DE9F)。
母頭 DE-9 聯結器通常用作插入典型 PC 的“插頭”。如果在計算機背面看到這樣的聯結器,它很可能不是用於序列通訊,而是用於早期 VGA 或 CGA 監視器(不是 SVGA)或一些特殊的控制/操縱桿裝置。
這是一個公頭“DE-9”聯結器(正確地稱為 DE9M)。
這是你更有可能在“通用”PC 上看到用於序列通訊的聯結器。通常你會看到兩個並排在一起(用於 COM1 和 COM2)。你可能要與之通訊的特殊裝置將擁有任一聯結器,甚至可能是下面列出的 DB-25 聯結器之一。
這是一個母頭 DB-25 聯結器(也稱為 DB25S)。
這個 DB25S 是你在 IBM 相容 PC 上通常用作並行(印表機)埠的聯結器。它還在較舊的 PC 上的調變解調器電纜的計算機端,這些 PC 具有 25 針序列埠聯結器。這種聯結器型別也經常用於符合 RS-232 序列資料通訊的裝置,因此不要總是假設如果你看到這樣的聯結器,它就總是並行埠。在最初的 RS-232 規範編寫時,這就是預期使用的聯結器型別,但由於許多插腳很少使用,甚至根本不使用,因此 IBM 相容 PC 的序列埠後來切換到 DE-9 DE9S 聯結器,它承載著與原始 IBM-PC 上的 DB 聯結器相同的必要訊號。(是的,對於這個標準來說,這是一種相對較新的裝置。)
這是一個公頭 DB-25P 聯結器(也稱為 DB25P)。
公頭 DB-25 聯結器通常用於 PC 印表機電纜的一端,用於並行資料通訊,這超出了本系列文章的範圍。DB25P 也用於外部調變解調器電纜的調變解調器端。你應該知道,此聯結器也用於許多不同型別裝置上的序列通訊,使用許多不同型別的通訊協議。事實上,如果你有一個隨機的裝置,你想看看它的工作原理,你可以假設它是一個序列裝置。破解隨機聯結器也超出了本文件的範圍,但它本身可能是一個有趣的愛好。
這是一個公頭迷你立體聲插頭聯結器。
一些數碼相機和計算器附帶一條電纜,電纜的一端有一個迷你立體聲插頭聯結器,插到相機上,另一端有一個 DE-9 聯結器,插到 PC 上。
這是一個糟糕的聯結器,因為它在插拔時會短路部分電路。
“PicAXE”系統使用 [1]
- 1:基環:接地(DE9 的第 5 針)
- 2:中環:從 PicAXE 到 PC 序列輸入的序列輸出(DE9 的第 2 針)
- 3:插頭尖端:從 PC 到 PicAXE 序列輸入的序列輸出(DE9 的第 3 針)
“LANC”系統通常使用 2.5 毫米立體聲插孔:[2][3] [4] [5] [6] [7][8]
- 基環:接地
- 中環:來自相機的 +5 到 +8 VDC
- 尖端:通常透過電阻器拉高到 +5 V(空閒;邏輯 1);拉低(起始位和邏輯 0)以傳送命令或狀態。(開漏)。通常遙控器傳送前 2 個位元組的命令。相機回覆 6 個位元組的狀態。
LANC 使用 9600 bit/s 序列。
RS-232D 定義了一個比 DE-9 插頭小得多的標準聯結器。[9].
(RJ45 模組化插孔上的 RS-232 也稱為“EIA/TIA - 561”)
RS-232 的 TX、RX、GND 連線到 RJ11 聯結器的 4 個針腳是否有標準?
- 陸瀚·莫納特 使用 DE9-5 ---> RJ11-1; DE9-3 ---> RJ11-2; DE9-2 ---> RJ11-3。(RJ11-2 和 RJ11-3 是“內對”)。
- 保羅·坎貝爾 說:“我把 GND 連線到黃線,TXD 連線到黑線,RXD 連線到紅線。”
- 羅素·麥克馬洪 提到了幾種將 RS-232 連線到 RJ11 聯結器的 4 個針腳或 RJ45 聯結器的 8 個針腳的“標準”。
RS-232 裝置的連線首先要確定實際使用的針腳。
還要注意,在“PC COMx 埠上下文”一端,一些訊號是“輸入”,而另一些訊號是“輸出”,而在“調變解調器上下文”中,相同訊號名稱現在變成“輸出”,而之前是“輸入”,反之亦然。這就是多年來產生許多混亂的原因,因為“輸入”或“輸出”的本質在大多數有關該主題的圖表中沒有註明,但在現實世界中,兩個“輸出”引腳很少能在 RS-232 相關的 ±[3–10] V 東西中和諧工作,其中 -3 V 到 +3 V 的範圍不是真正的“高”或“低”,除了可能使驅動器向其不希望的燒燬方向傾斜。
以下是如何對 母 DE-9 聯結器進行編號(注意,計算機上的聯結器通常是 公 聯結器,因此與下圖相比是映象的)
如果數字難以辨認,從右上角開始為“1”,向左一直到行尾,然後從下一行開始為引腳 6,直到到達左下角的引腳 9。“頂部”定義為有 5 個引腳的行。
以下是每個引腳在 PC COMx 端的定義
| 9 針 | 25 針 | 引腳定義 | 方向(PC 檢視) |
|---|---|---|---|
| 1 | 8 | DCD(資料載波檢測) | 輸入 |
| 2 | 3 | RX(接收資料) | 輸入 |
| 3 | 2 | TX(傳送資料) | 輸出 |
| 4 | 20 | DTR(資料終端就緒) | 輸出 |
| 5 | 7 | GND(訊號地) | - |
| 6 | 6 | DSR(資料設定就緒) | 輸入 |
| 7 | 4 | RTS(請求傳送) | 輸出 |
| 8 | 5 | CTS(允許傳送) | 輸入 |
| 9 | 22 | RI(振鈴指示器) | 輸入 |
在討論這些引腳及其含義時,需要注意的是,它們與調變解調器和調變解調器協議密切相關。
在互連任何序列埠時,應注意,無論情況如何,都應始終遵循以下原則:通常情況下,只有一個 <輸出> 應該連線到一個或多個 <輸入>。此外,需要注意的是,COMx 端的訊號名稱通常與調變解調器端 <in>-<out> 的本質相反,即使它們具有相同的助記符名稱。
通常,您沒有在迴圈中連線調變解調器,但您仍然從理論上將裝置視為調變解調器。至少,這樣您至少可以以某種方式使 <輸出> 連線到每個 <輸入>,並且沒有兩個 <輸出> 衝突,或者沒有一個“浮動” <輸入> 連線到任何 <輸出>。
以下是對每種訊號功能在一般意義上的更正式的解釋
這是一個來自通訊裝置 (DCE) 的訊號,指示電話線仍“連線”並且從另一端的調變解調器接收載波訊號。據推測,編寫良好的軟體或序列裝置可以從此邏輯狀態檢測到電話線何時在另一端“結束通話”。零調變解調器通常將 DCD 連線到兩端的 DTR,因為沒有載波訊號參與。
輸入以接收來自另一個發射機的資料。
RX 的反向,這是終端裝置 (DTE) 使用接收器期望的相同格式和協議傳送序列資料的地方。有關更確切的協議,請參見下文。與 RX 一樣,在設計將使用此引腳的裝置時,請考慮“終端傳送”。
基本上是來自 DTE 的訊號,表示“你好!,如果可以,我已準備好”。這是一個通用指示器,告訴 DCE 終端已準備好開始傳送和接收資料。如果通訊裝置需要進行一些初始化,那麼這是終端裝置“啟動”接收裝置的一種方式。在零調變解調器設定中,此訊號通常連線到 DCD,因此裝置向自身發出訊號,表明已檢測到(虛擬)載波,表明傳輸線已啟動。
這是一個有趣的引腳。它所做的是嘗試在正在連線的裝置之間建立一個公共“地”參考,以比較其他訊號的電壓。通常這件好事,因為有時不同的裝置有不同的電源並且相距很遠。此電線不太令人愉快的地方是,它通常是一段可以導電的物理銅線,而這些電線通常不應該沿著電線流動,例如短路,或者更糟的是閃電(對於這種裝置,這種情況比您通常認為的要頻繁得多)。這可能會燒燬 DCE 和 DTE。光纖轉換器和接地隔離器等裝置可以幫助防止這種情況發生,但仍然是需要擔心的事情。在短距離內,這通常不是問題。
這是通訊裝置(或序列線上的計算機外設)對 DTR 的對應訊號。當 DTR 被髮送為訊號時,通訊裝置應將此訊號更改為邏輯“1”,表示它已準備好通訊。如果 DCE 在 DTR 被髮出訊號時經歷“啟動”序列,它應該在完成之前不要發出 DSR 訊號。但是,許多聯結器將此引腳“硬連線”直接連線到兩端的 DTR 引腳,以減少電纜中所需的電線數量。這對於使用現有電話線連線裝置很有用,但會阻止應用程式使用 DTR 和 DSR 進行握手。
將 RTS 訊號設定為 邏輯“1” 表示告訴 DCE DTE 想向它傳送資料。將 RTS 訊號重置為 邏輯“0” 表示告訴 DCE DTE 沒有更多資料要傳送。
這是 DCE 關於終端裝置是否應該傳送任何資料的響應訊號。當此訊號處於 邏輯“1” 時,終端“允許”傳送資料。與 DTR/DSR 引腳一樣,此引腳可以直接連線到 RTS 引腳以減少所需的電線數量,但這會消除硬體流控制的可能性。一些軟體會忽略此引腳和 RTS 引腳,因此也會使用其他流控制系統。當我們進入實際軟體時,這將得到解釋。
再次回到電話調變解調器,這是一個指示電話“振鈴”的訊號。通常,即使在真正的電話調變解調器上,此訊號也只偶爾設定為 -15 V。基本上,當您通常會在電話上聽到“振鈴”時,此引腳會發出訊號。在零調變解調器上,此電線通常甚至沒有連線到任何東西。如果您真的連線到真正的調變解調器,這確實有一些強大的用途,儘管還有其他方法可以讓終端裝置(例如連線到外部調變解調器的 PC)透過資料引腳接收此資訊。這將在軟體部分簡要介紹。
DB-25 有一些 DE-9 通常不使用的引腳,例如輔助傳送和接收引腳,用於這些備用引腳的輔助 CTS/RTS,-15 V 電源訊號,時鐘,以及其他一些好主意。實現所有這些引腳的問題是您還需要執行獨立的電線,並且完整的 DB-25 聯結器集也意味著在 DTE 和 DCE 之間有 25 根物理電線貫穿整個距離。如果距離超過一英尺左右,就會變得很麻煩,特別是如果您要穿過牆壁或在更永久的環境中。如果線束中不小心剪斷了錯誤的線,則整個線束都必須重新穿線,或者您必須像老式電話線修理工一樣進行電線測試,才能修復電話配電箱。通常,只有三根物理銅線用於連線 DTE 到 DCE,即 RX、TX 和 GND。其餘的可以在聯結器端輕鬆“偽造”,這足以滿足大多數軟體和硬體應用程式的需求。
波特率和 BPS(每秒位元數)通常並不相同,儘管它們經常被互換使用,尤其是在營銷文獻中。確定特定裝置的實際資料速率有幾種方法,但在流行的營銷文獻中,甚至是一般的參考文字中,它們幾乎總是會提到“波特率”,即使它們指的是每秒位元數。
波特率是指調製訊號中每秒傳輸介質變化的次數。如果每個傳輸事件包含多個資訊位,那麼波特率和 BPS 就不一樣了。例如,如果每個事件包含兩個位(兩個位在事件中被調製),那麼這種傳輸的 BPS 將是波特率的兩倍。這不是一個理論情況。典型的“高速”調變解調器在電話線上使用複雜的調製,其中位元率和波特率在電話線上有很大差異。在為特定協議構建測量裝置、解碼器(解調器)、編碼器(調製器)和各種傳輸裝置時,瞭解這一點很重要。
然而,軟體開發人員通常喜歡忽略位元率和波特率之間的區別,因為一位可以是真或假 - 一個“事件”(一位)總是隻有兩種可能的狀態。它們沒有可以容納例如四個不同狀態的基本單位。換句話說,在軟體端,調製已經被解調器展平了。如果使用了可以例如在一個事件中傳輸 8 位的調製,軟體開發人員已經看到它們是一系列 8 個連續的位,每個位都是真或假。解調器負責處理這個。當它收到一個事件時,它會將單個 8 位事件轉換為八個單個位事件。軟體開發人員看不到具有 256 種不同狀態(電壓、相位)的原始單個實體。由於調製已被展平,他們不再體驗波特率和位元率之間的區別。這不是定義波特率或 BPS 的人的錯。這只是數字計算機硬體的一個(受歡迎的)限制。
波特率實際上是一個縮短的術語,是為了紀念埃米爾·鮑多,他是早期電傳打字機機器的法國發明家,這些機器用莫爾斯電碼取代了電報鍵。基本上是兩臺可以連線在一起的打字機,透過一些電線連線在一起。他提出了第一個數字字元編碼方案,並且這些字元程式碼透過序列資料連線傳輸。請記住,這在計算機發明之前就已經在很大程度上實現了。事實上,一些早期的電傳打字機裝置連線到像 ENIAC 或 UNIVAC 這樣的第一臺計算機,僅僅是因為它們相對便宜並且當時已經大量生產。
為了使序列資料通訊發生,您需要就時鐘訊號或波特率達成一致,以便所有內容都能被正確傳輸和接收。這就是語言純粹主義者參與的地方,因為正是這個時鐘訊號實際上驅動了“波特率”。讓我們從埃米爾·鮑多的電傳打字機開始,從更開始的地方解釋波特率。
埃米爾的早期電傳打字機使用 5 個數據位和 1 個停止位來傳輸一個字元。我們將在第二部分介紹格式問題,但重要的是,六個訊號以某種方式透過電線傳送,這將表明正在傳輸一個字元。通常,裝置被設計成以 50 波特的速度執行,或者換句話說,裝置每秒傳輸或接收一個“位”資料。法國電力系統也恰巧使用 50 赫茲的交流系統,因此這很容易被用來確定何時應該傳輸一個新字元。
電傳打字機不斷發展,最終西聯公司在世界各地傳送電傳打字機“電報”。如果您聽說過 TELEX 號碼,那麼這就是這個系統的遺蹟,即使在網際網路時代,它仍然在使用。快速概述一大堆有趣的歷史,您最終會看到美國司法部 (DOJ) 起訴 AT&T。請注意,這是 1982 年著名的/臭名昭著的和解之前的一起反壟斷訴訟。這之所以重要,是因為 DOJ 堅持認為西聯公司獲得了所有數字業務(電報... 不幸的是,這也意味著計算機裝置),而 AT&T 獲得了調製頻率,或者換句話說,您可以在他們的裝置上給媽媽打電話過母親節。當計算機在 1950 年代被製造出來時,人們希望有一種方法將不同的計算機裝置連線在一起,以便相互“通訊”。這最終導致了我們在本頁討論的 RS-232 標準。
雖然西聯公司被允許傳輸數字流量,但連線通常不在或不靠近計算機中心。此時,AT&T 在反壟斷和解中發現了一個漏洞,可以幫助他們進入作為計算機資料“運營商”的業務。他們還提供以比西聯公司收費低得多的價格傳輸計算機資料。因此,調變解調器誕生了。
調變解調器的長描述是“調變解調器”,這個描述很重要。由於 AT&T 只能傳輸“音調”,比如來自廣播網路的音樂或您母親的聲音,他們建立了一種裝置,可以電子方式建立可以傳輸到其網路上的“音樂”或“音調”。然後,他們會將計算機“1”或“0”調製為一個頻率,比如 2600 赫茲。(確切的音調根據波特率和其他因素而有所不同,但這裡有確切的頻率規格。)匹配的裝置能夠在“音樂”中查詢該“音符”或“音調”,並能夠將其轉換回計算機“1”或“0”,或者換句話說,對音樂進行解調。由於您和您的夥伴在電話兩端只是相互播放音樂,因此 AT&T 在其網路上播放這種音樂是合法的。儘管西聯公司提出了反對意見,但只有計算機才能理解這種音樂,這一點無關緊要,而且 DOJ 對整個做法視而不見。
您可以租用的原始調變解調器是 AT&T Bell 103 調變解調器。這些笨重的盒子大約有一個鞋盒大小,外邊有一堆開關,還有一個連線到您正在使用的計算機裝置的 RS-232 電纜。這些盒子是為老式手柄電話設計的,上面有一些橡膠片可以繞著電話的“揚聲器”和“麥克風”部分(當時沒有與電話裝置的直接銅線連線)。如果您想撥打電話,您必須使用電話本身的轉盤... 計算機無法訪問這種裝置。請記住,FCC 對與電話裝置有關的幾乎所有事情都進行了監管,而 AT&T 擁有與電話有關的一切。您甚至必須從 AT&T 處“租用”調變解調器,並且租金費用包含在您的每月電話費中。
Bell 103 最初是 110 波特,儘管它最終有一個開關可以“提高”到 220 波特。在整個 1960 年代和 1970 年代,300 波特調變解調器也相當普遍。請記住,AT&T(或您的當地電話公司)是您唯一可以租用調變解調器的公司,無論您是否需要。到 1982 年,調變解調器被廣泛使用,POTS 電話網路非常普及,因此這種透過電話傳送“音樂”的系統得以保留,儘管這樣做的法律原因已不再有效。隨著 ISDN 和 DSL 線路的出現,情況不再是這樣,電話公司現在傳送的是純數字訊號。這也是 DSL 線路能夠傳輸比普通電話線多得多的資料的原因,儘管進入您家的銅線對還是一樣的。
當調變解調器開始以非常高的速度執行時,它們遇到了某種程度的障礙。早在 20 世紀 50 年代就決定,電話裝置只需要傳輸大約 10kHz 的音調訊號。對於正常的語音通話,這已經足夠了,你甚至可以透過電話辨別出男人和女人的聲音。問題在於,這意味著你可以在家庭電話網路上傳輸的最高正常“波特率”大約為 9600 波特,通常約為 4800 波特,因為電話裝置本身會在你從一個音調切換到另一個音調時丟棄“位”。不進行復雜的數學運算,你需要至少有一個完整的“聲波”才能區分不同的音調或音符。然而,調變解調器製造商確實想到了另一種方法來克服這種限制。與其一次只發送一個音調,不如演奏一個完整的“和絃”,或同時演奏幾個不同的音調。最後回到波特率與每秒位數。在更高的速度下,你不再僅僅傳送一位,而是同時使用不同的“音樂”和絃傳送兩位或多達十六位。這就是即使 56K BPS 調變解調器仍然只以 9600 波特傳輸,卻能達到這種速度的原因。
有關調變解調器的更多資訊,請參閱 序列程式設計:調變解調器和 AT 命令。
在 RS-232 標準中,使用了四組傳輸位。這些位在 RS-232 資料流中的位置是區分各個位的唯一依據。這也是序列通訊真正接觸“金屬”的地方,因為每個位都以順序或序列方式跟隨。所有其他線、引腳、波特率以及其他一切都是為了確保這些位能夠被理解。請記住,此時整個協議都是基於單個字元的傳輸。可以傳送多個字元,但它們是單個字元傳輸事件的序列。字元之間的關係取決於軟體在下一層協議“層”上對資料的處理方式。
當傳輸線沒有傳送任何東西時,它將保持在“1”的邏輯狀態,或者在導線上保持 -15V。當你想傳送一個字元時,你首先將電壓更改為 +15V,表示“0”的邏輯狀態。每個後續位都基於為每個裝置之間的通訊建立的波特率。此位表示接收裝置應該開始掃描後續位以形成字元。
這是序列通訊的主要目的,資料實際上傳輸的地方。這裡的位數變化很大,儘管在目前的實踐中,傳輸的位數通常為八位。最初是五位,這對於早期電傳打字機來說已經足夠了,它們只需要用來生成字母和一些特殊字元。這對於網際網路協議也有影響,因為早期的電子郵件系統在透過一些 RS-232 連結連線時只用七位傳輸。這是因為早期的字元編碼方案(主要是 ASCII)只用了七位來編碼英語中常用的所有字元。因為計算機元件在 2 的冪次方(2、4、8、16、32 等)上工作得最好,所以八位成為更常用的單個字元資料儲存單元。Unicode 和其他編碼方案將這一概念推廣到英語以外的其他語言,但八位仍然是傳輸資料的非常常見的單位,也是當今 RS-232 裝置最常見的設定。
在這個位序列中,最低有效位 (LSB) 是第一個被傳輸的,以形成一個字元。
為了幫助對傳輸的字元進行有限的錯誤檢查,引入了奇偶校驗位。奇偶校驗可以檢測到一些傳輸錯誤,但不能糾正。奇偶校驗位的取值取決於資料位串中設定為“1”的位數。
需要考慮四種不同的奇偶校驗配置。
當位數的總和最終得到一個奇數(例如,序列 01110101),則此位將被設定為“0”的邏輯狀態。
它使用的是試圖確定是否有偶數個位設定為“1”的公式。在這方面,它是奇校驗的完全相反狀態。例如,對於一個有七位的幀,其中有奇數個 1,奇偶校驗位將被設定為 1。所以實際上,包括奇偶校驗在內的整個位元組必須有偶數個 1 才能實現偶校驗。
使用此概念,傳輸協議實際上完全忽略了奇偶校驗位。相反,傳輸配置在應該傳送奇偶校驗位的地方傳送了一個邏輯“1”,無論該序列應該具有奇數個 1 還是偶數個 1。此配置模式對於可能希望測試接收裝置中的奇偶校驗檢查軟體或韌體的裝置很有用。
與標記校驗相反,它在奇偶校驗校驗和處傳送一個邏輯“0”。同樣,對於裝置診斷非常有用。
這實際上不是一個奇偶校驗公式,而是一種承認奇偶校驗實際上並不起作用的認可,因此裝置甚至不檢查它。這意味著奇偶校驗位甚至不會被使用。這在某些情況下會導致總資料吞吐量略微增加。更多資訊請見下文。
這實際上不是一個位,而是一種協議,即在傳送完字元後,傳輸裝置將返回到“1”的邏輯狀態。RS-232 規範要求這種“1”的邏輯狀態至少保持一個完整的時鐘週期,表示字元傳輸已完成。有時協議會指定兩個停止位。這樣做的一個原因是,裝置使用的時鐘頻率可能略有不同,在傳輸數百或數千個字元的過程中,兩個不同裝置上的兩個時鐘之間的差異會導致預期的位發生輕微的偏移,從而導致錯誤。透過使用兩個停止位,傳輸速度會略微降低,但兩個裝置之間的時鐘訊號可以更好地協調。預期一個停止位的裝置可以接受傳送兩個停止位的裝置傳輸的資料。然而,反過來卻行不通。如果你在嘗試讓兩臺裝置以給定的波特率進行通訊時遇到問題,可以嘗試在發射器中新增第二個停止位。
我們討論了波特率與每秒位數。這裡,即使名義上的每秒位數與波特率相同,波特率作為正在傳輸的位數仍然是不正確的。透過新增起始位、停止位和奇偶校驗位,傳輸協議將增加開銷。所有數字傳輸協議都具有一定的開銷,所以這並不令人驚訝。當我們更多地涉及資料包和其他問題時,實際傳輸的資料量將進一步下降。
請記住,如果您使用 6 個數據位、2 個停止位和奇校驗進行傳輸,您實際上只傳輸了 6 個數據位和 4 個額外的資訊位。這意味著即使以 9600 波特率傳輸,您每秒也只傳輸 5,760 個數據位。這是一個很大的區別,而且這只是經過實際序列通訊通道後原始資料的位元數。更典型的 8 個數據位、1 個停止位、無奇偶校驗將在 9600 波特率下稍微好一些,其中有 8 個數據位,只有 2 個位用於開銷。這使得總吞吐量為每秒 7,680 個位元。好一些,但不能簡單地認為波特率指示將傳輸多少資料。
序列資料通訊透過一根電線進行的距離存在物理限制。當您在電線上施加電壓時,該電壓需要時間才能穿過電線,並且當您沿電線傳送“脈衝”並過快地改變電壓時,還會發生其他不穩定的情況。隨著電線變長和頻率(即波特率)增加,這個問題會變得更嚴重。此距離會根據多種因素而變化,包括所涉及的電線的厚度、電線上的射頻干擾、製造過程中電線的質量、安裝方式......例如,電線中是否存在迫使它發生急彎的“扭結”,以及最終的傳輸資料波特率。
此表假設一條相當筆直且均勻的電纜,這對於大多數低壓應用來說很典型(例如,不是使用 110 伏執行您的冰箱、烤麵包機和電視機的電源電路)。通常,類似於 CAT-5 電纜(也用於區域網或電話線)應該足以滿足此目的。
| 波特率 | 最大距離(英尺) | 最大距離(米) |
|---|---|---|
| 2400 | 3000 | 914.4 |
| 4800 | 1000 | 304.8 |
| 9600 | 500 | 152.4 |
| 19200 | 50 | 15.24 |
距離限制可以得到緩解。有一些“短距離調變解調器”可以將此距離擴充套件到幾英里的電纜。還有電話線或傳統調變解調器以及其他長距離通訊技術。還有其他方法可以處理這種情況下的資料,這些訊號可以轉換為典型家用計算機可以解釋的簡單 RS-232 資料格式。距離仍然可能是通訊的限制因素,儘管當您談論像卡西尼任務到土星的距離時,序列資料通訊涉及的問題不僅僅是由於電纜長度導致的資料丟失。是的,NASA/ESA 正在使用序列資料通訊將這些令人驚歎的影像傳回地球。
- RS-232 接線標準說明
- RS-232 連線型別說明
- 維基百科關於 RS-232 的文章
- RS-232 標準由 HW-Server 解釋
- 序列引腳分配(D25 和 D9 聯結器)(還包含有關 PC 中使用的 UART 的更多技術資訊)
- RS232 連線以及序列裝置的接線包含幾個圖表,其中包括一個顯示如何讓一臺 PC 監控另外兩臺 RS232 裝置之間的序列通訊的圖表。
- Lammert Bies,RS232 規範和標準 包含有關 RS-232 訊號的技術規範和有關奇偶校驗的更詳細的資訊。
- Tronisoft 的可列印 ASCII 序列埠備忘單
- jSSC 庫(Java 簡單序列聯結器)。在 Win32 和 Win64 下工作
序列程式設計: 介紹和OSI網路模型 -- RS-232接線和連線 -- 典型的RS232硬體配置 -- 8250 UART -- DOS -- MAX232驅動器/接收器系列 -- Windows中的TAPI通訊 -- Linux和Unix -- Java -- Hayes相容調變解調器和AT命令 -- 通用序列匯流排 (USB) -- 形成資料包 -- 錯誤糾正方法 -- 雙向通訊 -- 資料包恢復方法 -- 序列資料網路 -- 實際應用開發 -- IP over序列連線