-------
Prosta płyta rozszerzeń z portem szeregowym RS-232 dla Raspberry Pi

1. Wstęp

Jedną z cech odróżniających Raspberry Pi od "zwykłych" komputerów jest złącze rozszerzeń na które wyprowadzone są sygnały wejść i wyjść procesora. Rozmieszczenie sygnałów w tym złączu można znaleźć tu: http://elinux.org/RPi_Low-level_peripherals
Należy zwrócić uwagę, że napięcia sygnałów nie przekraczają 3,3V i nie wolno podłączać bezpośrednio sygnałów z logiką 5V. Urządzenia zewnętrzne można podłączać w dowolny sposób, jednak bardzo prostym i bezpiecznym sposobem jest stworzenie prostej płyty rozszerzeń, która umożliwi wizualizację kilku sygnałów wyjściowych procesora oraz umożliwi przekazywanie sygnałów zewnętrznych (np. przycisków) do procesora. Dodatkowo można wykorzystując to złącze uzupełnić Raspberry Pi o port RS-232 umożliwiający prostą komunikację z urządzeniami zewnętrznymi oraz podłączenie się do Raspberry poprzez konsolę szeregową.

2. Wybór sygnałów

W pierwszym etapie można wykonać najprostszą wersję płyty i wykorzystać dwa sygnały wyjściowe oraz dwa sygnały wejściowe procesora. Korzystając z informacji zawartych na podanej powyżej stronie wykorzystamy następujące sygnały:
 - GPIO2 i GPIO3 jako wejścia, wyprowadzenia te są zaopatrzone w rezystory 1,8k podłączone do linii 3,3V, zatem odczyt sygnału z tego wejścia normalnie daje 1, po zwarciu wejścia do masy, daje 0
 - GPIO4 i GPIO17 jako wyjścia, do wyjść podłączono diody LED, które poprzez rezystory 330 omów podłączone są do zasilania 3,3V

3. Port szeregowy

Zgodnie ze schematem złącza, dostępne są sygnały RxD i TxD portu szeregowego. Sygnały mają logikę 3,3V. Aby podłączyć port Raspberry Pi z komputerem należy zastosować konwerter poziomów, koniecznie zasilany napięciem 3,3V. Mamy tu do wyboru dwa układy scalone Sipex SP3232 (tańszy) oraz MAX3232 (normalny). Konwertowane sygnały w logice napięć portu szeregowego należy wyprowadzić na typowe 9-stykowe złącze D-Sub. W zależności od tego czy Raspberry ma być urzędzeniem nadrzędnym (do którego podłączamy urządzenia peryferyjne) lub podrzędnym (Raspberry będzie urządzeniem podrzędnym dla innego komputera) należy wybrać odpowiedni typ złącza i odpowiednią kolejność podłączeń styków 2 i 3 w złączu (patrz dalej).

Widok komputera Raspberry Pi z opisywaną płytą rozszerzeń
Rys. 1. Widok komputera Raspberry Pi z podłączoną opisywaną w tym artykule płytą rozszerzeń

4. Realizacja

Płyta rozszerzeń ze złączem szeregowym została wykonana zgodnie z poniższym schematem. Do budowy wykorzystano uniwersalną płytkę drukowaną UM-34 oraz złącze FHY24DSG współpracujące z 26 stykowym złączem na płycie głównej Raspberry. Ponieważ wtyk ma 2 styki mniej, należy zawsze montować je dosunięte do górnej krawędzi złącza w płycie Raspberry Pi.

Schemat płyty rozszerzeń z portem szeregowym
Rys. 2. Schemat opisywanej płyty rozszerzeń dla Raspberry Pi

Na płycie zamontowano dwie listwy zaciskowe umożliwiające dołączenie dowolnych przycisków, dwie diody LED sygnalizujące stan wyjść GPIO4 i GPIO17 procesora oraz wyk D-Sub złącza RS-232 wraz z układem SP3232.
Schemat wyjaśnia sposób podłączenia złącza RS-232. Jeśli chcemy użyć Raspberry jako urządzenie podrzędne i podłączać się do niego np. poprzez konsolę szeregową należy zamienić kolejność podłączeń styków 2 i 3 złącza i zamiast wtyku zastosowac gniazdo.
Należy zwrócic uwagę, że opisywana kolejność sygnałów w złączu jest poprawna do płyty głównej Raspberry Pi w rewizji 2.0.

Szczegóły budowy płyty rozszerzeń z portem RS-232 dla Raspberry Pi

Szczegóły budowy płyty rozszerzeń z portem RS-232 dla Raspberry Pi
Rys. 3, 4. Szczegóły budowy płyty rozszerzeń z portem RS-232 dla Raspberry Pi

5. Wykorzystanie wejść - wyjść procesora

Strona http://elinux.org/RPi_Low-level_peripherals podaje wyczerpująco sposoby korzystania z sygnałów procesora. Dostęp do tych sygnałów możliwy jest bezpośrednio z poziomu skryptów powłoki. Aby skonfigurować sygnał GPIO4 jako wyjściowy należy wydać (po zalogowaniu jako root np. poleceniem sudo -i) polecenia:

echo "4" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio4/direction

Ustawienie wyjścia:

echo "1" > /sys/class/gpio/gpio4/value

Aby skofigurować sygnał GPIO2 jako wejście wydajemy polecenia:

echo "2" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio2/direction

Sprawdzenie stanu wejścia:

cat /sys/class/gpio/gpio2/value

6. Wykorzystanie złącza szeregowego RS-232

6.1. Praca z konsolą szeregową

Port szeregowy posiada w Raspberry Pi ma oznaczenie /dev/ttyAMA0.
Komputer Raspberry Pi nie potrzebuje do pracy monitora. Wszystkie czynności (w trybie tekstowym) można wykonywać no komputerze zdalnie, korzystając z konsoli do której logujemy się poprzez ssh. Do ssh Raspberry Pi można logować się poprzez sieć LAN lub poprzez port RS-232. Warto wcześniej ustawić automatyczne uruchamianie sshd przy starcie systemu. W tym celu uruchamiamy narzędzie konfiguracyjne raspi-config i w odpowiedniej opcji ustawiamy automatczny start demona sshd.
Aby podłączyć się do Raspberry z komputera z systemem Windows możemy skorzystać z programu putty (http://www.putty.org/). Uruchamiamy program, następnie wybieramy połączenie szeregowe (serial) i na ekranie ustawień połączenia szeregowego ustawiamy parametry połączenia zgodnie z poniższym zdjęciem:

Ekran ustawień RS-232 programu putty
Rys. 5. Szczegóły konfiguracji programu putty

Łączymy się - jeśli nie pojawi sie ekran logowania należy kilka razy wcisnąć ENTER - i podajemy nazwę użytkownika i hasło, następnie cieszymy się nowym sposobem połączenia z Raspberry!

Należy pamiętać, że przy łączeniu z Raspberry przez konsolę szeregową korzystając z RS-232 należy odwrócić (w stosunku do schematu) podłączenia 2 i 3 w złączu D-Sub i użyć gniazdo D-Sub. Można też wykonać prostą przejściówkę (dwa gniazda ze skrzyżowanymi połączeniami 2 i 3 styku).

6.2. Wykorzystanie RS-232 do podłączania urządzeń peryferyjnych

Port szeregowy można też wykorzystać do połączenia z urządzeniami peryferyjnymi wyposażonymi w złącze RS-232. Aby to zrobić, należy jednak najpierw dokonac kilku zmian w ustawieniach konfiguracyjnych Raspberry Pi.
Przede wszystkim należy deaktywować możliwość połączeń przez konsolę szeregową dokonując zmiany w pliku konfiguracyjnym /etc/inittab. Odnajdujemy w nim linię:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

i "komentujemy" ją dodając na początku #

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Następnie należy (choć bez tego połączenie również działało) wyłączyć zrzucanie komunikatów jądra przez port szeregowy. Usuwamy w tym celu następujące wpisy w pliku /boot/cmdline.txt:

console=ttyAMA0,115200 oraz kgdboc=ttyAMA0,115200

Następnie, w zależności od zastosowanego urządzenia, należy ustawić prędkość transmisji. Można to wykonać wydając polecenie:

stty -F /dev/ttyAMA0 9600

9600 to żądana prędkość w baudach.
Sprawdzenie parametrów połączenia szeregowego:

stty -F /dev/ttyAMA0 -a

Aby wysłać dane do urządzenia szeregowego:

echo "TEST" > /dev/ttyAMA0

Odbieranie danych z urządzenia może sprawiać pewne problemy, ze względu na to, że polecenie cat czeka bez końca na sygnał końca pliku, którego urządzenie peryferyjne może nigdy nie wysłać. Jeśli jednak wiemy, ile znaków zawiera komunikat wysyłany przez urządzenie szeregowe, można odebrać tylko tą ilość znaków poleceniem:

head -c 4 /dev/ttyAMA0

4 to ilość znaków do odebrania.

Dodatkowe informacje (wszystkie w jęz. angielskim):

Porty rozszerzeń w Raspberry Pi
Port szeregowy w Raspberry Pi
Kilka informacji nt. użycia portu szeregowego w systemie Linux

Opracował: Marek Sawistowski; wersja 1.0; 0610.2012
-------