Tania przelotka USB/RS-232

Przelotka USB/RS-232

Dlaczego tanie przelotki są dobre? Bo są dobre i tanie...
Grzegorz Kraszewski, 13 kwietnia 2016

W pro­ce­sie szu­ka­nia błędu w moim pro­jek­cie in­ter­fej­su MIDI do Amigi do­sze­dłem do punk­tu, gdzie po­sta­no­wi­łem spraw­dzić, czy aby na pewno port sze­re­go­wy mojej A1200 jest w pełni spraw­ny. Jak to zro­bić? Naj­pro­ściej kabel null-mo­dem do dru­gie­go kom­pu­te­ra, od­pa­la­my ter­mi­na­le i spraw­dza­my ko­mu­ni­ka­cję. Kabel null-mo­dem z wty­kiem DB25 z jed­nej stro­ny i DB9 z dru­giej zo­stał bez trudu od­na­le­zio­ny w ja­kimś kar­to­nie w piw­ni­cy. I tu kon­ster­na­cja – w domu brak ja­kie­go­kol­wiek kom­pu­te­ra ze złą­czem RS-232, poza Amigą oczy­wi­ście.

Od­po­wiedź wy­da­je się pro­sta. Prze­lot­ka USB na se­rial. Na Al­le­gro wa­la­ją się ki­lo­gra­ma­mi. Oczy­wi­ście plan jest taki, żeby współ­pra­co­wa­ła z Li­nuk­sem, Win­dow­sem, a gdyby przy­pad­kiem jesz­cze ob­słu­żył ją Mor­phOS, to już by­ła­by peł­nia szczę­ścia. Wie­dzio­ny tą myślą po­sta­no­wi­łem spró­bo­wać zna­leźć prze­lot­kę ze zna­nym i lu­bia­nym chi­pem PL2032 taj­wań­skiej firmy Pro­li­fic Tech­no­lo­gies. Zatem na­mie­rzy­łem au­kcję z nazwą tegoż ukła­du w samym ty­tu­le i... ku­pi­łem.

Ciągu dal­sze­go się za­pew­ne do­my­śla­cie. Mimo ceny lekko ponad prze­cięt­ną tanią chińsz­czy­znę (całe 15 zł), sprzęt oka­zał się tanią chińsz­czy­zną wła­śnie, opar­tą na ukła­dzie Win­Chi­pHe­ad CH341. I po­my­śleć, że za 7 zło­tych mo­głem mieć to samo, z ład­niej­szą nawet, prze­zro­czy­stą wtycz­ką ;-).

Pan pro­du­cent do­star­czył w kom­ple­cie małą płyt­kę CD, któ­rej zde­cy­do­wał się nie pod­pi­sy­wać nawet po chiń­sku. Cóż po­cząć, jakoś trze­ba sobie ra­dzić. Za­czą­łem od Win­dow­sa, li­cząc na to, że bę­dzie ła­twiej. Od­pa­li­łem in­sta­la­tor ste­row­ni­ka, coś tam po­mie­lił i za­mel­do­wał, że in­sta­la­cja za­koń­czy­ła się suk­ce­sem, a Ma­na­ger urzą­dzeń za­su­ge­ro­wał mi jed­no­znacz­nie, że mój kom­pu­ter wzbo­ga­cił się wła­śnie o port COM12. No to co, na Ami­dze od­pa­lam Terma, na lapku Putty, po obu stro­nach stan­dar­do­we 9600 bps 8N1, sprzę­to­we ste­ro­wa­nie prze­pły­wem (kabel ro­bi­łem sam, więc wiem, że jest do­brze po­łą­czo­ny). I co? I nic. Nie ban­gla.

Ręczny wybór sterownika w Windows 7Na trop wpa­dłem prze­glą­da­jąc roz­licz­ne fora. Za­zna­czam, że po­niż­sze te­sto­wa­łem na Win­dows 7. W Ma­na­ge­rze urzą­dzeń trze­ba roz­wi­nąć porty (COM i LPT), zna­leźć nasz USB-SE­RIAL CH340 i wy­ko­nać na nim dwu­klik. W nowo otwar­tym oknie od­kry­wa­my za­kład­kę Ste­row­nik i wci­ska­my Ak­tu­ali­zuj ste­row­nik. Wita nas ko­lej­ne okien­ko, w któ­rym wy­bie­ra­my Prze­glą­daj mój kom­pu­ter w po­szu­ki­wa­niu..., a na­stęp­nie Po­zwól mi wy­brać z listy ste­row­ni­ków.... Teraz, uwaga, wy­łą­cza­my opcję Pokaż zgod­ny sprzęt. Naj­wy­raź­niej ste­row­nik ma pro­blem z pra­wi­dło­wą iden­ty­fi­ka­cją chipa, bo­wiem po wy­bra­niu z lewej listy pro­du­cen­ta wch.​cn, po pra­wej wska­zu­je­my USB-SE­RIAL CH341, a nie 340, który za­in­sta­lo­wał się do­myśl­nie. Teraz bez­czel­nie igno­ru­je­my ostrze­że­nie Win­dow­sa o tym, że wy­bra­ny ste­row­nik może nie dzia­łać wła­ści­wie. Klik­nię­cie od­po­wied­nią ilość razy w Za­mknij koń­czy pracę.

Tym razem pełen suk­ces! Tek­sty pi­sa­ne na Ami­dze po­ja­wia­ją się w Putty, pi­sa­ne zaś na PC wy­świe­tla­ne są przez Terma. Mogę więc ode­tchnąć z ulgą, port sze­re­go­wy Amigi dzia­ła bez za­rzu­tu. Dla pew­no­ści zmie­niam jesz­cze po obu stro­nach szyb­kość na 38400 bps, nadal wszyst­ko OK. No to jesz­cze wkle­jam do ter­mi­na­la kil­ka­na­ście linii tek­stu, Amiga wy­świe­tla bez błę­dów. Mis­sion com­ple­ted.

No, pra­wie. A co z Li­nuk­sem? Skoro już mam po­łą­cze­nie, za­ma­rzy­ło mi się wy­sy­ła­nie de­bu­glo­gów z moich ami­go­wych pro­gra­mów przez port sze­re­go­wy na pe­ce­ta. A tam za­zwy­czaj od­pa­lam Li­nuk­sa, Win­dows uru­cha­mia­ny jest tylko w razie stanu wyż­szej ko­niecz­no­ści (czyli – naj­czę­ściej – chęci za­gra­nia w Call of Duty...). Za­pusz­czam więc Ubun­tu, wty­kam USB i rzu­cam dmesg w ter­mi­na­lu. O pro­szę, wy­krył i nawet sam za­ła­do­wał od­po­wied­ni moduł ch341. Nor­mal­nie pełen ser­wis klien­ta. To ja ra­do­śnie scre­en /dev/tty­US­B0 38400 i za­czy­nam pisać. Za­miast tego co piszę, po­ja­wia­ją mi się na Ami­dze ja­kieś krza­czo­ry. Przy­glą­dam się kodom ASCII i od­no­szę wra­że­nie, że bit 8 jest za­wsze usta­wia­ny, zaś bity 7 i 6 rów­nież by­wa­ją zmie­nia­ne. Z kolei pi­sa­nie na Ami­dze daje taki efekt, jak­bym pi­sząc trzy­mał wci­śnię­ty Con­trol, czyli jakby się ze­ro­wa­ły trzy górne bity.

Na szczę­ście jest Go­ogle. Do­wia­du­ję się wkrót­ce, że li­nuk­so­wy ste­row­nik jest nie­skoń­czo­ny i mię­dzy in­ny­mi nie ma ob­słu­gi bitów pa­rzy­sto­ści i paru in­nych usta­wień. Na szczę­ście jest łatka, pech chce, że łatka jest na wer­sję ste­row­ni­ka do ker­ne­la 3.18, a ja mam Ubun­tu LTS czyli ker­nel 3.13. Pan na blogu stwier­dza, że naj­pierw chciał zback­por­to­wać ste­row­nik, ale potem do­szedł do wnio­sku, że za dużo ro­bo­ty i skom­pi­lo­wał sobie now­szy ker­nel. Tu na­stę­pu­je 50 li­ni­jek po­le­ceń shel­la.

Putty na Linuksie połączony z AmigąJa ro­zu­miem, że każdy li­nuk­so­wy hob­by­sta sobie kom­pi­lu­je ker­nel co so­bo­tę przy śnia­da­niu, ale od grze­ba­nia w ker­ne­lu to ja mam Amigę, Li­nuk­sa się tu używa, jak, nie przy­mie­rza­jąc, młot­ka. Na szczę­ście ktoś po­sta­no­wił upro­ścić mi życie i jed­nak zback­por­to­wał ten kod do 3.13. Co praw­da ten bez­po­śred­ni link na ser­wer Me­dia­Fi­re nie wzbu­dził mo­je­go wiel­kie­go za­ufa­nia. W środ­ku jest jed­nak kod źró­dło­wy. Po­dejrz­li­wie go przej­rza­łem, po­czy­ta­łem sobie też ma­ke­fi­le. Cóż, je­że­li ktoś tam wsa­dził back­do­ora to chylę czoła ;-). Skom­pi­lo­wa­łem, roz­miar zbli­żo­ny, MD5 się nie zga­dza, ale może ko­le­ga kom­pi­lo­wał na 32 bity... Tak czy ina­czej oczy­wi­ście in­smo­dem za­apli­ko­wa­łem moją bi­nar­kę...

Tym razem nie­na­gan­nie za­dzia­łał za­rów­no putty jak i scre­en, więc pełen suk­ces. Po­zo­sta­ło mi jesz­cze sko­pio­wać ch341.​ko w od­po­wied­nie miej­sce, żebym nie mu­siał ręcz­nie wty­kać mo­du­łu w ker­nel za każ­dym razem. Mam jed­nak dziw­ne wra­że­nie, że każda au­to­ma­tycz­na ak­tu­ali­za­cja ker­ne­la mi go bę­dzie nad­pi­sy­wać, ale to się jesz­cze okaże. Tym­cza­sem wra­ca­jąc do MIDI, skoro port sze­re­go­wy w Ami­dze mam spraw­ny, to pro­blem tkwi chyba w trans­op­to­rze. Przy­stą­pię więc do dal­szych badań, o czym nie omiesz­kam do­nieść uprzej­mie P.T. pu­blicz­no­ści.