Przelotka USB/RS-232
W procesie szukania błędu w moim projekcie interfejsu MIDI do Amigi doszedłem do punktu, gdzie postanowiłem sprawdzić, czy aby na pewno port szeregowy mojej A1200 jest w pełni sprawny. Jak to zrobić? Najprościej kabel null-modem do drugiego komputera, odpalamy terminale i sprawdzamy komunikację. Kabel null-modem z wtykiem DB25 z jednej strony i DB9 z drugiej został bez trudu odnaleziony w jakimś kartonie w piwnicy. I tu konsternacja – w domu brak jakiegokolwiek komputera ze złączem RS-232, poza Amigą oczywiście.
Odpowiedź wydaje się prosta. Przelotka USB na serial. Na Allegro walają się kilogramami. Oczywiście plan jest taki, żeby współpracowała z Linuksem, Windowsem, a gdyby przypadkiem jeszcze obsłużył ją MorphOS, to już byłaby pełnia szczęścia. Wiedziony tą myślą postanowiłem spróbować znaleźć przelotkę ze znanym i lubianym chipem PL2032 tajwańskiej firmy Prolific Technologies. Zatem namierzyłem aukcję z nazwą tegoż układu w samym tytule i... kupiłem.
Ciągu dalszego się zapewne domyślacie. Mimo ceny lekko ponad przeciętną tanią chińszczyznę (całe 15 zł), sprzęt okazał się tanią chińszczyzną właśnie, opartą na układzie WinChipHead CH341. I pomyśleć, że za 7 złotych mogłem mieć to samo, z ładniejszą nawet, przezroczystą wtyczką ;-).
Pan producent dostarczył w komplecie małą płytkę CD, której zdecydował się nie podpisywać nawet po chińsku. Cóż począć, jakoś trzeba sobie radzić. Zacząłem od Windowsa, licząc na to, że będzie łatwiej. Odpaliłem instalator sterownika, coś tam pomielił i zameldował, że instalacja zakończyła się sukcesem, a Manager urządzeń zasugerował mi jednoznacznie, że mój komputer wzbogacił się właśnie o port COM12. No to co, na Amidze odpalam Terma, na lapku Putty, po obu stronach standardowe 9600 bps 8N1, sprzętowe sterowanie przepływem (kabel robiłem sam, więc wiem, że jest dobrze połączony). I co? I nic. Nie bangla.
Na trop wpadłem przeglądając rozliczne fora. Zaznaczam, że poniższe testowałem na Windows 7. W Managerze urządzeń trzeba rozwinąć porty (COM i LPT), znaleźć nasz USB-SERIAL CH340 i wykonać na nim dwuklik. W nowo otwartym oknie odkrywamy zakładkę Sterownik i wciskamy Aktualizuj sterownik. Wita nas kolejne okienko, w którym wybieramy Przeglądaj mój komputer w poszukiwaniu..., a następnie Pozwól mi wybrać z listy sterowników.... Teraz, uwaga, wyłączamy opcję Pokaż zgodny sprzęt. Najwyraźniej sterownik ma problem z prawidłową identyfikacją chipa, bowiem po wybraniu z lewej listy producenta wch.cn, po prawej wskazujemy USB-SERIAL CH341, a nie 340, który zainstalował się domyślnie. Teraz bezczelnie ignorujemy ostrzeżenie Windowsa o tym, że wybrany sterownik może nie działać właściwie. Kliknięcie odpowiednią ilość razy w Zamknij kończy pracę.
Tym razem pełen sukces! Teksty pisane na Amidze pojawiają się w Putty, pisane zaś na PC wyświetlane są przez Terma. Mogę więc odetchnąć z ulgą, port szeregowy Amigi działa bez zarzutu. Dla pewności zmieniam jeszcze po obu stronach szybkość na 38400 bps, nadal wszystko OK. No to jeszcze wklejam do terminala kilkanaście linii tekstu, Amiga wyświetla bez błędów. Mission completed.
No, prawie. A co z Linuksem? Skoro już mam połączenie, zamarzyło mi się wysyłanie debuglogów z moich amigowych programów przez port szeregowy na peceta. A tam zazwyczaj odpalam Linuksa, Windows uruchamiany jest tylko w razie stanu wyższej konieczności (czyli – najczęściej – chęci zagrania w Call of Duty...). Zapuszczam więc Ubuntu, wtykam USB i rzucam dmesg w terminalu. O proszę, wykrył i nawet sam załadował odpowiedni moduł ch341. Normalnie pełen serwis klienta. To ja radośnie screen /dev/ttyUSB0 38400 i zaczynam pisać. Zamiast tego co piszę, pojawiają mi się na Amidze jakieś krzaczory. Przyglądam się kodom ASCII i odnoszę wrażenie, że bit 8 jest zawsze ustawiany, zaś bity 7 i 6 również bywają zmieniane. Z kolei pisanie na Amidze daje taki efekt, jakbym pisząc trzymał wciśnięty Control, czyli jakby się zerowały trzy górne bity.
Na szczęście jest Google. Dowiaduję się wkrótce, że linuksowy sterownik jest nieskończony i między innymi nie ma obsługi bitów parzystości i paru innych ustawień. Na szczęście jest łatka, pech chce, że łatka jest na wersję sterownika do kernela 3.18, a ja mam Ubuntu LTS czyli kernel 3.13. Pan na blogu stwierdza, że najpierw chciał zbackportować sterownik, ale potem doszedł do wniosku, że za dużo roboty i skompilował sobie nowszy kernel. Tu następuje 50 linijek poleceń shella.
Ja rozumiem, że każdy linuksowy hobbysta sobie kompiluje kernel co sobotę przy śniadaniu, ale od grzebania w kernelu to ja mam Amigę, Linuksa się tu używa, jak, nie przymierzając, młotka. Na szczęście ktoś postanowił uprościć mi życie i jednak zbackportował ten kod do 3.13. Co prawda ten bezpośredni link na serwer MediaFire nie wzbudził mojego wielkiego zaufania. W środku jest jednak kod źródłowy. Podejrzliwie go przejrzałem, poczytałem sobie też makefile. Cóż, jeżeli ktoś tam wsadził backdoora to chylę czoła ;-). Skompilowałem, rozmiar zbliżony, MD5 się nie zgadza, ale może kolega kompilował na 32 bity... Tak czy inaczej oczywiście insmodem zaaplikowałem moją binarkę...
Tym razem nienagannie zadziałał zarówno putty jak i screen, więc pełen sukces. Pozostało mi jeszcze skopiować ch341.ko w odpowiednie miejsce, żebym nie musiał ręcznie wtykać modułu w kernel za każdym razem. Mam jednak dziwne wrażenie, że każda automatyczna aktualizacja kernela mi go będzie nadpisywać, ale to się jeszcze okaże. Tymczasem wracając do MIDI, skoro port szeregowy w Amidze mam sprawny, to problem tkwi chyba w transoptorze. Przystąpię więc do dalszych badań, o czym nie omieszkam donieść uprzejmie P.T. publiczności.