Standard RS-232 powstał w 1962 r. jako interfejs do współpracy terminali z komputerem za pośrednictwem modemów w dużych systemach komputerowych. Obecnie stosowany jest w prostych systemach pomiarowych, składających się z kontrolera i jednego bloku funkcyjnego lub gdy istnieje konieczność przesyłania danych na większe odległości. Wykorzystuje on tanie kable o bardzo małej liczbie przewodów (3-9). Systemy oparte na standardzie szeregowym RS-232 charakteryzuje mała prędkość przesyłania danych, wymiana informacji możliwa jest w danej chwili jedynie między dwoma urządzeniami. Stosowane jest złącze 25-stykowe lub 9-stykowe. Magistrala interfejsu składa się z linii danych, linii sterujących, linii synchronizacji oraz linii masy. Zgodnie z zaleceniami normy RS-232C dopuszcza się stosowanie dowolnego podzbioru zdefiniowanych w normie linii.
Dane przesyłane są w postaci ramki zwanej SDU (Seria Data Unit), co stanowi najmniejsza możliwą porcję danych, która może być jednorazowo przesłana przez łącze szeregowe. Na ramkę składają się: bity danych, bit startu (znacznik początku ramki), bit parzystości oraz bity stopu (znacznik końca ramki). Ramka może zawierać od 5 do 8 bitów danych. Bit startu jest obowiązkowy, natomiast liczba bitów stopu może wynosić 1, 1,5, lub 2.
Bit parzystości jest wykorzystywany do zabezpieczenia danych przed przekłamaniem podczas przekazu. Może oznaczać parzystą lub nieparzystą liczbę ustawionych bitów w polu danych. Bit ten może być ustawiony na stałe lub też może być na stałe wyzerowany, może być także pominięty.
Bit startu zawsze przyjmuje wartość zero (false), natomiast linia łącza danych w stanie spoczynku utrzymywana jest w stanie logicznym 1 (true). Dzięki temu bit startu jest wyraźnym wskaźnikiem początku transmisji. Bit stopu zamyka ramkę po czym łącze wraca do spoczynku lub realizuje kolejną transmisję.
Trzy tryby przesyłania danych pomiędzy urządzeniem nadawczym – DTE (Data Terminal Equipment – np. komputer) i odbiorczym – DCE (Data Communication Equipment – np. modem) w standardzie RS-232:
simpleks – transmisja jednokierunkowa między dwoma urządzeniami
półdupleks – transmisja dwukierunkowa niejednoczesna po jednej linii transmisyjnej
dupleks – transmisja dwukierunkowa jednoczesna.
Wszystkie wspomniane parametry oraz czas trwania jednego bitu ramki, który odpowiada prędkości transmisji, uzgadniane są pomiędzy urządzeniem nadawczym i odbiorczym jeszcze przed nawiązaniem połączenia. Gwarantuje to prawidłowe odczytanie danych napływających do odbiornika.
Rodzaje transmisji:
- asynchroniczna
- synchroniczna
Komunikacja szeregowa realizowana jest przy użyciu złącza szeregowego DB-9, udostępniającego 9 sygnałów. Ogólnie sygnały przekazywane łączem RS 232 można podzielić na trzy grupy:
- sygnały danych: RxD, TxD.
- sygnały sterujące urządzeniem zewnętrznym: RTS, DTR.
- sygnały kontrolne (odbierane od urządzenia): CTS, DSR, RI, RLSD (DCD)
Zestaw rejestrów obsługujących łącza RS-232C (przesunięcie względem rejestru bazowego, LCR7 oznacza bit numer 7 rejestru sterowania transmisji, który jest rozszerzeniem adresu A2, A1, A0). Uwaga: w interfejsach wyposażonych w układ 16450 występuje dodatkowy rejestr przesunięty o 0x07.
A2 | A1 | A0 | Nazwa rejestru | Uwagi |
0 | 0 | 0 | bufor nadajnika TBR | tylko zapis przy LCR7=0 |
0 | 0 | 0 | bufor odbiornika RBR | tylko odczyt przy LCR7=0 |
0 | 0 | 0 | mniej znaczący bajt podzielnika | LCR7=1 |
0 | 0 | 1 | rejestr aktywacji przerwań IER | LCR7=0 |
0 | 0 | 1 | bardziej znaczący bajt podzielnika | LCR7=1 |
0 | 1 | 0 | rejestr identyfikacji przerwań | tylko do odczytu |
0 | 1 | 1 | rejestr parametrów transmisji LCR | |
1 | 0 | 0 | rejestr sterowania modemu MCR | |
1 | 0 | 1 | rejestr stanu transmisji LSR | |
1 | 1 | 0 | rejestr stanu modemu MSR |
W starszych płytach głównych które wykorzystywały BIOS porty szeregowe miały standardowo przypisany numer przerwania IRQ oraz zakres adresów wejścia–wyjścia. Ponieważ BIOS płyty głównej nie przewiduje obsługi dodatkowych portów szeregowych, poprzez przerwania BIOSu możliwe jest obsługiwanie tylko dwóch podstawowych portów COM1 i COM2. Przed przystąpieniem do pracy z portami w trybie bezpośrednim należy ustalić ile jest portów COM i pod jakimi portami się znajdują. Informacja o ilości dostępnych portów zawarta jest w komórce 0x00400011, zaś w celu znalezienia adresów należy się odwołać do obszaru BIOS-u o następujących adresach:
Nazwa | Adres bazowy | Przerwanie (IRQ) | Informacja o adresie |
COM1 | 03F8h | 4 | 0x00400000 (0000:0400H) |
COM2 | 02F8h | 3 | 0x00400002 (0002:0400H) |
COM3 | 03E8h | 4 | 0x00400004 (0004:0400H) |
COM4 | 02E8h | 3 | 0x00400006 (0006:0400H) |