1 / 50 RS232C - Standard transmisji szeregowej
  • RS232 to jeden z najstarszych i najbardziej rozpowszechnionych standardów transmisji szeregowej na świecie.
  • Zdefiniowany przez EIA (Electronic Industries Association) jako Recommended Standard 232.
  • Określa warstwę fizyczną - parametry elektryczne, mechaniczne i funkcjonalne interfejsu.
  • Przez dekady był podstawowym interfejsem komunikacyjnym komputerów osobistych.
  • Nawet dziś, mimo dominacji USB, pozostaje w powszechnym użyciu w przemyśle i sprzęcie pomiarowym.

Standard RS232, którego nazwa pochodzi od "Recommended Standard 232", został opracowany przez Electronic Industries Association (EIA) w 1960 roku. Jest to jeden z najdłużej utrzymujących się standardów w historii informatyki. Jego celem było ujednolicenie sposobu komunikacji między urządzeniami końcowymi (DTE), takimi jak komputery i terminale, a urządzeniami transmisyjnymi (DCE), takimi jak modemy. Standard definiuje nie tylko poziomy napięć, ale także znaczenie poszczególnych sygnałów, typ złącza i przypisanie pinów. Mimo że współczesne komputery rzadko są wyposażane w port RS232, standard ten wciąż jest niezastąpiony w automatyce przemysłowej, systemach pomiarowych i urządzeniach medycznych. Znajomość RS232 jest fundamentem do zrozumienia bardziej zaawansowanych standardów szeregowych, takich jak RS422 i RS485.

2 / 50 Geneza: od telegrafii do standardu 1962
  • Pierwsza wersja RS232 została opublikowana przez EIA w maju 1960 roku.
  • W październiku 1963 roku pojawiła się wersja RS232A z doprecyzowaniem złączy i napięć.
  • W październiku 1965 roku wydano RS232B - doprecyzowanie pojemności kabla i czasów sygnałów.
  • Najważniejsza wersja RS232C ukazała się w sierpniu 1969 roku i stała się standardem de facto.
  • W 1986 roku zastąpiony przez EIA-232-D, a w 1997 przez TIA-232-F (obowiązujący do dziś).
  • RS232C był standardem dla pierwszych komputerów osobistych IBM PC (1981).

Historia RS232 sięga lat 60. XX wieku, gdy przemysł telekomunikacyjny potrzebował ujednoliconego standardu łączenia terminali z modemami. Wczesne systemy komputerowe korzystały z dalekopisów i czytników kart perforowanych, które wymagały niezawodnego interfejsu komunikacyjnego. EIA (Electronic Industries Association) opublikowała pierwszą wersję standardu w 1960 roku, a w 1963 ukazała się rewizja RS232A. Kolejne rewizje - B w 1965 i C w 1969 - stopniowo udoskonalały specyfikację. Wersja C, która obniżyła napięcie do 12 Vpp i wprowadziła pojęcie DCE (Data Communication Equipment), okazała się przełomowa. Gdy IBM wprowadził w 1981 roku komputer PC z portem szeregowym zgodnym z RS232C, standard ten zyskał status powszechnie obowiązującego. W 1986 roku standard przemianowano na EIA-232-D, a następnie w 1997 na TIA-232-F, gdzie TIA (Telecommunications Industry Association) przejęła odpowiedzialność za jego utrzymanie.

3 / 50 Ewolucja standardu - oś czasu
  • 1960: RS232 - pierwsza wersja, podstawowa specyfikacja dla łączenia dalekopisów z modemami.
  • 1963: RS232A - doprecyzowanie typów złączy i zakresów napięć.
  • 1965: RS232B - zwiększenie dopuszczalnej pojemności kabla, obniżenie napięcia do 15 Vpp.
  • 1969: RS232C - najważniejsza wersja; obniżenie napięcia, wprowadzenie DCE, 25-pinowe złącze.
  • 1986: EIA-232-D - zgodność z CCITT V.24/V.28, dodanie testowych obwodów (local/remote loopback).
  • 1997: TIA-232-F - obecnie obowiązująca wersja, doprecyzowanie długości kabla.

Ewolucja standardu RS232 na przestrzeni ponad 60 lat pokazuje, jak dobrze zaprojektowany interfejs może przetrwać zmieniające się technologie. Każda rewizja wprowadzała ulepszenia, zachowując jednocześnie kompatybilność wsteczną. Wersja C z 1969 roku była przełomowa - obniżyła napięcie sygnałów z wcześniejszych 25V do ±12V, co pozwoliło na budowę tańszych i bezpieczniejszych układów nadawczo-odbiorczych. Standard EIA-232-D z 1986 roku dostosował amerykański standard do międzynarodowych norm CCITT V.24 (definicja funkcjonalna) i V.28 (charakterystyki elektryczne). Wprowadzono wówczas obwody testowe Local Loopback (LL) i Remote Loopback (RL) oraz sygnał Test Mode (TM). Ostatnia rewizja TIA-232-F z 1997 roku skoncentrowała się na doprecyzowaniu definicji maksymalnej długości kabla w zależności od prędkości transmisji. Współczesne implementacje RS232 rzadko korzystają z pełnego zestawu 25 sygnałów - dominują złącza DB9 zawierające najważniejsze linie.

4 / 50 Podstawy transmisji szeregowej
  • Transmisja szeregowa przesyła dane bit po bicie, kolejno, na jednej linii danych.
  • W przeciwieństwie do transmisji równoległej (np. port LPT) wymaga tylko jednej pary przewodów.
  • RS232 jest standardem asynchronicznym - nie przesyła osobnego sygnału zegara.
  • Zegar odtwarzany jest na podstawie prędkości transmisji (baud rate) i bitów synchronizacji.
  • Każda ramka danych zawiera bit startu, bity danych, opcjonalny bit parzystości i bit stopu.

Transmisja szeregowa różni się zasadniczo od równoległej - zamiast przesyłać 8 bitów jednocześnie na ośmiu liniach, dane są transmitowane kolejno na jednej linii. Wymaga to mniejszej liczby przewodów, co obniża koszty i upraszcza okablowanie, ale jest wolniejsze przy tej samej częstotliwości zegara. RS232 stosuje transmisję asynchroniczną, co oznacza, że nie ma osobnej linii zegara synchronizującego nadawcę i odbiorcę. Zamiast tego obie strony muszą być wcześniej skonfigurowane z tą samą prędkością transmisji. Synchronizacja na poziomie bajtu odbywa się za pomocą bitu startu (przejście ze stanu spoczynku MARK do stanu SPACE), a koniec bajtu sygnalizowany jest bitem (lub bitami) stopu. Taka metoda jest prosta i sprawdzona, ale wymaga precyzyjnego dostrojenia prędkości nadawcy i odbiorcy - tolerancja wynosi zazwyczaj około 2-5%. Mimo tej pozornej wady, transmisja asynchroniczna zdominowała łączność szeregową dzięki swojej prostocie i niskiemu kosztowi implementacji.

5 / 50 Poziomy napięć w RS232
  • RS232 używa sygnalizacji bipolarnej - napięcia dodatnie i ujemne względem masy.
  • Stan logiczny 0 (SPACE): napięcie od +3V do +15V (typowo +12V).
  • Stan logiczny 1 (MARK): napięcie od -3V do -15V (typowo -12V).
  • Obszar od -3V do +3V to strefa przejściowa - stan niezdefiniowany.
  • Dla linii sterujących (RTS, CTS, DTR) polaryzacja jest odwrotna: ON = dodatnie, OFF = ujemne.

Charakterystyka napięciowa RS232 znacząco odbiega od standardowych poziomów TTL (0V/5V) stosowanych w układach cyfrowych. Sygnały RS232 są bipolarne - wykorzystują zarówno napięcie dodatnie, jak i ujemne względem wspólnej masy (GND). Dla linii transmisji danych (TxD, RxD) stan MARK (binary 1) odpowiada napięciu ujemnemu w zakresie od -3V do -15V, a stan SPACE (binary 0) - dodatniemu od +3V do +15V. W typowych implementacjach stosuje się ±12V. Dla linii sterujących (RTS, CTS, DTR, DSR, DCD) logika jest odwrócona: stan aktywny (ON) to napięcie dodatnie, nieaktywny (OFF) - ujemne. Strefa napięć od -3V do +3V stanowi obszar przejściowy, w którym stan logiczny jest niezdefiniowany. To właśnie duży odstęp między poziomami (histereza 6V) zapewnia RS232 znaczną odporność na zakłócenia w porównaniu do logiki TTL. Standard dopuszcza maksymalne napięcie jałowe do ±25V.

6 / 50 Transmisja niesymetryczna (Single-Ended)
  • RS232 wykorzystuje transmisję niesymetryczną (single-ended) - napięcie mierzone względem masy.
  • Każdy sygnał wymaga tylko jednego przewodu sygnałowego + wspólnej masy (GND).
  • Zaletą jest prostota i mała liczba przewodów - minimum 3 (TxD, RxD, GND).
  • Wadą jest podatność na zakłócenia - szumy dodają się do sygnału względem masy.
  • Różnice potencjałów mas między urządzeniami ograniczają maksymalną długość kabla.

Transmisja niesymetryczna, zwana także Single-Ended lub unbalanced, jest najprostszą metodą przesyłania sygnału elektrycznego. W RS232 każda linia sygnałowa składa się z pojedynczego przewodu, a napięcie na nim mierzone jest względem wspólnej masy (GND). Oznacza to, że nadajnik zmienia potencjał na linii względem masy, a odbiornik mierzy to napięcie. Takie rozwiązanie jest tanie i proste w implementacji, ponieważ wymaga tylko jednego przewodu na sygnał. Jednak ma poważne wady: każdy szum elektromagnetyczny indukowany w przewodzie dodaje się do sygnału, a różnica potencjałów mas między nadajnikiem a odbiornikiem (ground offset) bezpośrednio wpływa na mierzone napięcie. W praktyce oznacza to, że przy dłuższych kablach różnica potencjałów mas może przekroczyć dopuszczalny margines i spowodować błędy transmisji. To właśnie jest głównym powodem ograniczenia długości kabla RS232 do około 15 metrów. Dla porównania, RS422 i RS485 używają transmisji różnicowej, która jest odporna na te problemy.

7 / 50 Złącze DB25 - pełny zestaw sygnałów
  • Standard RS232C definiuje 25-pinowe złącze D-Sub (DB25) dla pełnej implementacji.
  • Zawiera 20 obwodów sygnałowych: linie danych, sterujące, synchronizacji i testowe.
  • Pin 1: GND ochronna (Shield/Frame Ground).
  • Pin 2: TxD (Transmit Data) - dane z DTE do DCE.
  • Pin 3: RxD (Receive Data) - dane z DCE do DTE.
  • Pin 7: GND sygnałowa (Signal Ground) - masa odniesienia dla wszystkich sygnałów.

25-pinowe złącze DB25 (D-Subminiature 25) było pierwotnie wymagane przez standard RS232C, choć dopiero wersja D uczyniła je obowiązkowym. Pełna implementacja obejmuje 20 obwodów sygnałowych, w tym: linię danych pierwszego kanału (TxD, RxD), linie sterujące (RTS, CTS, DTR, DSR, DCD, RI), linie drugiego kanału (opcjonalne), linie synchronizacji (TxC, RxC), linie testowe (LL, RL, TM) oraz masy ochronną i sygnałową. W praktyce większość aplikacji wykorzystuje zaledwie 3-8 z tych sygnałów. Drugi kanał transmisyjny (oznaczony jako S - Secondary) był przewidziany dla dodatkowego łącza o niższej prędkości, ale rzadko bywa implementowany. Linie synchronizacji (Transmit Signal Element Timing, Receive Signal Element Timing) są używane w transmisji synchronicznej. W komputerach osobistych DB25 był często mylony z portem równoległym LPT, który używał identycznego złącza, ale z żeńską wtyczką zamiast męskiej. To prowadziło do licznych pomyłek w podłączaniu urządzeń.

8 / 50 Złącze DB9 - standardowy port COM
  • DB9 (DE-9) to 9-pinowe złącze, które stało się standardem w komputerach PC od lat 90.
  • Zawiera najważniejsze sygnały: TxD, RxD, RTS, CTS, DTR, DSR, DCD, RI i GND.
  • W komputerze PC port COM ma wtyk męski (DE-9M) - DTE.
  • Pin 2: RxD (Receive Data) - komputer odbiera dane.
  • Pin 3: TxD (Transmit Data) - komputer nadaje dane.
  • Pin 5: GND (Signal Ground) - masa sygnałowa.

Złącze DB9, formalnie oznaczone jako DE-9 (D-Subminiature z obudową E i 9 pinami), zostało wprowadzone przez IBM w komputerze PC/AT w 1984 roku. Ponieważ większość aplikacji nie potrzebowała wszystkich 25 sygnałów, producenci zaczęli stosować mniejsze i tańsze złącze 9-pinowe. Pinout DB9 w standardzie PC (DTE) jest następujący: pin 1 - DCD (Data Carrier Detect), pin 2 - RxD (Receive Data), pin 3 - TxD (Transmit Data), pin 4 - DTR (Data Terminal Ready), pin 5 - GND (Signal Ground), pin 6 - DSR (Data Set Ready), pin 7 - RTS (Request To Send), pin 8 - CTS (Clear To Send), pin 9 - RI (Ring Indicator). Należy pamiętać, że na komputerze złącze ma wtyk męski (DE-9M), podczas gdy na kablu modemu lub kablu przedłużaczu znajduje się wtyk żeński. Wiele urządzeń przemysłowych używa złącza żeńskiego, ponieważ są one konfigurowane jako DCE. Niezgodność pinoutu między DTE a DCE jest częstym źródłem problemów przy łączeniu urządzeń - stąd potrzeba stosowania kabli null-modem.

9 / 50 Funkcje sygnałów - dane i sterowanie
  • TxD (Transmit Data) - nadawanie danych z DTE do DCE.
  • RxD (Receive Data) - odbieranie danych z DCE przez DTE.
  • RTS (Request To Send) - DTE żąda zgody na nadawanie.
  • CTS (Clear To Send) - DCE potwierdza gotowość do odbioru.
  • DTR (Data Terminal Ready) - DTE sygnalizuje gotowość do komunikacji.
  • DSR (Data Set Ready) - DCE potwierdza gotowość (np. modem jest włączony).

Rozróżnienie między sygnałami danych i sterowania jest kluczowe dla zrozumienia RS232. Podstawowa komunikacja odbywa się na dwóch niezależnych liniach danych: TxD i RxD. Dzięki pełnemu dupleksowi urządzenie może jednocześnie nadawać i odbierać dane. Sygnały sterujące służą do zarządzania przepływem i negocjowania połączenia. Sekwencja typowej komunikacji z modemem wygląda następująco: 1) DTE podnosi DTR sygnalizując gotowość, 2) DCE odpowiada podnosząc DSR, 3) DTE podnosi RTS chcąc nadawać, 4) DCE podnosi CTS zezwalając na transmisję, 5) DTE nadaje dane na TxD, 6) DCE odbiera dane i przekazuje je dalej (np. przez linię telefoniczną). Dodatkowe sygnały to DCD (Data Carrier Detect) - informacja o wykryciu nośnej modemu zdalnego, oraz RI (Ring Indicator) - sygnalizacja przychodzącego połączenia. W prostych aplikacjach, gdzie nie ma modemu, wiele z tych sygnałów można zewrzeć lub zignorować.

10 / 50 DTE vs DCE - role w komunikacji
  • DTE (Data Terminal Equipment) - urządzenie końcowe: komputer, terminal, drukarka.
  • DCE (Data Circuit-terminating Equipment) - urządzenie transmisyjne: modem, konwerter.
  • DTE nadaje na pinie TxD (2 w DB9) i odbiera na pinie RxD (3 w DB9).
  • DCE odbiera na pinie TxD (2) i nadaje na pinie RxD (3) - krzyżowa zamiana.
  • Połączenie DTE-DCE wymaga kabla prostego (straight-through).
  • Połączenie DTE-DTE (lub DCE-DCE) wymaga kabla null-modem (krosowanego).

Rozróżnienie między DTE a DCE jest fundamentalne dla prawidłowego projektowania połączeń RS232. DTE (Data Terminal Equipment) to urządzenie będące źródłem lub odbiorcą danych - typowo komputer, terminal, drukarka czy sterownik PLC. DCE (Data Circuit-terminating Equipment) to urządzenie pośredniczące w transmisji - modem, konwerter protokołów, multiplexer. W standardzie RS232 przyjęto konwencję, że DTE używa pinu 2 jako TxD, a pinu 3 jako RxD. DCE ma odwrotnie: pin 2 to RxD, pin 3 to TxD. Dzięki temu kabel prosty (straight-through) łączący pin 2 z pinem 2 i pin 3 z pinem 3 poprawnie łączy wyjście DTE z wejściem DCE. Problem pojawia się przy łączeniu dwóch urządzeń DTE (np. dwóch komputerów) - wtedy trzeba skrosować linie: pin 2 jednego z pinem 3 drugiego. Taki kabel nazywa się null-modem. W praktyce wiele urządzeń przemysłowych nie przestrzega ściśle konwencji DTE/DCE, co wymaga sprawdzenia dokumentacji przed wykonaniem kabla. Coraz częściej stosuje się automatyzację wykrywania skrosowania (Auto-MDI/MDIX), choć w RS232 nie jest to standardem.

11 / 50 Format ramki transmisji asynchronicznej
  • W stanie spoczynku linia TxD/RxD znajduje się w stanie MARK (napięcie ujemne, logiczna 1).
  • Bit startu: przejście z MARK do SPACE (z 1 na 0) - synchronizuje odbiornik.
  • Bity danych: 5-9 bitów, najczęściej 7 lub 8, przesyłane od najmłodszego (LSB first).
  • Bit parzystości (opcjonalnie): even, odd, MARK, SPACE lub none.
  • Bit stopu: 1, 1.5 lub 2 bity w stanie MARK - odstęp między ramkami.

Format ramki asynchronicznej w RS232 jest kluczowym elementem umożliwiającym poprawną komunikację bez osobnej linii zegara. Każda ramka rozpoczyna się bitem startu (START) - przejściem z poziomu MARK (1) na SPACE (0). To zbocze sygnału synchronizuje wewnętrzny zegar odbiornika z nadawcą. Następnie przesyłane są bity danych - od najmłodszego (LSB, Least Significant Bit) do najstarszego (MSB). Typowe konfiguracje to 7 bitów (dla znaków ASCII) lub 8 bitów (dla danych binarnych). Po bitach danych może wystąpić opcjonalny bit parzystości (PARITY) służący do podstawowej detekcji błędów: even parity (parzysta liczba jedynek), odd parity (nieparzysta liczba jedynek), MARK parity (zawsze 1), SPACE parity (zawsze 0) lub brak (none). Ramka kończy się bitem stopu (STOP) w stanie MARK, który może mieć długość 1, 1.5 (dla 5-bitowych danych) lub 2 bitów. Typowe konfiguracje zapisuje się skrótem, np. 8N1 = 8 bitów danych, no parity, 1 bit stopu; 7E2 = 7 bitów danych, even parity, 2 bity stopu. Najpopularniejszą konfiguracją w nowoczesnych systemach jest 8N1.

12 / 50 Prędkość transmisji - baud rate i bit rate
  • Standard RS232 definiuje prędkość transmisji do 20 kbps (kilobitów na sekundę).
  • Współczesne implementacje osiągają 115,2 kbps, a nawet 230,4 kbps na krótkich dystansach.
  • Typowe prędkości: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 bps.
  • Baud rate (bod) to liczba zmian sygnału na sekundę - w RS232 baud rate = bit rate.
  • Efektywna prędkość transmisji danych jest niższa z powodu narzutu bitów ramki (start, stop, parity).

Prędkość transmisji w RS232 jest określana przez baud rate, który w tym standardzie jest równy bit rate (liczba bitów na sekundę), ponieważ każdy symbol koduje jeden bit. Standard TIA-232-F oficjalnie ogranicza prędkość do 20 kbps, ale współczesne układy scalone (MAX232, FT232) osiągają znacznie wyższe prędkości. W praktyce najczęściej spotyka się prędkość 9600 bps (standardowa dla urządzeń przemysłowych) oraz 115200 bps (maksymalna dla większości portów COM w komputerach PC). Przy wyższych prędkościach maleje maksymalna długość kabla. Przykładowo przy 9600 bps można osiągnąć 15 metrów, przy 115200 bps bezpieczna długość to około 3-5 metrów. Należy pamiętać, że narzut bitów startu, stopu i opcjonalnej parzystości zmniejsza rzeczywistą przepustowość. Dla konfiguracji 8N1 każdy bajt danych wymaga przesłania 10 bitów (1 start + 8 danych + 1 stop), więc przy 9600 bps maksymalna prędkość przesyłania danych to 960 bajtów na sekundę. Przy 7E1 każdy bajt wymaga 10 bitów (1+7+1+1) - również 960 B/s przy 9600 bps.

13 / 50 Długość kabla a jakość transmisji
  • Standard RS232C zaleca maksymalną długość kabla 15 metrów (50 stóp).
  • Głównym ograniczeniem jest pojemność kabla i różnica potencjałów mas.
  • Większa pojemność kabla spowalnia narastanie napięcia - zniekształca zbocza sygnału.
  • Różnica potencjałów mas między urządzeniami może przekroczyć dopuszczalny margines.
  • Na krótkich dystansach (< 3m) możliwe są wyższe prędkości, nawet do 230,4 kbps.

Ograniczenie długości kabla w RS232 wynika z fizycznych właściwości transmisji niesymetrycznej. Kabel transmisyjny ma swoją pojemność (wyrażaną w pF/m), która wraz z impedancją wyjściową nadajnika tworzy filtr dolnoprzepustowy. Im dłuższy kabel, tym większa pojemność i bardziej stłumione oraz spowolnione zbocza sygnału. Przy zbyt długim kablu sygnał może nie osiągnąć progu detekcji odbiornika (±3V) w wymaganym czasie, co prowadzi do błędów transmisji. Drugim czynnikiem jest różnica potencjałów mas (ground offset) między urządzeniami. Ponieważ RS232 mierzy napięcie względem masy, różnica potencjałów mas sumuje się z sygnałem. Przy różnicy 2V i sygnale o amplitudzie 5V, margines zakłóceń zmniejsza się niebezpiecznie.

W praktyce przemysłowej zaleca się stosowanie kabli o niskiej pojemności i unikanie prowadzenia kabli RS232 równolegle do linii energetycznych. Dla odległości powyżej 15 metrów konieczne jest zastosowanie konwerterów na RS422/RS485 lub przedłużaczy (line drivers).
14 / 50 Topologia punkt-punkt (Point-to-Point)
  • RS232 jest standardem wyłącznie do komunikacji punkt-punkt (jeden nadawca, jeden odbiorca).
  • Nie pozwala na łączenie więcej niż dwóch urządzeń na jednej magistrali.
  • Każde urządzenie wymaga osobnego portu RS232 w komputerze.
  • W praktyce ogranicza to skalowalność systemów opartych na RS232.
  • Do łączenia wielu urządzeń potrzebne są przełączniki (switch) lub konwertery na RS485.

Topologia punkt-punkt (point-to-point) jest podstawowym i jedynym obsługiwanym przez RS232 sposobem połączenia. Oznacza to, że w danej chwili do portu RS232 może być podłączone tylko jedno urządzenie. Wynika to z konstrukcji elektrycznej interfejsu - wyjścia nadajników RS232 nie mają stanu wysokiej impedancji (tri-state), które pozwalałoby na odłączanie ich od magistrali. Gdyby dwa nadajniki zostały podłączone do tej samej linii, jeden próbowałby ustawić napięcie +12V, a drugi -12V, co doprowadziłoby do zwarcia i potencjalnego uszkodzenia układów. W przeciwieństwie do RS485, gdzie transceivery mają wyjścia tri-state, RS232 tego nie oferuje.

W praktyce oznacza to, że komputer z jednym portem COM może komunikować się tylko z jednym urządzeniem zewnętrznym. Jeśli potrzebna jest komunikacja z wieloma urządzeniami, konieczne jest zastosowanie multipleksera portów, koncentratora szeregowego lub konwersji na RS485. Alternatywnie można zastosować kilka kart rozszerzeń z portami COM (PCIe RS232). W nowoczesnych systemach przemysłowych problem ten rozwiązuje się przez konwertery USB-RS232 (każdy dodaje osobny port COM).
15 / 50 Kontrola przepływu (Handshaking)
  • Kontrola przepływu zapobiega przepełnieniu bufora odbiornika.
  • Handshaking sprzętowy (RTS/CTS): DTE zgłasza gotowość sygnałem RTS, DCE odpowiada CTS.
  • Handshaking sprzętowy (DTR/DSR): DTE sygnalizuje ogólną gotowość przez DTR, DCE przez DSR.
  • Handshaking programowy (XON/XOFF): znaczniki 0x13 (XOFF) i 0x11 (XON) przesyłane w linii danych.
  • XON/XOFF jest prostszy, ale nie działa z danymi binarnymi (gdzie wystąpić mogą te wartości).

Kontrola przepływu (flow control) jest mechanizmem zapobiegającym utracie danych, gdy odbiornik nie nadąża z ich przetwarzaniem. RS232 oferuje dwie metody: sprzętową i programową. Handshaking sprzętowy RTS/CTS (Request To Send / Clear To Send) jest najczęściej stosowany. DTE podnosi sygnał RTS, gdy ma dane do wysłania i jego bufor odbiorczy jest gotowy na przyjęcie odpowiedzi. DCE odpowiada sygnałem CTS, gdy jest gotowe do odbioru. Jeśli bufor DCE się przepełnia, opuszcza CTS, a DTE wstrzymuje transmisję. Podobnie działa DTR/DSR - sygnalizują ogólną gotowość urządzeń do komunikacji. Handshaking programowy XON/XOFF używa dwóch znaków ASCII: XOFF (0x13, DC3) oznacza "wstrzymaj transmisję", a XON (0x11, DC1) oznacza "wznów transmisję". Zaletą jest brak dodatkowych linii sygnałowych, wadą - problemy z transmisją danych binarnych, które mogą zawierać te same wartości.

W praktyce przemysłowej preferuje się handshaking sprzętowy RTS/CTS jako bardziej niezawodny. W prostych aplikacjach (np. komunikacja z czujnikiem temperatury) często rezygnuje się z kontroli przepływu, zakładając, że dane mieszczą się w buforze.
16 / 50 Kabel Null-Modem
  • Kabel null-modem umożliwia bezpośrednie połączenie dwóch urządzeń DTE (np. dwóch komputerów).
  • Krzyżuje linie: TxD jednego z RxD drugiego i odwrotnie.
  • Kabel null-modem pełny (7-8 żył) krzyżuje również linie sterujące: RTS-CTS, DTR-DSR.
  • Kabel null-modem uproszczony (3 żyły) łączy tylko TxD, RxD i GND.
  • W uproszczonej wersji sygnały RTS/CTS/DTR często zwierane są lokalnie, by symulować gotowość.

Kabel null-modem (zwany też kablem krosowanym) jest niezbędny przy łączeniu dwóch urządzeń DTE bez pośrednictwa modemu. Nazwa pochodzi z czasów, gdy komputery łączono przez modemy - kabel null-modem "udawał" modem, stąd "null modem". W najprostszej wersji kabel null-modem krzyżuje tylko linie danych: TxD (pin 3 w DB9) jednego urządzenia łączy się z RxD (pin 2 w DB9) drugiego i odwrotnie. Linia GND (pin 5) jest łączona wprost. Wersja pełna dodatkowo krzyżuje linie sterujące: RTS jednego z CTS drugiego oraz DTR jednego z DSR drugiego. Niektóre implementacje krzyżują także DCD i RI. W uproszczonym kablu 3-żyłowym, gdy brak połączeń sygnałów sterujących, konieczne jest lokalne zworkowanie (loopback) - np. zewrzenie RTS z CTS i DTR z DSR na każdym złączu, aby urządzenie "wierzyło", że druga strona jest gotowa.

Współczesne programy terminalowe (PuTTY, HyperTerminal) i systemy operacyjne często pozwalają na wyłączenie kontroli przepływu, co eliminuje potrzebę zwierania sygnałów. Kable null-modem były powszechnie używane do bezpośredniego łączenia komputerów przez port LPT, do gier sieciowych i przesyłania plików przed erą Ethernetu.
17 / 50 Port COM w komputerach PC
  • IBM PC (1981) wprowadził port szeregowy RS232 jako wyposażenie opcjonalne na karcie rozszerzeń.
  • Port COM (Communications Port) używał układu UART 8250 i późniejszych 16550 z buforem FIFO.
  • Standardowe adresy: COM1 (0x3F8), COM2 (0x2F8), COM3 (0x3E8), COM4 (0x2E8).
  • IRQ: COM1 i COM3 dzielą IRQ 4, COM2 i COM4 dzielą IRQ 3.
  • Od lat 2010 porty COM znikają z płyt głównych - zastępowane przez USB.

Port COM (Communications Port) był podstawowym interfejsem komunikacji szeregowej w komputerach PC przez ponad 30 lat. Pierwszy IBM PC z 1981 roku oferował port RS232 jako opcjonalną kartę rozszerzeń, a od modelu PC/AT (1984) stał się elementem standardowego wyposażenia. Sercem portu COM był układ UART (Universal Asynchronous Receiver/Transmitter) - początkowo 8250, później 16450 (bez FIFO) i wreszcie 16550 (z 16-bajtowym buforem FIFO), który odciążył procesor od obsługi każdego bajtu. Porty COM były mapowane w przestrzeni I/O na adresach 0x3F8 (COM1), 0x2F8 (COM2), 0x3E8 (COM3) i 0x2E8 (COM4). Dwa pierwsze porty są obecne w systemie od zawsze, kolejne wymagają dodania kart rozszerzeń. W systemie Linux porty COM nazywane są /dev/ttyS0, /dev/ttyS1 itd.

Wraz z rozwojem USB i Ethernetu, producenci płyt głównych stopniowo eliminowali porty COM. Obecnie rzadko spotyka się je na płytach głównych konsumenckich, ale w płytach przemysłowych i embedded są wciąż standardem. W systemach bez fizycznego portu COM emulację zapewniają konwertery USB-RS232.
18 / 50 RS232 vs UART TTL - różnice
  • UART to układ cyfrowy realizujący transmisję szeregową na poziomie TTL (0V/3.3V lub 0V/5V).
  • RS232 to standard fizyczny określający poziomy napięć ±12V dla komunikacji na zewnątrz urządzenia.
  • Sygnały TTL: 0V = logiczne 0, 3.3V/5V = logiczne 1 (logika dodatnia).
  • Sygnały RS232: +12V = SPACE (logiczne 0), -12V = MARK (logiczne 1) - logika ujemna.
  • Do konwersji UART-RS232 stosuje się układy takie jak MAX232, który zawiera podwajacz napięcia.

Rozróżnienie między UART a RS232 jest jednym z najważniejszych dla zrozumienia komunikacji szeregowej. UART (Universal Asynchronous Receiver/Transmitter) jest blokiem funkcjonalnym w układzie scalonym (mikrokontrolerze, chipsecie), który realizuje asynchroniczną transmisję szeregową na poziomie logicznym. Jego sygnały TxD i RxD pracują w standardzie TTL/CMOS: 0V oznacza logiczne 0, a napięcie zasilania (3.3V lub 5V) oznacza logiczne 1. RS232 natomiast definiuje interfejs fizyczny do transmisji na zewnątrz urządzenia, z poziomami napięć ±12V i odwróconą logiką. Aby połączyć UART z portem RS232, konieczny jest konwerter poziomów. Najpopularniejszym układem jest MAX232 (lub jego nowsze warianty MAX3232 dla 3.3V), który zawiera wewnętrzny podwajacz napięcia (charge pump) do generowania ±12V z napięcia 5V. Układ ten jest tak popularny, że stał się standardem w aplikacjach embedded.

Bez konwersji podłączenie UART TTL bezpośrednio do portu RS232 grozi uszkodzeniem układów - napięcie ±12V przekracza dopuszczalne zakresy wejść TTL/CMOS. Wiele płytek deweloperskich (Arduino, ESP32) ma wbudowany konwerter USB-UART (np. CP2102, CH340G), który emuluje port COM przez USB, generując sygnały TTL, a nie RS232.
19 / 50 Konwertery USB-RS232
  • Konwertery USB-RS232 pozwalają dodać port COM do komputerów bez fizycznego złącza RS232.
  • Najpopularniejsze układy: FTDI FT232R, Prolific PL2303, Silicon Labs CP2102, CH340G.
  • Konwerter emuluje port COM w systemie operacyjnym jako wirtualny port szeregowy.
  • Większość konwerterów generuje prawdziwe poziomy RS232 (±5V do ±12V).
  • Niektóre tanie konwertery generują tylko sygnały TTL (0-3.3V) - nie są zgodne z RS232.

Konwertery USB-RS232 są niezbędnym narzędziem w erze, gdy komputery nie mają już fizycznych portów COM. Działają one poprzez emulację portu szeregowego w systemie operacyjnym - aplikacje "widzą" standardowy port COM (np. COM3 w Windows, /dev/ttyUSB0 w Linux), a konwerter zajmuje się translacją ramek USB na dane szeregowe. Najpopularniejszym i najbardziej niezawodnym układem jest FTDI FT232R brytyjskiej firmy Future Technology Devices International. Układy Prolific PL2303 są tańsze, ale często spotykane w podróbkach (system wyświetla ostrzeżenie "non-genuine chipset"). Silabs CP2102 oferuje zintegrowane rozwiązanie bez zewnętrznych pamięci konfiguracyjnych. CH340G to najtańsze, chińskie rozwiązanie, popularne w tanich konwerterach i płytkach Arduino.

Przy wyborze konwertera należy zwrócić uwagę na: zgodność z systemem operacyjnym (niektóre wymagają ręcznej instalacji sterowników), generowanie prawdziwych poziomów RS232 (a nie tylko TTL), oraz wsparcie dla wyższych prędkości (>115200 bps). Profesjonalne konwertery oferują również izolację galwaniczną, co chroni komputer przed przepięciami w instalacjach przemysłowych. Sterowniki VCP (Virtual COM Port) są dostępne dla Windows, Linux i macOS.
20 / 50 Konwertery RS232-RS485/RS422
  • Konwertery RS232-RS485 umożliwiają podłączenie urządzeń z RS232 do magistrali RS485.
  • Większość konwerterów automatycznie steruje kierunkiem transmisji (auto-direction).
  • Konwertery izolowane galwanicznie chronią porty RS232 przed różnicą potencjałów mas.
  • RS232-RS422 umożliwia transmisję full-duplex na większe odległości (do 1200m).
  • Konwertery są niezbędne do integracji starszych urządzeń RS232 z nowoczesnymi systemami.

Konwertery RS232-RS485 pełnią kluczową rolę w integracji starszych urządzeń wyposażonych w interfejs RS232 z nowoczesnymi magistralami przemysłowymi. Zasada działania jest prosta: konwerter odbiera sygnał niesymetryczny RS232 (±12V, Single-Ended) i przekształca go na sygnał różnicowy RS485 (A/B, twisted pair). Większość konwerterów oferuje automatyczne sterowanie kierunkiem transmisji (auto-direction), które wykrywa aktywność nadajnika RS232 i odpowiednio włącza/wyłącza nadajnik RS485. To ważne, ponieważ RS232 ma osobne linie TxD i RxD (full-duplex), a RS485 w trybie 2-przewodowym jest half-duplex.

Konwertery z izolacją galwaniczną są szczególnie polecane w instalacjach, gdzie występują różnice potencjałów mas między urządzeniami - izolacja zapobiega przepływowi prądów wyrównawczych, które mogłyby uszkodzić porty. Przy wyborze konwertera należy zwrócić uwagę na: maksymalną prędkość transmisji, obecność izolacji, sposób zasilania (z portu RS232, zewnętrzne lub USB) oraz wsparcie dla automatycznego sterowania kierunkiem. Profesjonalne konwertery oferują również ochronę przepięciową i ESD. W systemach, gdzie RS232 ma służyć do konfiguracji urządzeń RS485, często stosuje się przejściówki tymczasowe.
21 / 50 Zastosowania w przemyśle - PLC i CNC
  • Sterowniki PLC (Programmable Logic Controller) często mają port RS232 do programowania i diagnostyki.
  • Maszyny CNC (Computer Numerical Control) używają RS232 do przesyłania programów obróbki (G-code).
  • RS232 jest standardem w starszych sterownikach Siemens SIMATIC, Mitsubishi i Allen-Bradley.
  • Modemy GSM z interfejsem RS232 umożliwiają zdalny monitoring i sterowanie maszynami.
  • W przemyśle RS232 jest stopniowo wypierany przez Ethernet, ale wciąż obecny w starszych instalacjach.

W automatyce przemysłowej RS232 przez dekady był podstawowym interfejsem do programowania i diagnostyki sterowników PLC. Typowa konfiguracja to podłączenie laptopa z oprogramowaniem inżynierskim (np. Siemens Step 7, Mitsubishi GX Works) do portu RS232 sterownika. W maszynach CNC standard RS232 służy do przesyłania programów obróbki (G-code) z komputera do sterownika maszyny. Ze względu na ograniczenia pamięci starszych sterowników CNC, programy często były dzielone na segmenty i przesyłane w trybie DNC (Direct Numerical Control) - maszyna odczytywała kod bezpośrednio z portu szeregowego w trakcie obróbki. Modemy GSM wyposażone w interfejs RS232 umożliwiają zdalny monitoring parametrów pracy maszyn (np. temperatura łożysk, wibracje) poprzez sieć komórkową - sterownik PLC wysyła dane przez RS232 do modemu, który przekazuje je przez GPRS do serwera. W przemyśle spożywczym i farmaceutycznym RS232 jest wciąż używany do komunikacji z wagami precyzyjnymi, czytnikami kodów kreskowych i drukarkami etykiet.

Mimo rosnącej popularności Ethernetu przemysłowego (PROFINET, EtherCAT), starsze instalacje z RS232 będą wymagały utrzymania przez kolejne lata.
22 / 50 RS232 w sprzęcie laboratoryjnym i pomiarowym
  • Większość przyrządów laboratoryjnych ma interfejs RS232 do zdalnego sterowania i akwizycji danych.
  • Oscyloskopy, multimetry, generatory funkcyjne, spektrometry - standardowo wyposażone w RS232.
  • Protokół SCPI (Standard Commands for Programmable Instruments) działa na RS232.
  • Systemy akwizycji danych (DAQ) używają RS232 do łączenia czujników z komputerem.
  • Wag laboratoryjne i analityczne precyzyjne często komunikują się przez RS232.

Branża pomiarowa i laboratoryjna jest jednym z ostatnich bastionów RS232, gdzie standard ten wciąż dominuje. Przyrządy takie jak multimetry cyfrowe (Keysight, Fluke), oscyloskopy (Tektronix, Rigol), generatory funkcyjne i spektrometry są standardowo wyposażane w interfejs RS232 obok nowszych interfejsów USB i LAN. Powodem jest długi cykl życia tych urządzeń (często 15-20 lat) oraz potrzeba kompatybilności wstecznej. Wiele laboratoriów posiada dziesiątki przyrządów, które muszą współpracować z tym samym systemem akwizycji danych przez lata. Protokół SCPI (Standard Commands for Programmable Instruments) został opracowany w latach 90. jako ustandaryzowany język komend dla przyrządów pomiarowych i działa między innymi przez RS232. Typowe komendy SCPI to np. "*IDN?" (identyfikacja przyrządu), "MEAS:VOLT:DC?" (pomiar napięcia stałego). Dzięki standaryzacji, programy sterujące mogą współpracować z różnymi przyrządami różnych producentów. W systemach akwizycji danych RS232 jest używany do odczytu czujników temperatury, ciśnienia, wilgotności w czasie rzeczywistym.

Mimo że GPIB (IEEE-488) i Ethernet oferują wyższe prędkości, prostota i niski koszt RS232 sprawiają, że pozostaje on popularnym wyborem.
23 / 50 RS232 w telekomunikacji - modemy
  • RS232 był pierwotnie zaprojektowany jako interfejs między terminalem a modemem.
  • Modemy analogowe (V.90, 56k) używały RS232 do połączenia z komputerem.
  • Komendy AT (Hayes command set) były przesyłane przez RS232 do modemu.
  • Modemy GSM/GPRS mają interfejs RS232 do komunikacji z systemami telemetrycznymi.
  • Linie dzierżawione i ISDN również wykorzystywały RS232 w interfejsie CSU/DSU.

Zastosowanie RS232 w telekomunikacji jest historycznie najważniejszym obszarem użycia tego standardu. Standard został stworzony właśnie do łączenia terminali z modemami, które przekazywały dane przez analogowe linie telefoniczne. Przełomowym momentem było wprowadzenie w 1981 roku zestawu komend AT przez firmę Hayes - "Attention" commands, które umożliwiały sterowanie modemem przez RS232. Komendy takie jak ATDT123456 (wybieranie numeru tonowo) czy ATH (rozłączanie) stały się standardem de facto dla wszystkich modemów. Modemy analogowe osiągnęły szczyt rozwoju w standardzie V.90 (56 kbps) w latach 90., a ich interfejsem zawsze był RS232. Współcześnie modemy GSM/GPRS (Siemens TC35, Quectel M95) są powszechnie używane w telemetrii - łączą się przez RS232 ze sterownikami PLC, przesyłając dane przez sieć komórkową. Komendy AT są wciąż używane do konfiguracji modemów komórkowych i modułów Bluetooth. W sieciach operatorskich interfejs RS232 był używany do konfiguracji i zarządzania urządzeniami transmisyjnymi, takimi jak multipleksery SDH, konwertery mediów i CSU/DSU (Channel Service Unit / Data Service Unit) dla linii T1/E1.

24 / 50 RS232 w systemach POS i kasach fiskalnych
  • Kasy fiskalne i drukarki fiskalne standardowo komunikują się przez RS232.
  • Czytniki kodów kreskowych i szuflady kasowe są podłączane przez RS232.
  • Terminale płatnicze (POS) często używają RS232 do komunikacji z kasą.
  • Wagi sklepowe z etykietowaniem komunikują się przez RS232 z systemem kasowym.
  • Systemy sprzedaży (POS) stopniowo migrują na USB, ale RS232 wciąż dominuje w starszych instalacjach.

Systemy punktów sprzedaży (POS - Point of Sale) są jednym z największych obszarów zastosowania RS232, szczególnie w Europie, gdzie przepisy fiskalne wymagają certyfikowanych kas i drukarek fiskalnych. Kasy fiskalne w Polsce (np. Posnet, Elzab, Novitus) od lat komunikują się z komputerem przez RS232, przesyłając dane o sprzedaży i raporty dobowe w standardzie protokołów takich jak Posnet Print Protocol czy Elzab. Drukarki fiskalne i paragonowe standardowo oferują interfejs RS232 (czasem obok USB i Ethernet). Czytniki kodów kreskowych (Honeywell, Zebra, Datalogic) emulują klawiaturę przez interfejs "keyboard wedge" (podłączany między klawiaturę a komputer) lub komunikują się przez RS232 z własnym protokołem. Terminale płatnicze (Ingenico, PAX, Verifone) łączą się z kasą fiskalną przez RS232 do autoryzacji płatności kartą. Wagi sklepowe z etykietowaniem (np. Mettler Toledo, Bizerba) przesyłają dane o produkcie i wadze przez RS232 do systemu kasowego.

Mimo że nowsze urządzenia oferują USB i Ethernet, branża POS wciąż jest silnie związana z RS232 ze względu na ogromną bazę zainstalowanych urządzeń i wymogi certyfikacyjne, które dotyczą konkretnych typów interfejsów.
25 / 50 RS232 w systemach embedded i IoT
  • Mikrokontrolery (AVR, PIC, STM32, ESP32) mają wbudowane moduły UART.
  • Płytki deweloperskie (Arduino, Raspberry Pi) komunikują się przez UART TTL - wymagają konwersji do RS232.
  • Moduły GPS, czujniki pogodowe i czytniki RFID często używają UART/RS232 do transmisji danych.
  • W systemach embedded RS232 jest używany do debugowania (konsola szeregowa).
  • Bramki IoT łączą urządzenia RS232 z chmurą przez protokoły MQTT/HTTP.

W systemach wbudowanych (embedded) interfejs szeregowy odgrywa rolę zarówno komunikacyjną, jak i diagnostyczną. Praktycznie każdy mikrokontroler posiada co najmniej jeden układ UART, który może być używany do komunikacji z czujnikami, modułami GPS, czytnikami RFID czy wyświetlaczami. Większość płytek deweloperskich (Arduino Uno, ESP32 DevKit, STM32 Nucleo) wyprowadza sygnały UART na piny goldpin, ale na poziomie TTL (0-3.3V lub 0-5V), a nie RS232. Aby podłączyć taką płytkę do sprzętu RS232, potrzebny jest konwerter TTL-RS232 (np. MAX232). Konsola szeregowa (serial console) jest podstawowym narzędziem debugowania w systemach embedded - za pomocą kabla USB-UART można podglądać komunikaty debugowe z mikrokontrolera na komputerze. W systemach IoT bramki (gateways) wyposażone w interfejs RS232 odczytują dane z czujników przez RS232, a następnie przesyłają je przez Wi-Fi/Ethernet do chmury z użyciem protokołu MQTT. Przykładem może być bramka ESP32 odczytująca dane z panelu słonecznego (inwerter) przez RS232 i wysyłająca je do serwera.

Znajomość UART/RS232 jest niezbędna dla każdego programisty embedded, ponieważ interfejs ten jest uniwersalny i dostępny w praktycznie każdym mikrokontrolerze.
26 / 50 Diagnostyka i narzędzia dla RS232
  • Analizatory stanów logicznych do podglądu sygnałów UART/RS232.
  • Oscyloskopy do pomiaru napięć, czasów narastania i kształtu sygnału.
  • Programy terminalowe: PuTTY, Tera Term, RealTerm, screen (Linux).
  • Testery RS232 (loopback plugs) do sprawdzania portów COM.
  • Woltomierz do weryfikacji napięć na pinach TxD, RxD i GND.

Diagnostyka RS232 wymaga zarówno sprzętu pomiarowego, jak i oprogramowania. Podstawowym narzędziem jest program terminalowy, który pozwala wysyłać i odbierać dane przez port COM. PuTTY jest najpopularniejszym wyborem w Windows, Tera Term oferuje zaawansowane funkcje (logowanie, makra), a RealTerm pozwala na wyświetlanie danych w różnych formatach (hex, decimal, binary). W Linux standardowym narzędziem jest screen (/dev/ttyS0, 9600) lub minicom. Do analizy sygnałów na poziomie elektrycznym niezbędny jest oscyloskop - pozwala zmierzyć amplitudę sygnału (±12V), czas narastania zboczy (slew rate - max 30V/µs) i wykryć odbicia. Analizator stanów logicznych dekoduje ramki UART i pokazuje przesyłane bajty. Loopback plug to prosta wtyczka zwierająca piny TxD z RxD - podłączenie jej do portu COM i wysłanie danych powinno spowodować ich natychmiastowy odbiór, co potwierdza sprawność portu. Woltomierz (multimetr) pozwala sprawdzić: napięcie na TxD w stanie spoczynku (powinno być ujemne, ok. -12V), napięcie na RxD w stanie spoczynku (może być różne), oraz ciągłość przewodów w kablu. W praktyce najczęstsze problemy to: nieodpowiedni kabel (zły pinout, brak null-modem), nieprawidłowa konfiguracja (baud rate, parity mismatch) oraz uszkodzone porty RS232 (zwykle od przepięć).

27 / 50 Typowe problemy i rozwiązywanie
  • Brak komunikacji: sprawdź kabel (prosty vs null-modem), pinout, typ złącza (DB9/DB25).
  • Zniekształcone dane: nieprawidłowa prędkość (baud rate) lub konfiguracja bitów (data, parity, stop).
  • Brak lub ciągły ERROR: sprawdź kontrolę przepływu (wyłącz lub włącz RTS/CTS).
  • Okresowe błędy: zakłócenia elektromagnetyczne, zbyt długi kabel, różnica potencjałów mas.
  • Uszkodzenie portu: najczęściej przez przepięcie - stosuj konwertery z izolacją galwaniczną.

Rozwiązywanie problemów z RS232 wymaga systematycznego podejścia. Najczęstszym błędem jest nieodpowiedni kabel - RS232 wymaga kabla krosowanego (null-modem) przy łączeniu dwóch urządzeń DTE (np. dwóch komputerów) i kabla prostego przy łączeniu DTE z DCE. Drugim najczęstszym problemem jest niezgodność konfiguracji - obie strony muszą pracować z tą samą prędkością (baud rate), tą samą liczbą bitów danych, tym samym typem parzystości i tą samą liczbą bitów stopu. Objawia się to jako "śmieci" na ekranie terminala. Kontrola przepływu (flow control) może powodować blokadę transmisji, jeśli jedna strona oczekuje sygnału CTS, a druga go nie wysyła. W takim przypadku pomocne jest wyłączenie kontroli przepływu po obu stronach. Okresowe błędy transmisji przy dłuższych kablach wskazują na przekroczenie dopuszczalnej długości lub zakłócenia od silników/przetwornic. Rozwiązaniem jest skrócenie kabla, zastosowanie kabla ekranowanego lub konwertera na RS485. Uszkodzone porty RS232 (najczęściej od przepięć atmosferycznych lub zwarć) wymagają wymiany układów MAX232 lub całej karty rozszerzeń. Profilaktycznie warto stosować konwertery z izolacją galwaniczną w instalacjach narażonych na przepięcia. Diagnostykę zawsze zaczyna się od pomiaru napięcia na TxD - w spoczynku powinno wynosić około -12V.

28 / 50 RS232 vs RS422 vs RS485 - porównanie
  • RS232: transmisja niesymetryczna, max 15m, max 115,2 kbps, punkt-punkt, full-duplex.
  • RS422: transmisja różnicowa, max 1200m, max 10 Mbps, multi-drop (1 nadawca), full-duplex.
  • RS485: transmisja różnicowa, max 1200m, max 10 Mbps, multi-point (32 nadawców), half/full-duplex.
  • RS232 używa ±12V (logika ujemna), RS422/RS485 używają 0-5V różnicowo (logika dodatnia).
  • RS232 wymaga 3 przewodów minimum, RS422 wymaga 4, RS485 wymaga 2 (half-duplex) lub 4 (full-duplex).

Porównanie trzech standardów szeregowych jest kluczowe dla wyboru odpowiedniego interfejsu do konkretnego zastosowania. RS232, jako najstarszy, jest najprostszy, ale ma największe ograniczenia - krótki zasięg, niska prędkość i tylko punkt-punkt. Jego zaletą jest powszechna dostępność i niski koszt implementacji. RS422 rozwiązał problem zasięgu (1200m) i szybkości (10 Mbps) dzięki transmisji różnicowej, ale zachował ograniczenie do jednego nadawcy (multi-drop, nie multi-point). RS485 jest najbardziej zaawansowany - pozwala na wielu nadawców na jednej magistrali (do 32 urządzeń bez repeaterów), co czyni go idealnym dla sieci przemysłowych. Wszystkie trzy standardy nie są bezpośrednio kompatybilne - RS232 nie można podłączyć do RS485 bez konwertera. Różnica w poziomach napięć to nie wszystko - RS232 używa logiki ujemnej (MARK = -12V, SPACE = +12V), podczas gdy RS422/RS485 używają logiki dodatniej. Co więcej, RS232 ma sygnały sterujące (RTS, CTS, DTR), których RS422/RS485 na ogół nie implementują. W praktyce wybór między standardami zależy od wymaganego zasięgu, liczby urządzeń i odporności na zakłócenia. Dla prostych aplikacji laboratoryjnych RS232 wciąż jest wystarczający, dla przemysłowych lepszy będzie RS485.

29 / 50 Zalety i wady RS232
  • Zalety: prostota implementacji, niski koszt, powszechna dostępność, pełny dupleks.
  • Zalety: dobrze zdefiniowany standard z jasną specyfikacją pinów i sygnałów.
  • Zalety: duży margines napięć (±12V) zapewnia odporność na zakłócenia w krótkich liniach.
  • Wady: ograniczona długość kabla (max 15m), podatność na zakłócenia (single-ended).
  • Wady: tylko punkt-punkt, niska prędkość (oficjalnie 20 kbps), wrażliwość na różnicę potencjałów mas.

Ocena RS232 z perspektywy ponad 60 lat jego istnienia wypada na korzyść - standard okazał się niezwykle trwały i wciąż znajduje zastosowanie w niszach, gdzie jego wady nie mają znaczenia. Główną zaletą jest prostota - do komunikacji potrzeba minimum 3 przewodów (TxD, RxD, GND), a implementacja w mikrokontrolerze to kilka rejestrów konfiguracyjnych UART. Pełny dupleks (jednoczesne nadawanie i odbieranie) jest dodatkowym atutem, którego brak w RS485 w trybie 2-przewodowym. Duży margines napięć (±12V) sprawia, że na krótkich dystansach RS232 jest odporniejszy na zakłócenia niż UART TTL. Jednak wady są istotne: transmisja niesymetryczna powoduje podatność na zakłócenia przy dłuższych kablach, a różnica potencjałów mas między urządzeniami (ground loop) może uniemożliwić komunikację. Ograniczenie do topologii punkt-punkt uniemożliwia budowanie sieci. Oficjalna maksymalna prędkość 20 kbps (choć w praktyce 115,2 kbps) jest niska w porównaniu do współczesnych standardów. Mimo tych wad, RS232 pozostaje w użyciu ze względu na ogromną bazę zainstalowanych urządzeń i prostotę diagnostyki. W wielu przypadkach (konfiguracja switcha, programowanie PLC) nie ma potrzeby stosowania szybszych interfejsów - RS232 w zupełności wystarcza.

30 / 50 Przyszłość RS232 i podsumowanie
  • RS232 ma już ponad 60 lat i wciąż jest aktywnym standardem w wielu dziedzinach.
  • W komputerach konsumenckich został całkowicie wyparty przez USB i Bluetooth.
  • W przemyśle, pomiarach, POS i embedded wciąż jest powszechnie używany.
  • Bramki IoT i konwertery USB/ETH zapewniają RS232 drugą młodość w nowoczesnych systemach.
  • Znajomość RS232 jest fundamentem edukacji inżyniera - uczy podstaw transmisji szeregowej.

Podsumowując, RS232 jest standardem, który pomimo swojego sędziwego wieku wciąż ma się dobrze w swoich niszach. W komputerach osobistych port COM został zastąpiony przez USB około 2010 roku, ale w przemyśle, laboratoriach, systemach POS i embedded RS232 pozostaje w powszechnym użyciu. Kluczowe zasady projektowania z RS232 to: prawidłowy dobór kabla (null-modem dla DTE-DTE, straight-through dla DTE-DCE), zachowanie maksymalnej długości 15m (lub mniej przy wyższych prędkościach), konfiguracja parametrów transmisji (baud rate, data bits, parity, stop bits) zgodnie z wymaganiami urządzenia, oraz stosowanie konwerterów z izolacją galwaniczną w instalacjach narażonych na przepięcia. W dobie IoT i Przemysłu 4.0 RS232 zyskuje drugą młodość jako warstwa fizyczna dla bramek łączących starsze urządzenia z chmurą. Znajomość RS232 jest niezbędna dla każdego inżyniera sieci transportu danych - stanowi fundament do zrozumienia bardziej zaawansowanych standardów szeregowych (RS422, RS485) i zasad transmisji asynchronicznej. Standard ten, mimo swojego wieku, będzie stosowany przez kolejne dekady w aplikacjach, gdzie liczy się prostota, niezawodność i niski koszt.

31 / 50 RS232 w Cisco - kabel konsolowy (rollover)
  • Kabel konsolowy Cisco (rollover) ma złącze RJ45 z jednej strony i DB9 żeński z drugiej.
  • Nazwa "rollover" pochodzi od odwróconej kolejności pinów: pin 1 RJ45 - pin 8 RJ45, pin 2 - pin 7 itd.
  • Kabel oznaczony jest kolorem niebieskim (light blue) i ma oznaczenie CAB-CONSOLE-RJ45.
  • Pinout RJ45›DB9: pin 1 (RJ45)›pin 8 (DB9/CTS), pin 2›pin 6 (DSR), pin 3›pin 2 (RxD), pin 4›pin 5 (GND).
  • Pin 5 (RJ45)›pin 5 (GND), pin 6›pin 3 (TxD), pin 7›pin 4 (DTR), pin 8›pin 7 (RTS).

Kabel rollover (zwany też kablem konsolowym Cisco) jest niezbędny do konfiguracji urządzeń Cisco przez port konsolowy (CONSOLE lub CON). Nazwa "rollover" pochodzi od sposobu łączenia par przewodów: przewód podłączony do pinu 1 na jednym końcu trafia do pinu 8 na drugim, pin 2 do pinu 7, pin 3 do pinu 6, a pin 4 do pinu 5. Jest to odwrotność kabla krosowanego Ethernet (crossover), który krzyżuje pary 1-2 z 3-6. W nowszych urządzeniach Cisco (seria ISR 4000, Catalyst 9000) stosuje się dodatkowo port mini-USB (oznaczony MINI-USB CONSOLE) lub USB-C, który wymaga osobnych sterowników. Port konsolowy RJ45 jest zawsze oznaczony etykietą "CONSOLE" lub "CON" i często znajduje się na przednim panelu. W przypadku braku kabla rollover można użyć przejściówki RJ45›DB9 rollover i standardowego kabla UTP (kategoria 5e lub wyższa). Należy pamiętać, że zwykły kabel Ethernet (straight-through) nie zadziała, ponieważ połączy piny 1:1, 2:2 itd., a wymagane jest rollowanie. W sprzedaży dostępne są również przejściówki USB›RJ45 konsolowe (np. Cisco USB Console Cable), które emulują port COM i nie wymagają zewnętrznego konwertera USB-RS232.

32 / 50 Rejestr konfiguracji Cisco (Configuration Register)
  • Rejestr konfiguracji (config-register) to 16-bitowa wartość przechowywana w NVRAM routera Cisco (domyślnie 0x2102).
  • Młodsza część (bity 0-3): boot field - określa sposób uruchamiania systemu (0x0 = ROMMON, 0x1 = ROM IOS, 0x2-0xF = flash).
  • Bit 5 (0x20): ignorowanie NVRAM (ignore startup-config) - używane przy odzyskiwaniu hasła.
  • Bit 6 (0x40): ignorowanie BREAK - zapobiega przerwaniu rozruchu przez Ctrl+Break.
  • Odczyt: show version (ostatnia linia), zapis: config-register 0x2142.

Rejestr konfiguracji (configuration register) jest kluczowym mechanizmem kontroli rozruchu routerów i przełączników Cisco. Wartość domyślna 0x2102 oznacza: boot do IOS z flash (bity 0-3 = 0010), włączone przerwanie Break (bit 8 = 0), prędkość konsoli 9600 bps (bity 5-7). Wartość 0x2142 (ustawiony bit 6 = 0x40, boot field 0x2) nakazuje pominięcie startup-config przy starcie - router uruchamia się z domyślną konfiguracją, co umożliwia odzyskanie hasła. Wartość 0x2100 (boot field = 0) wymusza uruchomienie w trybie ROMMON. Wartość 0x2101 (boot field = 1) uruchamia IOS z ROM (jeśli dostępny). Bity 8-10 kontrolują prędkość konsoli: 000 = 9600, 001 = 4800, 010 = 1200, 011 = 2400, 100 = 19200, 101 = 38400, 110 = 57600, 111 = 115200. Zmiana config-register następuje w trybie globalnej konfiguracji: (config)# config-register 0x2142. Nowa wartość obowiązuje po przeładowaniu (reload). Wirtualny config-register (np. w GNS3/EVE-NG) działa identycznie jak na fizycznym sprzęcie. W nowszych routerach (IOS-XE) config-register może być odczytywany przez "show switch" lub "show boot".

33 / 50 ROMMON - tryb awaryjny i odzyskiwanie hasła Cisco
  • ROMMON (ROM Monitor) to podstawowy program rozruchowy w routerach Cisco - uruchamiany gdy boot field = 0 lub brak obrazu IOS.
  • Dostęp do ROMMON: wysłanie Ctrl+Break w pierwszych 60 sekundach rozruchu lub ustawienie config-register 0x2100.
  • Podstawowe komendy ROMMON: "?" (lista), "show version" (wersja), "set" (zmienne środowiskowe), "boot" (uruchom IOS).
  • Odzyskiwanie hasła: przełącz config-register na 0x2142, przeładuj, wejdź w tryb uprzywilejowany, skopiuj running-config do startup-config, zmień hasło.
  • Odzyskiwanie IOS: "tftpdnld" (pobranie przez TFTP) lub "XMODEM" (przesłanie przez RS232 - bardzo wolne).

Tryb ROMMON (ROM Monitor) jest niskopoziomowym środowiskiem awaryjnym w routerach Cisco, dostępnym gdy urządzenie nie może uruchomić pełnego IOS. Aby wejść do ROMMON podczas rozruchu, należy wysłać sygnał Break (Ctrl+Break) przez port konsolowy w ciągu pierwszych 60 sekund od włączenia zasilania. W PuTTY domyślnie Ctrl+Break nie jest dostępne - trzeba skonfigurować akcję "Break" w ustawieniach terminala (Special›Break) lub wysłać sekwencję ESC O R. Sekwencja odzyskiwania hasła: 1) Podłącz kabel konsolowy i uruchom terminal (9600 8N1). 2) Wyłącz i włącz router, wysyłaj Ctrl+Break przez pierwsze 60s. 3) Wejdziesz do ROMMON (znak zachęty "rommon 1>"). 4) Wpisz: confreg 0x2142. 5) Wpisz: reset. 6) Router uruchomi się ignorując startup-config. 7) Wejdź do trybu uprzywilejowanego (enable - puste hasło). 8) Skopiuj startup-config do running-config: copy startup-config running-config. 9) Zmień hasło: configure terminal, enable secret nowehaslo. 10) Przywróć config-register: config-register 0x2102, end, write memory. W przypadku uszkodzonego IOS, komenda "tftpdnld" wymaga skonfigurowania interfejsu Ethernet z adresem IP (set IP_ADDRESS=...), a "XMODEM" przesyła plik przez RS232 z prędkością 115200 bps (dla obrazu IOS 10 MB trwa to około 30 minut).

34 / 50 Port konsolowy Cisco - diagnostyka i dobre praktyki
  • Port konsolowy Cisco używa parametrów: 9600 baud, 8N1, flow control none - zgodnych z RS232.
  • W starszych routerach (2500, 2600) port konsolowy to DB25 żeński (DCE), w nowszych - RJ45.
  • Auxiliary port (AUX) to drugi port szeregowy do zdalnego zarządzania przez modem analogowy.
  • Kabel USB›RJ45 konsolowy (np. Cisco USB Console Cable 72-9383) emuluje COM bez przejściówek.
  • W GNS3/EVE-NG port konsolowy jest emulowany przez Telnet (localhost:port) - parametry RS232 nie obowiązują.

Port konsolowy Cisco ewoluował od DB25 żeńskich w latach 90. (router 2500), przez DB9 w serii 2600, do obecnego standardu RJ45 w serii ISR (Integrated Services Router) i Catalyst Switch. W nowszych urządzeniach dostępny jest dodatkowy port mini-USB (oznaczony MINI-USB CONSOLE) oraz USB-C, które wymagają zainstalowania sterowników Cisco CiscoUSBConsoleDriver. Port AUX (Auxiliary) jest dostępny w routerach (oznaczony "AUX") i umożliwia zdalne zarządzanie przez modem - obsługuje prędkości do 115200 bps. Dobrą praktyką jest ustawienie hasła na linii konsolowej (line console 0), limitu sesji (exec-timeout 5 0) oraz logowania (logging synchronous). W przypadku problemów z połączeniem konsolowym: 1) sprawdź numer portu COM w Menedżerze Urządzeń (szczególnie po podłączeniu USB-RS232 lub USB-konsola). 2) zweryfikuj parametry transmisji (9600 8N1 to standard, ale niektóre routery UNIX używają 115200). 3) sprawdź kabel - powinien być rollover, nie ethernetowy. 4) w PuTTY sprawdź Flow Control = None (częsta przyczyna "zawieszenia" konsoli). 5) wyloguj wszystkich innych użytkowników (show users, clear line X). W systemach wirtualizacji sieci (GNS3, EVE-NG) port konsolowy urządzenia jest mapowany na port Telnet, np. localhost:5001 - parametry RS232 nie mają zastosowania, ale komendy Cisco CLI są identyczne.

35 / 50 PuTTY - historia i geneza emulatora terminala
  • PuTTY został napisany przez Simona Tathama (Simon Tatham) pod koniec 1998 roku dla systemu Windows.
  • Nazwa "PuTTY" nie jest akronimem - wybrana została przez autora jako neutralna i przyjemna w wymowie.
  • Pierwotnie PuTTY był klientem SSH i Telnet, obsługę połączeń szeregowych dodano w wersji 0.55 (styczeń 2003).
  • Od wersji 0.60 (2007) PuTTY obsługuje protokół SCP (Secure Copy) do przesyłania plików.
  • Licencja MIT pozwala na swobodne użytkowanie, modyfikację i dystrybucję kodu źródłowego.

Simon Tatham, brytyjski programista i autor wielu projektów open source (m.in. algorytmów układania płytek w grze "Net"), napisał PuTTY jako klienta SSH dla Windows, ponieważ w 1998 roku brakowało darmowych klientów SSH dla tej platformy. Pierwsze wersje PuTTY były pisane w języku C i korzystały z Win32 API. Kod źródłowy został opublikowany na licencji MIT, co pozwoliło na rozwój licznych forków i narzędzi pochodnych, takich jak KiTTY (rozszerzona wersja z wieloma dodatkami) i WinSCP (klient SCP z interfejsem graficznym). PuTTY jest napisany w języku C i składa się z około 180 000 linii kodu. Wersja 0.55 z 2003 roku dodała obsługę portów szeregowych (Serial), co uczyniło PuTTY standardowym narzędziem do konfiguracji urządzeń przez RS232. Wraz z PuTTY dystrybuowane są narzędzia towarzyszące: PuTTYgen (generowanie kluczy SSH), Pageant (agent SSH), PLINK (linia poleceń do łączenia SSH/Serial) i PSFTP (SFTP klient). Mimo że od 2005 roku nie było nowego oficjalnego wydania (wersja 0.58 była ostatnią stabilną przez długi czas), rozwój był kontynuowany - w 2023 roku wydano wersję 0.79. PuTTY pozostaje najpopularniejszym emulatorem terminala dla Windows, używanym przez miliony administratorów sieci na całym świecie.

36 / 50 PuTTY - konfiguracja połączenia szeregowego krok po kroku
  • Uruchom PuTTY.exe (nie wymaga instalacji - aplikacja przenośna w jednym pliku).
  • W oknie "PuTTY Configuration" wybierz "Serial" w polu Connection type (na dole okna).
  • W polu "Serial line" wpisz nazwę portu COM, np. "COM3" - numer sprawdź w Menedżerze Urządzeń.
  • W polu "Speed (baud)" wpisz prędkość transmisji, np. 9600 (standard) lub 115200.
  • Kliknij "Open" - otworzy się okno terminala. Naciśnij Enter - powinien pojawić się prompt urządzenia.

Szczegółowa konfiguracja PuTTY dla połączenia szeregowego wymaga ustawienia kilku parametrów. Po wybraniu "Serial" jako Connection type, w polu "Serial line" podajemy nazwę portu COM (np. "COM1", "COM3") - w Windows nowszej generacji (Vista+) porty COM nazywane są "COMx". W polu "Speed (baud)" wpisujemy prędkość - typowe wartości to 9600, 19200, 38400, 57600 i 115200. Następnie w drzewie kategorii po lewej stronie rozwijamy "Connection" i wybieramy "Serial". Tu ustawiamy: "Data bits" (7 lub 8), "Stop bits" (1 lub 2), "Parity" (None, Odd, Even, MARK, SPACE), "Flow control" (None, XON/XOFF, RTS/CTS, DTR/DSR). Dla Cisco standard to: Data bits: 8, Stop bits: 1, Parity: None, Flow control: None. W kategorii "Terminal" warto ustawić "Local echo" na "Force off" (aby nie dublować wpisywanych znaków) i "Local line editing" na "Force off". W kategorii "Window" › "Appearance" można zmienić rozmiar kursora i kolory. Po kliknięciu "Open" PuTTY próbuje otworzyć port COM. Jeśli port jest zajęty (np. przez inny program), PuTTY wyświetli błąd "Unable to open connection to COMx". W sesji szeregowej można użyć skrótów: Ctrl+right-click = wklej, Ctrl+left-click = otwórz URL. Po zamknięciu okna terminala sesja jest zakończona - PuTTY nie zamyka portu automatycznie przy rozłączaniu urządzenia.

37 / 50 PuTTY - zarządzanie sesjami i logowanie danych
  • Zapisane sesje w PuTTY przechowują wszystkie parametry połączenia - pozwalają szybko łączyć się z urządzeniem.
  • Aby zapisać sesję: skonfiguruj połączenie, wpisz nazwę w "Saved Sessions", kliknij "Save".
  • Logowanie danych (session logging): kategoria "Session" › "Logging" - wybierz "Printable output" lub "All session output".
  • Plik logu można umieścić w wybranym miejscu (pole "Log file name"), używać zmiennych &Y (rok), &M (miesiąc), &D (dzień), &T (czas).
  • W sesji szeregowej PuTTY zapamiętuje parametry COM i baud rate - po dwukrotnym kliknięciu zapisanej sesji łączymy się od razu.

Zarządzanie sesjami w PuTTY znacząco przyspiesza codzienną pracę administratora sieci. Po skonfigurowaniu połączenia szeregowego (COM port, baud rate, parametry Serial) wpisujemy nazwę w polu "Saved Sessions", np. "Cisco_ISR_Console", i klikamy "Save". Sesja pojawi się na liście - dwukrotne kliknięcie lub zaznaczenie i "Open" łączy się od razu bez ponownej konfiguracji. W drzewie kategorii "Session" › "Logging" można włączyć automatyczne logowanie całej sesji do pliku. Opcja "Printable output" zapisuje tylko znaki drukowalne (bez kodów sterujących), "All session output" zapisuje wszystko (włącznie z ANSI escape codes). Zmienne w nazwie pliku: &Y (4-cyfrowy rok), &M (miesiąc 01-12), &D (dzień), &T (czas HH:MM:SS), &H (host). Przykład: "C:\logs\cisco_&Y-&M-&D_&T.log". Logi są przydatne przy debugowaniu, odtwarzaniu konfiguracji i audycie. W sesji szeregowej logowanie zapisuje wszystkie dane przesyłane między terminalem a urządzeniem. PuTTY przechowuje zapisane sesje w rejestrze Windows (HKCU\Software\SimonTatham\PuTTY\Sessions) lub w pliku PuTTY.reg (przy przenośnej instalacji). Można też eksportować sesje do pliku .reg i przenosić między komputerami. W wersji 0.79 dodano synchronizację sesji między instalacjami PuTTY.

38 / 50 Alternatywy dla PuTTY - terminale szeregowe
  • Tera Term (Tera Term Pro / Tera Term 5) - japoński emulator terminala z obsługą szeregową, SSH, makr w języku TTL (Tera Term Language).
  • RealTerm - terminal z zaawansowanym wyświetlaniem danych (hex, decimal, binary) oraz emisją danych testowych i wykresami oscyloskopowymi.
  • screen (Linux/Unix) - narzędzie konsolowe do zarządzania sesjami terminalowymi, w tym szeregowymi: screen /dev/ttyS0 9600.
  • minicom (Linux) - klasyczny emulator terminala dla systemów Unix/Linux z obsługą logowania i dial-up.
  • PLINK (PuTTY Link) - wersja konsolowa PuTTY do skryptów: plink -serial COM3 -sercfg 9600,8,n,1.

Oprócz PuTTY istnieje wiele innych emulatorów terminala, każdy z własnymi zaletami. Tera Term, pierwotnie napisany przez japońskiego programistę Takashi Teranishi, jest szczególnie ceniony za możliwość automatyzacji przez makra TTL - można zapisać sekwencje komend, oczekiwanych odpowiedzi i warunków, co jest przydatne przy konfiguracji wielu urządzeń. RealTerm wyróżnia się możliwością wyświetlania danych w wielu formatach jednocześnie (hex, decimal, binary, ASCII) oraz generowaniem sygnałów testowych - przydatne przy diagnostyce niestandardowych protokołów. W systemach Linux standardowym narzędziem jest screen - uruchamiamy go z parametrami: screen /dev/ttyUSB0 115200. Wychodzimy z sesji przez Ctrl+A, Ctrl+\, a odłączamy przez Ctrl+A, d (detach). minicom oferuje bardziej znajomy interfejs terminalowy z menu i możliwością konfiguracji parametrów przez minicom -s. PLINK to wersja konsolowa PuTTY do użytku w skryptach - np. "plink -serial COM3 -sercfg 9600,8,n,1 -log PuTTY.log" otworzy połączenie szeregowe i zapisze log. W porównaniu do PuTTY, Tera Term oferuje lepszą obsługę makr, RealTerm lepsze narzędzia diagnostyczne, a screen/minicom są naturalnym wyborem w Linux. Dla zaawansowanej diagnostyki protokołów na poziomie bitów warto rozważyć również Serial Port Monitor (np. Eltima) lub Saleae Logic Analyzer.

39 / 50 DOS RS232 - LapLink i pierwsze połączenia między PC
  • LapLink (1983) - pierwszy komercyjny program do przesyłania plików przez RS232, autor: Traveling Software (Mark Eppley).
  • Działał w trybie tekstowym DOS z interfejsem dwóch paneli: lewy (lokalny) i prawy (zdalny).
  • Wymagał kabla null-modem: LapLink Serial Cable - krzyżowanie TxD-RxD, RTS-CTS, DTR-DSR.
  • Maksymalna prędkość: 115200 bps na porcie COM, włączona kompresja danych (LapLink 3, 1990).
  • Funkcje: przesyłanie plików, synchronizacja katalogów, zdalne sterowanie, przesyłanie całych dysków.

LapLink został wydany w 1983 roku przez Traveling Software, firmę założoną przez Marka Eppleya w Seattle. Pierwsza wersja nosiła nazwę "Traveling Software LapLink" i działała na komputerach IBM PC/XT/AT z systemem DOS.

Program był przełomowy, ponieważ umożliwiał przesyłanie plików między komputerami bez potrzeby używania dyskietek - w czasach, gdy dyskietki 5.25" miały pojemność 360 KB, a programy zajmowały coraz więcej miejsca.

LapLink używał własnego protokołu komunikacyjnego opartego na RS232, z kontrolą błędów CRC (Cyclic Redundancy Check) i automatyczną retransmisją uszkodzonych pakietów. Interfejs użytkownika w LapLink 3 (1990) przedstawiał dwa panele - lewy pokazywał katalogi komputera lokalnego, prawy zdalnego. Użytkownik mógł zaznaczać pliki kursorem i kopiować między panelami za pomocą klawiszy funkcyjnych. F5 = kopiuj z lewego na prawy, F6 = z prawego na lewy. Obsługiwane były atrybuty plików (data, czas) i podkatalogi. LapLink był również dostarczany z kablem null-modem (LapLink Serial Cable), który był identyfikowany po charakterystycznej czarnej obudowie z logo Traveling Software. W 1995 roku Traveling Software został przejęty przez LapLink Software, Inc., a program kontynuował rozwój pod Windows jako LapLink Gold.

40 / 50 FastLynx i INTERLNK - alternatywy dla LapLink
  • FastLynx (pierwotnie FastWire, 1985) - konkurencyjny program do transferu plików przez RS232, autor: Rupp Corp (później Sewell Development).
  • FastLynx oferował wyższe prędkości niż LapLink dzięki zoptymalizowanemu protokołowi i kompresji danych (do 115200 bps).
  • INTERLNK/INTERSVR (MS-DOS 6.0, 1993) - wbudowane narzędzie Microsoftu do łączenia dwóch komputerów przez port szeregowy lub równoległy.
  • INTERSVR uruchamiany na serwerze (komputer źródłowy), INTERLNK.EXE ładowany w CONFIG.SYS na kliencie (DEVICE=C:\DOS\INTERLNK.EXE).
  • INTERLNK mapował dyski serwera jako dodatkowe litery na kliencie - np. C serwera = E klienta, D serwera = F klienta.

FastLynx był głównym konkurentem LapLink na rynku oprogramowania do transferu plików przez RS232. Pierwotnie wydany jako FastWire w 1985 roku przez Rupp Corporation, program został przemianowany na FastLynx po przejęciu przez Sewell Development. Jego przewagą nad LapLink był szybszy protokół transmisyjny z zaawansowaną kompresją danych (do 50% redukcji rozmiaru dla plików tekstowych). FastLynx obsługiwał również prędkości do 115200 bps, podczas gdy LapLink był ograniczony do 57600 bps w standardowej konfiguracji. Program oferował również przesyłanie całych partycji, klonowanie dysków i zdalne sterowanie. INTERLNK/INTERSVR, dostarczany z MS-DOS 6.0 od 1993 roku, był darmowym rozwiązaniem Microsoftu. Konfiguracja: na komputerze serwera (źródłowym) uruchamiano INTERSVR, który wyświetlał informację o mapowanych dyskach. Na komputerze klienckim dodawano do CONFIG.SYS linię "DEVICE=C:\DOS\INTERLNK.EXE /DRIVES:5" - przeznaczało to 5 liter dysków dla serwera. Po restarcie klienta, dyski serwera pojawiały się jako dodatkowe litery (pierwsza wolna litera po ostatnim dysku klienta). INTERLNK działał przez port szeregowy (COM1/COM2) lub równoległy (LPT1/LPT2) - port równoległy był szybszy (do 500 KB/s wobec 115 KB/s dla RS232). Aby odłączyć sesję, na serwerze naciskano Alt+F4. Mimo że INTERLNK był wygodny, brakowało mu zaawansowanych funkcji LapLink i FastLynx, takich jak synchronizacja katalogów czy zdalne sterowanie.

41 / 50 Kermit, XMODEM, YMODEM, ZMODEM - protokoły transferu przez RS232
  • Kermit (1981) - protokół transferu plików opracowany na Columbia University (Frank da Cruz, Bill Catchings).
  • XMODEM (1977) - pierwszy szeroko stosowany protokół, Ward Christensen: bloki 128 bajtów + suma kontrolna 1 bajt.
  • YMODEM (1985) - rozszerzenie XMODEM: bloki 1024 bajtów, przesyłanie nazwy pliku i daty.
  • ZMODEM (1986) - najszybszy z rodziny: strumieniowa transmisja, automatyczna retransmisja (crash recovery), 32-bit CRC.
  • Wszystkie protokoły działały na RS232 z kontrolą błędów - nie wymagały niezawodnego łącza fizycznego.

Protokoły transferu plików przez RS232 odegrały kluczową rolę w upowszechnieniu komunikacji cyfrowej w latach 80. i 90. XMODEM, stworzony przez Warda Christensena w 1977 roku dla systemu Computerized Bulletin Board System (CBBS), był pierwszym protokołem przesyłania plików z detekcją błędów. Dzielił plik na bloki 128-bajtowe (wzorem standardowego sektora dyskietki CP/M), do każdego dodawał 8-bitową sumę kontrolną. Wadą XMODEM był tryb half-duplex (każdy blok wymagał potwierdzenia) - przy dużych plikach narzut był znaczący. YMODEM (1985) zwiększył rozmiar bloku do 1024 bajtów i dodał przesyłanie metadanych pliku (nazwa, rozmiar, data).

ZMODEM, stworzony przez Chucka Forsberga w 1986 roku, był rewolucją - używał transmisji strumieniowej (nadawca wysyłał ciągłe bloki bez czekania na potwierdzenie), 32-bitowego CRC i trybu "crash recovery" (możliwość wznowienia przerwanego transferu). ZMODEM stał się standardem w BBS-ach i komunikacji modemowej.

Kermit, opracowany na Columbia University, był najbardziej zaawansowany - obsługiwał różne systemy operacyjne (Unix, VMS, DOS, MacOS), oferował translację znaków między różnymi zestawami znaków i był używany w środowiskach akademickich do przesyłania danych między mainframe'ami a terminalami. Do dziś ZMODEM jest wspierany przez programy terminalowe (Tera Term, SecureCRT) do przesyłania plików przez RS232.

42 / 50 Carbon Copy i pcANYWHERE - zdalne sterowanie przez RS232
  • Carbon Copy (1988, Microcom) - program do zdalnego sterowania komputerem PC przez RS232, później przez modem i TCP/IP.
  • pcANYWHERE (1986, Dynamic Microprocessor Associates / Symantec) - najpopularniejsze narzędzie do zdalnego pulpitu.
  • Oba programy przesyłały obraz ekranu i zdarzenia klawiatury/myszy przez RS232 z prędkością 9600-115200 bps.
  • Carbon Copy oferował: transfer plików, czat, tablicę ogłoszeń (BBS), zdalne drukowanie.
  • pcANYWHERE oferował: szyfrowanie AES (późniejsze wersje), nagrywanie sesji, zdalne zarządzanie plikami i rejestrem.

Zdalne sterowanie komputerem przez RS232 było standardowym rozwiązaniem w erze przed powszechnym dostępem do Internetu i sieci LAN. Carbon Copy, wydany przez Microcom w 1988 roku, umożliwiał administratorowi IT zdalne przejęcie kontroli nad pulpitem zdalnego komputera przez kabel null-modem lub modem analogowy. Program dzielił ekran na obszary (regiony) i przesyłał tylko zmienione fragmenty, co minimalizowało ilość danych. Przy prędkości 9600 bps odświeżanie ekranu było powolne (kilka sekund na klatkę), ale pozwalało na wykonywanie podstawowych operacji. pcANYWHERE, wydany w 1986 roku przez Dynamic Microprocessor Associates (przejęty przez Symantec w 1998), stał się dominującym rozwiązaniem w firmach. Wersja DOS działała w trybie tekstowym, a wersje Windows (od 2.0 w 1992) oferowały zdalny pulpit graficzny. pcANYWHERE obsługiwał wiele metod połączenia: RS232, modem, ISDN, TCP/IP, IPX/SPX. W konfiguracji przez RS232 obie strony musiały mieć zgodne parametry transmisji (9600 8N1). Program przechwytywał cały obraz VGA (16 lub 256 kolorów) i po kompresji wysyłał przez łącze. W 2014 roku Symantec zakończył wsparcie pcANYWHERE, zastępując go rozwiązaniami opartymi na TCP/IP (Symantec Endpoint Protection). Obecnie zdalne sterowanie przez RS232 ma znaczenie historyczne i zostało całkowicie wyparte przez protokoły TCP/IP (RDP, VNC, TeamViewer).

43 / 50 RS232 w ANSI C - funkcja _bios_serialcom()
  • Funkcja _bios_serialcom() z biblioteki <bios.h> zapewnia dostęp do BIOS INT 14h w języku C.
  • Dostępna w kompilatorach: Borland Turbo C/C++, Microsoft C/C++, Watcom C/C++, Open Watcom.
  • Stałe: _COM_INIT (0), _COM_SEND (1), _COM_RECEIVE (2), _COM_STATUS (3).
  • Stałe konfiguracyjne: _COM_9600, _COM_NOPARITY, _COM_STOP1, _COM_CHR8, _COM_CHR7.
  • Funkcja zwraca status w górnym bajcie (AH rejestru) i dane w dolnym (AL).

Biblioteka <bios.h> była standardowym interfejsem do programowania RS232 w języku C pod DOS. Funkcja _bios_serialcom() przyjmuje trzy parametry: cmd (operacja), port (0=COM1, 1=COM2, 2=COM3, 3=COM4) oraz data (parametry inicjalizacji lub znak do wysłania). Przykład inicjalizacji COM1 na 9600 8N1: unsigned status = _bios_serialcom(_COM_INIT, 0, _COM_9600|_COM_NOPARITY|_COM_STOP1|_COM_CHR8); Wysłanie znaku: _bios_serialcom(_COM_SEND, 0, 'A'); - funkcja zwraca w AH status (bit 7 = 1 oznacza błąd). Odbiór znaku: int c = _bios_serialcom(_COM_RECEIVE, 0, 0) & 0xFF; - funkcja blokująca, czeka aż nadejdzie znak. Sprawdzenie gotowości danych: unsigned status = _bios_serialcom(_COM_STATUS, 0, 0); if (status & 0x100) { /* dane gotowe */ }.

Prosty program czatujący: #include <bios.h> #include <conio.h> int main() { _bios_serialcom(_COM_INIT, 0, _COM_9600|_COM_NOPARITY|_COM_STOP1|_COM_CHR8); while (1) { if (_bios_serialcom(_COM_STATUS, 0, 0) & 0x100) putch(_bios_serialcom(_COM_RECEIVE, 0, 0) & 0x7F); if (kbhit()) { int c = getch(); if (c == 27) break; _bios_serialcom(_COM_SEND, 0, c); } } return 0; } - ten program był podstawą wielu narzędzi komunikacyjnych w erze DOS.
44 / 50 Bezpośredni dostęp do rejestrów UART - inportb/outportb
  • Funkcje inportb(port) i outportb(port, data) z <dos.h> (Borland) lub <conio.h> (Microsoft) pozwalają na bezpośredni dostęp do portów I/O.
  • Baza rejestrów dla COM1: 0x3F8, COM2: 0x2F8, COM3: 0x3E8, COM4: 0x2E8.
  • THR (Transmitter Holding Register) - baza+0: wysłanie bajtu (zapis).
  • RBR (Receiver Buffer Register) - baza+0: odczyt odebranego bajtu.
  • LSR (Line Status Register) - baza+5: bit 5 (0x20) = THR empty (gotowy do nadania), bit 0 (0x01) = Data Ready (dane do odczytu).

Bezpośrednie programowanie rejestrów UART przez porty I/O było szybsze niż korzystanie z BIOS INT 14h, ponieważ omijało narzut przerwania programowego. W systemie DOS przestrzeń I/O x86 była dostępna bez uprawnień administratora. Oto przykład inicjalizacji COM1 na 9600 8N1 przez bezpośredni dostęp: #define COM1 0x3F8; #define LCR (COM1+3); #define LSR (COM1+5); void com_init() { outportb(LCR, 0x80); /* DLAB=1 - dostęp do dzielnika */ outportb(COM1, 0x0C); /* dzielnik niski: 115200/9600=12 */ outportb(COM1+1, 0x00); /* dzielnik wysoki */ outportb(LCR, 0x03); /* 8N1: 8 bitów (11), 1 stop (0), no parity (00) */ }. Wysłanie bajtu: void com_putc(char c) { while (!(inportb(LSR) & 0x20)); /* czekaj aż THR empty */ outportb(COM1, c); }. Odbiór bajtu: char com_getc() { while (!(inportb(LSR) & 0x01)); /* czekaj na Data Ready */ return inportb(COM1); }. Sprawdzenie gotowości: int com_dataready() { return inportb(LSR) & 0x01; }. Prędkość transmisji ustawiana jest przez dzielnik: wartość = 115200 / zadana_prędkość. Dla 9600: 115200/9600 = 12 (0x0C). Dla 19200: 115200/19200 = 6. Dla 57600: 115200/57600 = 2. Dla 115200: 115200/115200 = 1.

Należy pamiętać, że przed zapisem dzielnika trzeba ustawić bit DLAB (bit 7) w LCR na 1, po zapisie dzielnika wyzerować go (zapisując docelową wartość LCR).
45 / 50 UART 8250 i 16550 - rejestry szczegółowo
  • UART 8250 (1981, National Semiconductor) - podstawowy układ portu COM w IBM PC, brak FIFO.
  • UART 16450 (1984) - szybsza wersja 8250, używana w IBM PC/AT, wciąż bez FIFO.
  • UART 16550 (1987) - dodano 16-bajtowy bufor FIFO dla nadajnika i odbiornika, redukcja obciążenia CPU.
  • Rejestry: IER (baza+1) - włączanie przerwań, IIR/FCR (baza+2) - identyfikacja przerwań/kontrola FIFO.
  • LCR (baza+3) - format ramki: bity 1-0 (długość danych), bit 2 (stop bity), bity 4-3 (parity), bit 7 (DLAB).

Rodzina układów UART 8250/16450/16550 jest sercem portów COM w komputerach PC od 1981 roku. Różnice między nimi są kluczowe dla wydajności: 8250 i 16450 nie mają bufora FIFO - każdy odebrany bajt generuje przerwanie (IRQ) lub musi być odczytany przed nadejściem następnego (ryzyko overrun). 16550 wprowadził 16-bajtowy bufor FIFO dla nadawania (THR) i odbioru (RBR), co pozwala procesorowi na obsłużenie 16 bajtów przy jednym przerwaniu zamiast 16 osobnych przerwań. Bufor FIFO w 16550 włącza się przez zapis do FCR (FIFO Control Register, baza+2). Bity FCR: bit 0 = enable FIFO, bit 1 = reset odbiornika, bit 2 = reset nadajnika, bity 7-6 = próg przerwania (00=1 bajt, 01=4 bajty, 10=8 bajtów, 11=14 bajtów). Rejestr IIR (Interrupt Identification Register, baza+2, odczyt) wskazuje przyczynę przerwania: 0000 = modem status, 0001 = THR empty, 0010 = dane gotowe, 0110 = błąd odbioru. Rejestr IER (Interrupt Enable Register, baza+1) włącza przerwania: bit 0 = Data Ready, bit 1 = THR Empty, bit 2 = błąd/break, bit 3 = modem status. Rejestr MCR (Modem Control Register, baza+4) steruje liniami DTR, RTS i pętlą testową (loopback). Rejestr MSR (Modem Status Register, baza+6) odczytuje stan linii CTS, DSR, DCD, RI oraz ich zmiany (delta bits). Dla diagnostyki użyteczny jest rejestr SCR (Scratch Register, baza+7) - 8-bitowa pamięć do testowania poprawności dostępu do UART.

46 / 50 RS232 w kodzie źródłowym DOOM (1993)
  • DOOM (id Software, 1993) wspierał tryb multiplayer (co-op i deathmatch) przez sieć lokalną (IPX) i przez RS232 (kabel null-modem).
  • Kod źródłowy DOOM (opublikowany jako open source w 1997) zawiera pliki i_serial.c i d_net.c obsługujące RS232.
  • Serial multiplayer w DOOM działał przez kabel null-modem łączący dwa porty COM z prędkością 115200 bps.
  • DOOM przesyłał pakiety 4 bajtów (komendy sterujące: kąt, prędkość, strzał) z potwierdzeniem i retransmisją.
  • Limit graczy przez RS232: 2 osoby (przeciwnie do IPX, które obsługiwało do 4 graczy).

Kod źródłowy DOOM, opublikowany przez id Software pod licencją GPL w 1997 roku (a później udostępniony na bardziej liberalnej licencji), zawiera implementację komunikacji RS232 w plikach i_serial.c i d_net.c. Funkcja Serial_Init() w i_serial.c otwiera port COM z parametrami 115200 8N1 i konfiguruje handshaking RTS/CTS. Funkcja Serial_Listen() wykrywa drugi komputer na kablu null-modem, a Serial_GetPacket() i Serial_SendPacket() obsługują wymianę pakietów. Protokół sieciowy DOOM (d_net.c) jest niezależny od warstwy transportowej - te same funkcje D_CheckNetGame(), D_ArbitrateNetStart() i D_DoAdvanceDemo() działają zarówno dla IPX, jak i dla RS232. Gra przesyłała pakiety zawierające stany gracza (ticcmd): forwardmove, sidemove, angleturn, buttons (strzał, zmiana broni). Każdy pakiet był potwierdzany (ACK/NACK), a w przypadku braku potwierdzenia następowała retransmisja. Opóźnienie w RS232 (round-trip time) przy 115200 bps wynosiło około 10-20 ms dla kabla 3m, co było akceptowalne dla gry czasu rzeczywistego. W kodzie źródłowym DOOM implementacja RS232 jest przykładem wydajnego wykorzystania UART 16550 z włączonym buforem FIFO (próg 14 bajtów) i przerwaniami IRQ. Dla fanów retro, DOOM na kablu null-modem wciąż jest grywalny dzięki portom źródłowym (Chocolate Doom, Crispy Doom), które zachowały obsługę serial multiplayer.

47 / 50 RS232 w asemblerze x86 - INT 14h BIOS
  • INT 14h to przerwanie BIOS obsługujące porty szeregowe w trybie rzeczywistym procesora x86.
  • AH=0: inicjalizacja portu. AL = parametry (bity 7-5: prędkość, 4-3: parity, 2: stop, 1-0: data). DX = numer portu (0=COM1).
  • AH=1: wysłanie znaku. AL = znak, DX = port. Powrót: AH=0 po sukcesie, bit 7=AH przy błędzie (timeout, overrun, parity, framing).
  • AH=2: odbiór znaku (blokujący). DX = port. Powrót: AL = odebrany znak, AH = 0 lub błąd (bit 7).
  • AH=3: status portu. DX = port. Powrót: AH = Line Status (bity LSR), AL = Modem Status (bity MSR).

Przerwanie BIOS INT 14h było standardowym interfejsem programowania RS232 w asemblerze x86 w systemie DOS. Każda z czterech funkcji (AH=0..3) była implementowana przez BIOS producenta płyty głównej (IBM, Award, AMI, Phoenix) i różniła się szczegółami (np. obsługą FIFO 16550). Prędkości kodowane w bitach 7-5 AL: 000=110, 001=150, 010=300, 011=600, 100=1200, 101=2400, 110=4800, 111=9600 bps. Dla wyższych prędkości (19200+) potrzebny był bezpośredni dostęp (INT 14h nie obsługiwał ich oficjalnie). Tryb parzystości (bity 4-3 AL): 00=no parity, 01=odd, 10=none (standard), 11=even. Bit stopu (bit 2): 0=1 stop bit, 1=2 stop bity. Bity danych (bity 1-0): 10=7 bitów, 11=8 bitów. Dla 9600 8N1 wartość AL = 11100011b = 0xE3. Kompletny program w asemblerze: ; inicjalizacja COM1 9600 8N1 mov ah, 0; mov al, 11100011b; mov dx, 0; int 14h. ; nadanie znaku 'A' mov ah, 1; mov al, 'A'; mov dx, 0; int 14h; test ah, 10000000b; jnz blad_nadawania. ; odbiór znaku (blokujący) mov ah, 2; mov dx, 0; int 14h; test ah, 10000000b; jnz blad_odbioru ; odebrany znak w AL. ; sprawdzenie gotowości mov ah, 3; mov dx, 0; int 14h; test ah, 1; jnz dane_gotowe. Program czatujący w asemblerze wykorzystywał INT 16h (klawiatura) i INT 21h (wyświetlanie) obok INT 14h. W praktyce INT 14h był wystarczający dla prostych aplikacji, ale dla gier i szybkiej komunikacji preferowano bezpośredni dostęp do rejestrów UART.

48 / 50 Mapa rejestrów UART - adresy względem bazy COM
  • Baza+0 (RBR/THR/DLL): RBR (odczyt) - odebrany bajt; THR (zapis) - bajt do wysłania; DLL (przy DLAB=1) - dzielnik niski.
  • Baza+1 (IER/DLM): IER (Interrupt Enable) - maski przerwań; DLM (przy DLAB=1) - dzielnik wysoki.
  • Baza+2 (IIR/FCR): IIR (odczyt) - identyfikacja przerwania; FCR (zapis) - kontrola FIFO.
  • Baza+3 (LCR): Line Control Register - format ramki, DLAB (bit 7), Set Break (bit 6).
  • Baza+4 (MCR): Modem Control Register - sterowanie DTR (bit 0), RTS (bit 1), Out1 (bit 2), Out2 (bit 3), Loopback (bit 4).
  • Baza+5 (LSR): Line Status Register - bity błędów i statusu nadajnika/odbiornika.
  • Baza+6 (MSR): Modem Status Register - stan CTS, DSR, DCD, RI i ich zmiany (delta).
  • Baza+7 (SCR): Scratch Register - 8-bitowa pamięć do testów (nieobecna w 8250, obecna w 16550).

Szczegółowa mapa rejestrów UART 16550 jest niezbędna przy bezpośrednim programowaniu portu szeregowego. Rejestr LCR (Line Control Register, baza+3) jest najważniejszym rejestrem konfiguracyjnym: bity 1-0 określają długość słowa (00=5, 01=6, 10=7, 11=8 bitów), bit 2 = liczba bitów stopu (0=1, 1=1.5 dla 5 bitów lub 2 dla 6-8 bitów), bity 4-3 = parity (00=none, 01=odd, 11=even), bit 5 = stick parity, bit 6 = Set Break (wymusza SPACE na TxD), bit 7 = DLAB (Divisor Latch Access Bit) - gdy 1, porty baza+0 i baza+1 stają się dzielnikiem częstotliwości. Rejestr LSR (Line Status Register, baza+5): bit 0 = Data Ready (znak odebrany), bit 1 = Overrun Error (poprzedni znak nadpisany), bit 2 = Parity Error, bit 3 = Framing Error (brak bitu stopu), bit 4 = Break Interrupt (linia RxD w SPACE > czas transmisji znaku), bit 5 = THR Empty (nadajnik gotowy na nowy znak), bit 6 = Transmitter Empty (nadajnik i rejestr przesuwny puste), bit 7 = błąd w FIFO (dla 16550). Rejestr MSR (Modem Status Register, baza+6): bity 0-3 = delta (zmiana od ostatniego odczytu) odpowiednio dla CTS, DSR, DCD, RI; bity 4-7 = aktualny stan CTS, DSR, DCD, RI. W trybie loopback (MCR bit 4=1), wewnątrz UART: TX łączy się z RX, RTS z CTS, DTR z DSR, a Out1 z RI, Out2 z DCD - przydatne do samotestowania.

49 / 50 Detekcja FIFO 16550 i programowanie przerwań UART
  • Detekcja obecności bufora FIFO 16550: zapisz 0xE7 do FCR (baza+2), odczytaj IIR. Jeśli bit 6 (0x40) = 1, 16550 obecny.
  • Po zapisie 0xE7 do FCR, bity 6-7 IIR powinny być: 11=16550 z FIFO, 00=16450/8250 bez FIFO.
  • Włączenie FIFO: outportb(COM1+2, 0x41) - włącz FIFO (bit 0), reset (bit 2), próg 1 bajt (bity 6-7=00).
  • Próg przerwania FIFO: 00=1 bajt, 01=4 bajty, 10=8 bajtów, 11=14 bajtów - wybór przez bity 6-7 rejestru FCR.
  • W systemie DOS przerwania UART obsługiwane przez IRQ 4 (COM1/COM3) i IRQ 3 (COM2/COM4) - wektor 0x0C i 0x0B.

Detekcja układu 16550 jest ważna, ponieważ 8250/16450 nie mają bufora FIFO i wymagają innej strategii obsługi (każdy bajt musi być natychmiast odczytany lub wysłany). Procedura detekcji: 1) Zapisz 0xE7 do FCR (COM1+2). 2) Odczytaj IIR (ten sam port COM1+2). 3) Jeśli (wartość & 0xC0) == 0xC0 (bity 6 i 7 = 1), układ ma FIFO (16550 lub kompatybilny). 4) Przywróć wartość FCR do 0 (wyłącz FIFO) lub żądanej. Próg przerwania FIFO wybiera, przy ilu bajtach w buforze odbiorczym generowane jest przerwanie: 1 (minimum opóźnienia, maksimum obciążenia CPU), 4, 8 lub 14 (maksimum wydajności). W DOOM używano progu 14 dla minimalizacji przerwań. Programowanie przerwań UART: 1) Zapisz maskę przerwań do IER (baza+1): bit 0 = Data Available, bit 1 = THR Empty, bit 2 = Receive Line Status (błędy), bit 3 = Modem Status. 2) W PIC (Programmable Interrupt Controller) odmaskuj IRQ 4 (dla COM1) przez wpis 0x0F do portu 0x21 (AND z 0xEF dla IRQ4). 3) Ustaw własną procedurę obsługi przerwania (ISR) przepisując wektor 0x0C (IRQ4) w tablicy wektorów przerwań (IVT, adres 0x0000:0x0030). 4) W ISR odczytaj IIR aby określić źródło przerwania i wykonaj odpowiednią akcję (odczyt RBR, zapis THR, obsługa błędów). 5) Wyślij EOI (End of Interrupt) do PIC: outportb(0x20, 0x20). W systemie DOS programowanie przerwań wymagało zapisania oryginalnego wektora i przywrócenia go przy wyjściu.

50 / 50 RS232 - współczesne odpowiedniki i podsumowanie praktyczne
  • USB CDC ACM (Communications Device Class Abstract Control Model) - emulacja portu szeregowego przez USB.
  • Bluetooth SPP (Serial Port Profile) - bezprzewodowy odpowiednik RS232 dla urządzeń mobilnych.
  • TCP/UDP do RS232 - bramki ethernetowe (np. MOXA, USR-N510) pozwalają na dostęp do RS232 przez sieć.
  • Virtual COM Port (VCP) - sterowniki (FTDI, Silabs, Prolific) emulują port COM dla aplikacji.
  • Znajomość RS232 pozostaje kluczowa dla zrozumienia: UART, przerwań, buforowania FIFO, transmisji asynchronicznej.

Mimo że fizyczny port RS232 zniknął z komputerów konsumenckich, standard żyje w postaci nowoczesnych odpowiedników. USB CDC ACM, zaimplementowany w systemach Linux (/dev/ttyACM0) i Windows, emuluje port szeregowy przez USB. Układy takie jak FT232, CP2102, CH340G przekształcają USB w sygnały UART TTL (nie RS232 - wymagany MAX232 do konwersji napięć). Bluetooth SPP pozwala na bezprzewodową komunikację szeregową do 100m, używaną w systemach embedded i IoT (moduły HC-05, HC-06). Bramki ethernetowe (MOXA NPort, USR-N510) umożliwiają dostęp do urządzeń RS232 przez sieć TCP/IP - działają jako serwer Telnet lub RAW TCP, co pozwala na konfigurację urządzenia z dowolnego miejsca w sieci. Virtual COM Port (VCP) to technologia polegająca na emulacji portu COM przez sterownik systemowy - aplikacja "widzi" standardowy COMx, ale dane są przesyłane przez USB lub Ethernet. W systemie Linux emulację VCP zapewnia jądro przez moduły (cdc_acm, ftdi_sio, cp210x, ch341). W Windows sterowniki VCP są dostarczane przez producentów układów (FTDI, Silabs, Prolific).

Podsumowując praktyczne wskazówki: do konfiguracji urządzeń przez RS232 używaj PuTTY (lub screen/minicom w Linux), parametry transmisji odczytaj z dokumentacji urządzenia (najczęściej 9600 8N1), kabel null-modem do łączenia DTE-DTE, kabel rollover dla Cisco, unikaj kabli dłuższych niż 5m przy prędkości 115200 bps, stosuj konwertery z izolacją galwaniczną w warunkach przemysłowych. RS232 nie umarł - ewoluował w nowe formy, pozostając fundamentalnym standardem transmisji szeregowej.