RS232 i komunikacja z modemem (telefon Siemens MT50)

PROBLEM:
System operacyjny to Ubuntu 12.04 LTS, pod pierwszy port RS232 (fizyczny, żadne przejściówki) podpięty jest kabelkiem stary poczciwy telefon Siemens MT50. Po uruchomieniu systemu i uruchomieniu polecenia:

cat /dev/ttyS0

widać “pustkę” i to jest wporządku. Ale kiedy wysłane zostanie coś na port poleceniem:

echo -e "AT\r" > /dev/ttyS0

w odpowiedzi od modemu dostaję coś zaskakującego w pętli. Oto jej wycinek:

aT

ERROR

Zadziwiające jest to, że po uruchomieniu putty’ego, i otwarciu portu z domyślnymi dla putty’ego ustawieniami, w samym puttym wszystko jest ok. Po zamknięciu puttego i ponownym uruchomieniu wyżej wspomnianych poleceń, modem zachowuje się już poprawnie, bez żadnych “śmieci”. Uznałem, że problem może leżeć po stronie konfiguracji samego portu, dlatego wykonałem (po restarcie systemu, żeby odtworzyć sytuację) polecenie:

stty -F /dev/ttyS0 9600 -parenb  cs8 -ixon

niestety nadal port zachowuje się tak samo. Dopiero samo otwarcie i zamknięcie portu przy pomocy putty’ego (z domyślnymi ustawieniami) załatwia sprawę. Nie jest to jednak satysfakcjonujące, ponieważ docelowo wszystko pracować będzie bez X’ów i uruchamianie putty’ego nawet z automatycznym otwieraniem i zamykaniem portu odpada. Poza tym to nieelegancki workaround i szukam czegoś ciekawszego.

ROZWIĄZANIE:
Rozwiązaniem, jak się okazuje, jest sprawdzenie stanu portu sprzed i po uruchomieniu np. aplikacji minicom:

stty -F /dev/ttyS0

ja dostałem (przed):

speed 9600 baud; line = 0;
-brkint -imaxbel

i po:

speed 115200 baud; line = 0;
min = 1; time = 5;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

A zatem rozwiązaniem jest polecenie:

stty ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke time 5 min 1 -F /dev/ttyS0

Powodzenia!
mirrim.eu

PS.:
Należy dodać, że w rozwiązaniu powyższego problemu bardzo pomógł użytkownik tom3kk z portalu elektroda.pl

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *