Serwisy partnerskie:
Close icon
Serwisy partnerskie

Transmisja danych w inteligentnym domu 4. Kłopoty z odmianami i modyfikacjami RS-232

Wielu elektroników chciałoby samodzielnie zbudować elementy lub cały system inteligentnego domu. Jednym z kluczowych problemów okazuje się dobranie odpowiednich sposobów transmisji danych. Decyzje w tym zakresie decydują o finalnym sukcesie lub porażce. W cyklu artykułów omawiamy rozmaite aspekty tego bardzo ważnego zagadnienia.
Article Image

W poprzednim odcinku omówiliśmy podstawy ogromnie popularnego sposobu transmisji szeregowej, związanego ze standardem RS-232. Wiemy, że coraz rzadziej stosowane są klasyczne wersje z poziomami, wykorzystujace charakterystyczne wtyki i gniazda.

Coraz częściej wykorzystujemy „uproszczone łącza szeregowe” pracujące ze „zwykłymi” poziomami logicznymi 1, 0, gdzie logicznej jedynce odpowiada obecność dodatniego napięcia (+3...+5V), a logicznemu zeru brak napięcia (napięcie 0V...+0,5V). Takie niskonapięciowe łącze szeregowe występuje np. w płytce Arduino, gdzie wyjście Tx (TXD, TXO) i wejście Rx (RXD, RXI) są wprost dołączone do pinów mikrokontrolera zasilanego napięciem 5V albo 3,3V.

Często takie uproszczone łącze szeregowe trzeba połączyć z komputerem PC. Jednak komputery od lat nie mają już szeregowego portu COM. Nawet gdybyś miał jakiś archaiczny komputer z portem szeregowym COM (fotografia 6 w poprzedniej części artykułu), to nie możesz doń wprost podłączyć uproszczonego łącza szeregowego TTL z uwagi na zdecydowanie inne poziomy napięć i „odwrotną logikę”.

Jak działają konwertery USB-Serial?

Ale można to zrobić przy użyciu popularnej przejściówki, konwertera zwanego USB-Serial, który wetknięty do jednego z portów USB komputera zamienia sygnały USB na sygnały „uproszczonego łącza szeregowego” i na odwrót. Łącze i porty USB omówimy w dalszej części cyklu. A na razie wystarczy informacja, że urządzenia szeregowe dołączone do komputera przez takie przejściówki USB-Serial są widoczne w systemie operacyjnym jako... porty szeregowe COM (podobnie zresztą jak porty USB tego komputera).

Zasady transmisji szeregowej RS-232 pokazane na rysunku 10 w poprzedniej części artykułu są proste. Jednak konwertery USB-Serial muszą realizować bardzo skomplikowane funkcje z uwagi na złożoność łącza USB. Do niedawna konwersję realizowały specjalizowane układy scalone, z których najwcześniejszy to FT-232 firmy FTDI. Dziś są też dostępne inne kostki, nie tylko produkcji FTDI, ale i innych firm, np. CP210x z SiliconLab czy chiński CH340, a coraz częściej realizuje się takie konwertery programowo z wykorzystaniem mikrokontrolerów i układów programowalnych PLD.

Fot.12 Konwertery USB-Serial z wyjściem TTL

Fotografia 12 pokazuje konwertery USB-Serial z wyjściem TTL. Niektóre mają wyprowadzone tylko dwie linie Tx, Rx, nierzadko nieco inaczej oznaczone TXD, TXO i RXD, RXI. Inne konwertery mają wyprowadzone także wszystkie dodatkowe linie łącza RS-232 (prawa płytka na fotografii 12).

Oprócz niskonapieciowych USB-Serial, dostępne są też „prawdziwe, wysokonapięciowe” konwertery USB-RS232 ze standardowymi wtykami/gniazdami, przeznaczone do współpracy z urządzeniami, mającymi „prawdziwy” port RS232 – przykład na fotografii 13.

Fot.13 Konwerter USB-RS232 ze standardowymi wtykami i gniazdami

Zasadniczo nietrudno rozróżnić i określić, czy jest to „prawdziwe, wysokonapięciowe” łącze RS-232 (choćby po charakterystycznych złączach), czy uproszczone „niskonapięciowe” TTL. Na pewno trzeba pamiętać, żeby nie łączyć ze sobą obu tych wersji, bo nie tylko inne są poziomy napięć, ale też sygnały są „odwrotne” (napięcie ujemne to logiczna jedynka). Ale jest jeszcze jeden problem i źródło wątpliwości.

Kłopoty interpretacyjne (DTE i DCE)

Opracowane jeszcze w latach 60. XX wieku łącze RS-232 pierwotnie miało służyć, mówić najprościej, do przesyłania danych między komputerami (nazywanymi DTEData Terminal Equipment) na co najmniej dwa główne sposoby, jak pokazuje to rysunek 14a, b:
1. Za pośrednictwem modemów, nazywanych DCE (Data Communication Equipment)
2. Bezpośrednio bez modemów.

Przewidziano też możliwość współpracy jednego urządzenia DTE z jednym DCE, gdzie DCE nie jest modemem pośredniczącym, tylko samodzielnym „pomocniczym” urządzeniem komunikującym się z komputerem (rysunek 14c).

Rys.14a i b Główne sposoby przesyłania danych między komputerami (DTE) 14c Współpraca jednego urządzenia DTE z jednym DCE

Dla takich instalacji z modemami wymyślono system, gdzie przesyłanie właściwych danych poprzez linie TXD, RXD było poprzedzone wymianą wstępnych informacji o chęci nadawania i gotowości do odbierania, przesyłanych za pomocą licznych linii pomocniczych według rysunku 15.

Rys.15 Wymiana wstępnych informacji przesyłanych za pomocą licznych linii pomocniczych

I tak, aby zacząć transmisję, jeden z komputerów (DTE) do współpracującego modemu wysyłał żądanie nadawania danych linią oznaczoną RTS. Współpracujący modem odpowiadał na żądanie RTS, wysyłając sygnał logiczny linią CTS, potwierdzający swoją gotowość. Wykorzystywane były też inne sygnały zgłoszenia i gotowości: DSR, DTR i DCD. Było to potrzebne i miało sens w przypadku użycia modemów pośredniczących według rysunku 14a.

Natomiast przy bezpośrednim połączeniu według rysunku 14b, 14c, te dodatkowe linie nie były potrzebne, a tylko czasami był/jest sens użycia dwóch z nich (RTS i CTS). Jednak w najprostszym przypadku najczęściej do pełnowartościowej dwukierunkowej transmisji wystarczą trzy linie: masa, TXD, RXD.

Powodem zamieszania jest to, że specyficznie oznaczono poszczególne linie łącza, występują różne wtyczki i gniazda, a w literaturze występuje mnóstwo pomyłek i błędów. W komputerze (DTE) „wyjście właściwych danych” to TXD. Ale w modemie (DCE) linia TXD to... wejście. Analogicznie z pozostałymi liniami danych. Dzięki temu komputer (DTE) z modemem (DCE) łączony był liniami „na wprost”, jak pokazuje rysunek 16a. Natomiast bezpośrednio współpracujące dwa komputery, ściślej dwa urządzenia DTE, muszą być łączone „na krzyż”, według rysunku 16b.

Rys.16a Komputer (DTE) z modemem (DCE) łączony liniami „na wprost” 16b Dwa urządzenia DTE, łączone „na krzyż”

Mając fragmentaryczne informacje na ten temat, niejeden dzisiejszy elektronik zastanawia się: czy moje urządzenie/ moduł to DTE czy DCE? Czy TXD to wyjście, czy może wejście? Czy łączyć „na wprost”, czy „na krzyż”?

Otóż jeżeli chodzi o urządzenia/moduły z łączem „niskonapieciowym” TTL, to możemy uznać, że skończyła się już epoka modemów i zasadniczo dziś wszystkie urządzenia/moduły to DTE, więc linie TXD, RXD łącza szeregowego TTL łączymy „na krzyż” według rysunku 17a. W nielicznych przypadkach z dodatkowymi liniami pomocniczymi, jeżeli takowe istnieją, według rysunku 17b, a jeszcze rzadziej według rysunku 16b. Jednak te linie pomocnicze mogą mieć inne oznaczenia/opisy/działanie, dlatego w wątpliwych przypadkach trzeba samodzielnie zbadać szczegóły.

Rys.17a RXD łącza szeregowego TTL łączymy „na krzyż” 17b z dodatkowymi liniami pomocniczymi

To „zbadanie szczegółów” może jednak nie być łatwe z kilku powodów. Otóż interfejs RS232 pierwotnie, w latach 70. i 80., wykorzystywany był do współpracy z modemami telefonicznymi. W tamtych czasach praktycznie nie było innych dostępnych środków komunikacji na duże odległości. A jeżeli były to modemy „telefoniczne”, jak najbardziej zrozumiała jest obecność takich linii jak RI i DCD. RI to Ring Indicator, czyli informacja, że na linii telefonicznej występuje przychodzący z centrali sygnał dzwonienia. Natomiast DCD to Data Carrier Detect, czyli wykrycie sygnału nośnego transmisji danych po zestawieniu połączenia.

Dane były transmitowane w zwyczajnej linii telefonicznej, gdzie sygnały akustyczne zajmują pasmo 300Hz ... 3400Hz, a częstotliwości wyższe mogą być wykorzystane do transmisji danych. Dawniej wykorzystywano stosunkowo proste metody modulacji z wykorzystaniem częstotliwości nośnej (carrier) i wykrywanie tej nośnej miało w niektórych systemach zasadnicze znaczenie. Jednak produkowano też wiele urządzeń z łączem RS-232, gdzie sygnałów RI i DCD w ogóle nie wykorzystywano.

Na rynku były więc urządzenia wykorzystujące także linie RI, DCD. Z czasem skończyła się epoka modemów telefonicznych, więc linie RI, DCD praktycznie popadły w zapomnienie. Jednak nadal niektóre firmy wykorzystywały linie DTR, DSR, RTS, CTS. Rozszyfrowanie ich znaczenia i działania w oryginalnych systemach modemowych przy dwóch kierunkach nawiązywania komunikacji wielu zainteresowanych przyprawia o ból głowy. Spróbujmy to wytłumaczyć w dużym uproszczeniu.

Otóż najprościej biorąc, występują one parami: RTS/CTS oraz DTR/DSR. Sygnały DTR/DSR są „bardziej ogólne” i sygnalizują tylko gotowość do pracy urządzeń. W oryginalnych systemach z modemem, czyli przy połączeniu DTE-DCE według rysunków 14a, 15, 16a, sygnał DTR był zgłoszeniem/ potwierdzeniem, że urządzenie DTE (komputer) jest po prostu gotowe do pracy, a sygnał DSR był zgłoszeniem/ potwierdzeniem, że do pracy gotowe jest też urządzenie DCE, czyli modem. Sygnały aktywne na tych dwóch liniach występowały więc przez cały czas gotowości i pracy systemu.

Natomiast linie RTS/CTS są „bardziej szczegółowe”. Ujmując rzecz najprościej, może nawet zbyt prosto: aktywny stan linii RTS to informacja, że urządzenie DTE (komputer) chce wysłać dane, natomiast stan aktywny linii CTS to potwierdzenie, że DCE (modem) może te dane odebrać. W systemie z modemem były one potrzebne zwłaszcza wtedy, gdy na odcinku między komputerem DTE a modemem DCE transmisja mogła być szybsza, niż komunikacja między modemami.

Mianowicie jeśli komputer wcześniej szybko przesłał porcję danych do modemu, ściślej do bufora danych w modemie, a modem jeszcze nie zdążył wysłać tych informacji przez linię telefoniczną do drugiego modemu, to aby nie przepełnić bufora i nie stracić danych, modem za pomocą stanu nieaktywnego linii CTS informował, że trzeba poczekać z transmisją następnej porcji danych.

W klasycznych systemach transmisyjnych z modemami omawiane linie pomocnicze były wręcz niezbędne, bo w ściśle określony sposób pozwalały sterować przepływem danych i wykrywać błędy. Z czasem łącze RS232 wykorzystywano nie do współpracy miedzy komputerem i modemem telefonicznym, tylko do mnóstwa innych celów, także według schematu DTE-DCE, ale przede wszystkim do transmisji między dwoma urządzeniami DTE (np. dwoma komputerami).

Poważne wątpliwości dotyczące kabli mogą nadal występować przede wszystkim w przypadku urządzeń z „prawdziwymi, wysokonapięciowymi” kablami, złączami i konwerterami według fotografii 13. Jak wiadomo, mogą one mieć złącza 9-pinowe albo 25-pinowe, męskie albo żeńskie. Mogą łączyć DTE-DCE albo DTE-DTE. Liczba kombinacji jest ogromna. Spotyka się też kable „szeregowe” z jednej strony zakończone wtykiem minijack albo „internetowym” RJ-45. Nie sposób omówić wszystkich szczegółów i możliwości. W razie potrzeby trzeba to zbadać samodzielnie.

Ponadto w publikacjach w opisach i na rysunkach występują błędy. Jednak generalnie modemy czy inne pośredniczące urządzenia modemowe DCE są rzadkością i przeważająca większość kabli „szeregowych” ma według rysunku 14b łączyć dwa urządzenia DTE bez żadnego modemu, czyli z zerową (0 – null) liczbą modemów – stąd nazwa przewodów: null-modem.

Rys.18 Trzy popularne wersje kabli null-modem

Przewody w kablach null-modem są więc skrzyżowane, ale można spotkać rozmaite wykonania z różną liczbą przewodów. Na rysunku 18 pokazane są trzy popularne wersje kabli null-modem. Tu dociekliwi Czytelnicy zapytają: jeżeli tak naprawdę do transmisji wystarczą dwie linie TXD, RXD, to po co te dodatkowe połączenia?

Otóż standard RS-232, opierający się na dwóch liniach RXD, TXD dopuszcza, ale nie wymaga wykorzystywania dodatkowych linii sterujących. Problem w tym, że niektóre przyrządy z łączem RS232 wykorzystują te dodatkowe linie DTR, DSR, RTS, CTS. W urządzeniach DTE linie DSR i CTS to wejścia, więc urządzenia takie oczekują na tych wejściach sygnałów potwierdzenia od współpracującego urządzenia. Jeżeli takiego potwierdzenia nie otrzymają, po prostu nie będą pracować. I tylko dla takich urządzeń wymagane jest „pełne” okablowanie według rysunku 18c.

Spełni ono jednak swoje zadanie tylko wtedy, gdy to współpracujące urządzenie też obsługuje dodatkowe sygnały sterujące. Ale nie musi tak być. Wtedy potrzebny jest kabel „oszukujący” według rysunku 18b. Oszukiwanie polega na tym, że na wejście potwierdzenia podawany jest sygnał „własny” i urządzenie otrzymawszy wymagane „potwierdzenie” pracuje poprawnie.

Czytelników EdW zapewne najbardziej interesuje praktyczna przydatność łącza szeregowego w systemach inteligentnego domu. Otóż „prawdziwego, wysokonapięciowego” łącza RS-232 dziś prawie nie wykorzystujemy. „Niskonapięciowy Serial TTL” jest nadal popularny, ale może być wykorzystywany do łączenia układów oddalonych najwyżej o kilka metrów, a lepiej tylko 1m ... 2m z uwagi na ryzyko zakłóceń. Z reguły taki „niskonapięciowy Serial TTL” to tylko dwie (różnie oznaczane) linie danych: wyjście TXD i wejście RXD oraz masa.

Spotyka się jednak interfejsy i moduły, gdzie występują dodatkowe, nie zawsze konsekwentnie oznaczone wejścia lub wyjścia. Przykładem mogą być moduły Arduino Pro Mini, gdzie jest linia niekonsekwentnie oznaczana DTR. Zasadniczo w urządzeniach DTE linia DTR to wyjście sygnalizujące gotowość do pracy. Jednak w płytce Arduino jest to wejście, podłączone do obwodu resetującego procesora ATmega328P, wykorzystywane tylko podczas programowania (bez tej linii podczas programowania trzeba ręcznie nacisnąć przycisk RESET Arduino). Wejście DTR Arduino jest niekonsekwentnie dołączone do linii DTR konwertera USB-TTL (o ile konwerter takie wyjście posiada).

Niektóre proste konwertery USB-TTL wyjścia DTR nie mają, inne mają i wyjście DTR i wejście CTS, a niektóre mają wyprowadzone wszystkie dodatkowe linie łącza RS-232 - patrz dolny konwerter na rysunku 12.

We współczesnych konwerterach USB-TTL te dodatkowe linie nie pełnią oczywiście pierwotnie przewidzianej roli, bo nie współpracują z modemem telefonicznym. Jeśli są wyprowadzone w konwerterze, to należy je traktować jako zwykłe, uniwersalne wyjścia i wejścia urządzenia DTE do dowolnego wykorzystania, tylko trzeba mieć odpowiedni program, pozwalający je wykorzystać z poziomu komputera PC.

W praktyce te dodatkowe linie są wykorzystywane rzadko. Natomiast podstawowa zasada transmisji łącza RS232 jest wykorzystywana w odpornym na zakłócenia, „dalekosiężnym” krewnym łącza szeregowego, znanym jako RS-485. Omówimy to w następnym odcinku.

Tematyka materiału: RS232, USB-Serial
AUTOR
Źródło
Elektronika dla Wszystkich październik 2019
Udostępnij
UK Logo