Ryšys tarp dviejų kompiuterių per USB 2025.05.20 at 14:51
Kartais reikia tokio dalyko, sujungtu du kompiuteriu per USB. Arba bet kokius kitokius du prietaisus per USB, pavyzdžiui, kompiuterį ir kokių nors gudrių staklių valdymo bloką su USB jungtimi. Taigi, tiesioginio USB – USB ryšio nėra, nes tam reiktų rašyti specialias tvarkykles ir dar knistis su visokiais papildomais programavimo/komunikacijos reikalais. O daroma viskas paprasčiau – USB iš abiejų pusių paverčiamas RS-232, o tie jau komunikuoja tarpusavyje. Kompiuteriai puikiausiai moka dirbti su RS-232, tvarkyklės dažniausiai jau būna įdiegtos arba automatiškai įsidiegia, taigi, labai supaprastėja ryšys netgi tarp dviejų normalių kompiuterių. Taigi, techninė užduotis:
- Reikalingas laidas / adapteris / sujungimas, kuriuo būtų galima sujungti du kompiuterius arba kitus įrenginius, kurie neturi specialių tvarkyklių, bet dirba per USB;
- Jeigu reikia – maitinimas nuo USB jungties;
- Tvarkyklės turi būti diegiamos automatiškai arba lengvai randamos Internete;
- Turi būti paprastas naudoti;
- Turi būti saugus naudoti.
Kol kas tiek, jeigu darbo eigoje atsiras naujų užduočių – papildysiu. Šitoje vietoje reikia prisiminti senovę, nes jau viskas yra išrastą, o tai kas nauja – gerai pamiršta sena. Šiuo atveju pamiršta – tai senoviškas kabelis, kuris vadinosi NULL-MODEM. Jo esmė – dviejų kompiuterių ar kitokių prietaisų sujungimas per gryną RS-232, sukryžminant (nors man, pagal prasmę, aiškesnis žodis – krosinant) TX ir RX laidus, tai yra, vieno prietaiso TX jungiasi į kito RX, o kito prietaiso TX jungiasi į to pirmojo RX. Va ir visas stebuklas, taip padarius ryšys tarp RS-232 prietaisų jau yra. Dabar tik reikia tą RS-232 paversti į USB abiejuose galuose. Ai, ir iš karto pasakau, kad nesigilinam į įtampų lygius, ar tai bus TTL ar tikras RS-232. Ir dar, kad suprastumėte – kompiuterio viduje RS-232 jungiamas į UART (Universal Asynchronous Receiver Transmitter), taigi galima iš karto imti USB-UART konverterį ir nekonvertuoti UART į RS-232. Daugiau papildomai aiškinti kuo skiriasi ir kada kas naudojama tingiu, bet turėkime galvoje, kad RS-232 ir UART įtampų lygiai skiriasi. Dabar reikia parinkti šiuolaikinį USB – UART konverterį. Tie dalykai nėra nei labai naujiena, nei labai sudėtingi, pilna prikepta visokio lygio USB – UART arba RS-232 kabeliukų. Tik iš patirties žinau, kad FTDI mikroschemos dirba geriausiai, plius žinomas gamintojas, todėl tvarkyklių ieškoti nereiks. Atsidarius FTDI Internetinį katalogą peržiūrėjau visų galimų kandidatų informaciją ir išsirinkau FT230XS-R mikroschemą. Šalia ir VCP (Virtual COM Port) tvarkyklės. Pagal parametrus – visko čia net per daug arba lygiai tiek, kiek reikia. Plius yra galimybė programuoti mikroschemą, konfigūruoti ją pagal save, bet svarbiausia, ji daro tai ką reikia, konvertuoja USB į UART ir atgal. Iš minusų – mikroschema „valgo” 3,3V, o iš USB išeina 5V. Nors mikroschema tą minusą pati ir sutvarko, tai net ir jo nebelieka. Žiūrim mikroschemos aprašymą:
Štai ir schema, kaip mikroschemą užmaitinti nuo USB prievado. Matome, kad mikroschema suvalgo 5V, o paskui pati konvertuoja juos į reikiamus 3,3V ir išleidžia juos į laisvę per 3V3OUT kontaktą. Bet maksimaliai 50 mA. Toliau skaitant mikroschemos aprašymą randame ir visą USB į RS-232 konverterio schemą:
Ką mes čia matome ? USB lizdas prijungtas prie FT230X, kuris USB duomenų srautą iš savo UART prievado su TTL įtampų lygiais perduoda į „RS232 LEVEL CONVERTER” mikroschemą, kuri savo ruožtu pagaminą tą tikrąjį RS-232. Principe, sujungus tokias pat dvi schemas NULL MODEM pavyzdžiu, tai yra 1 schemos TXDATA į 2 schemos RXDATA ir 2 schemos TXDATA į 1 schemos RXDATA jau būtų galimas ryšys. Taip pat sukryžminus galima būtų sujungti ir RTS/CTS, nors savo schemoje šitų dviejų hardwarinio duomenų perdavimo valdymo kontaktų nenaudosiu. Bet jau girdžiu skaitančių komentarus – pala pala, o tai kam dar TTL keisti į RS-232, jeigu galima sujungti du TTL ? Teisingai, tas RS232 LEVEL CONVERTER mūsų reikmėm visiškai nereikalingas, metam lauk ir schema dar labiau supaprastėja. Bet, galvoju, paliekam LED indikatorius TX ir RX perdavimui iš kontaktų CBUS1 ir CBUS2. CBUS kontaktų funkcijos konfigūruojamos programuojant mikroschemą, bet CBUS1 ir CBUS2 pagal nutylėjimą jau sukonfigūruoti TX ir RX indikatorių valdymui. Jau schemos bazė kaip ir yra, bet mes inžinieriai, pramąstom ar tikrai jau viskas. O tolimesnė minčių eiga tokia – o jeigu reiks prijungti laptopą, maitinamą nuo vidinės baterijos prie stacionaraus kompiuterio, arba kokį specifinį įrenginį, su savo maitinimo prie laptopo irgi su savu maitinimu… Ir kaip tada jausis ir bendraus mikroschemos, užmaitintos nuo skirtingų USB lizdų ? Galima būtų USB lizdų pliusus ir minusus sujungti… Gal ir galima, bet kai nežinome, ką galutinis vartotojas jungs prie mūsų konverterio/adapterio – būtų per daug drąsu tvirtinti, kad neatsiras koks nors įtampų lygių neatitikimas, koks nors „ground loop’as”, ar dar koks monas, dėl kurio gali supleškėti kuris nors iš sujungtų prietaisų. Įprastai, kai duomenų perdavimui sujungiami du prietaisai su nuosavu maitinimu, norisi, kad jie būtų galvaniškai izoliuoti, tai yra, neturėtų elektrinio ryšio. Kaip pavyzdys – du kompiuteriai sujungti tarpusavyje optiniu kabeliu, jokio elektrinio ryšio, o duomenys vis tiek perduodami. Mūsų atveju naudoti optinį kabelį yra prabanga, todėl pradžiai pažiūrėsiu, tarkim, Digio kataloge kokių yra variantų. Duomenų perdavime, t. y. ten, kur nereikia didelių galingumų, bet reikia didelio greičio, dažniausiai naudojami kondensatoriniai izoliatoriai. Pagal mūsų FT230X matome, kad sujungti galima būtų 4 kanalus (TX, RX, CTS ir RTS), todėl pasirenku 4 kanalų skaitmeninį izoliatorių, dirbantį mums tinkamame maitinimo įtampų diapazone Texas Instruments ISO7742FQDWRQ1. Supaprastinta vieno kanalo schema:
Veikimas, paprastai, toks – paduodamas skaitmeninis signalas pakeičiamas moduliuotu signalu, kuris praeina per kondensatorius, tuo pačiu nusifiltruoja nuolatinė dedamoji, tada signalas dekoduojamas atgal į skaitmeną ir išleidžiamas laukan. Paprasčiau suprasti tiesiog žiūrint į blokinę schemą:
O signalas atrodo va taip:
Ateinantis meandras pakeičiamas kažkokio dažnio moduliuoti signalu, kuris lengvai pereina per kondensatorius ir patenka į priimančią dalį, kuri signalą demoduliuoja ir pagamina teisingą signalą išėjime. Ir abu tie signalai yra teisingi savo maitinimų atžvilgiu. Izoliuojančios mikroschemos vidinė schema:
Turim du kanalus į vieną pusę ir du kanalus į kitą pusę, būtent tai, ko reikia. Toks dalykas padėtų ir jeigu reiktų, pavyzdžiui, bendrauti 5V ir 3.3V sistemoms, mikroschema ištransliuotų viską teisinguose įtampų lygiuose ir niekas nesudegtų. Šiaip mikroschemos naudojimas paprastas, tik yra niuansų su trasavimu ir PCB, bet viskas detaliai aprašyta mikroschemos aprašyme. Dabar viską, kas parašyta, plius mikroschemų aprašymus, plius šiek tiek teorijos apie TTL/UART/RS-232 sumetam į puodą, vadinamą galva, gerai suplakame ir gauname va tokia vat schemą:
Palikau ir savo užrašus anglų kalba. Čia dvi identiškos schemos dalys, konvertuojančios USB į TTL, o per vidurį mūsų skaitmeninis izoliatorius. Signalinius „laidus” paspalvinau, kad lengviau atsirinkti kas kur eina ir prijungta. Kai jau yra schema, reikia pasidaryti plokštę. Plokštei kažkokių rimtų reikalavimų nekėliau, neskaitant tų, kurių reikėjo teisingam mikroschemos veikimui, bet pasistengiau daryti plokštę kuo mažesnę ir siauresnę.
Vat tokia ir gavosi nedidelė plokštė, su komponentais. Abu USB tokio tipo, kad būtų galima lengvai prijungti prie dviejų USB prailgintuvų arba plokštę iš karto kišti į kompiuterio USB lizdą, o kitą galą su prailgintuvu į kitą prietaisą. Vienu žodžiu fantazijos reikalas, o ir pačius USB lizdus galima pakeisti į norimos formos, tik truputį pakeičiant PCB. O gyvai plokštelė atrodo va taip:


Surinkus reikia pabandyti kaip tas daiktas veikia. Tam galima pasinaudoti ir vienu kompiuteriu, kuris turi bent 2 USB lizdus. Prijungiau prie to paties kompiuterio per USB šakotuvą, prietaisą rado kaip COM4 ir COM5 prievadus, todėl atidariau terminalo emuliatorių Putty abiem prievadams ir pabandžiau parašyti tekstą. Mintis tokia, kad jeigu veikia, tai tekstas, t. y. duomenys, iš vieno terminalo lango bus perduoti į kitą terminalo langą ir atvirkščiai.
Čia tiems, kas mėgsta kalbėtis su savimi, labai patogu . O adapteris tuo metu atrodo va taip:
LEDai mirksi, duomenys laksto, chm, tai turbūt užskaitom, kad veikia. Nors dar reiktų pabandyti tarp dviejų visai atskirų kompiuterių. Ir, kad nebūtų visai lengva, vienas kompiuteris bus mano darbinis Asus TUF Gaming A15 FA507NV su Windows 11 Home (jooo blyn, žiauriai prasileidau, kad ne PRO), o kitas laptopėlis su Windows 2000 Professional ! W11 aišku be klausimų pasigavo tvarkykles ir viskas su jais OK, o prijungus prie W2000PRO prasidėjo tvarkyklių diegimo vedlys. Lengvai susiradau tvarkykles FTDI puslapyje ir sušėriau vedliui, po to jam klausimų nebekilo. W2000PRO turi gimtąjį terminalą, tai pabandžiau su juo, bet ryšys buvo toks labiau vienpusis – iš senuko duomenys neateina, o į senuką iš Putty nueina. Tai dar parsiunčiau senesnę (0.61 berods) Putty versiją senukui ir viskas kuo puikiais veikia, abiem kryptimis duomenys vaikšto, tekstas pasirodo, tai bandymai baigti. Schemą ir plokšte dariau su EasyEDA, tai schemos ir plokštės failiukai šiai programai yra čia.
FT230X mikroschemos konfigūravimui naudojamas FT Prog įrankis, parsisiunčiamas iš FTDI puslapio. Nelabai turiu ką ten programuoti, bet prisijungti pabandysiu:
Kad bent kažką pakeisti, lendam į Hardware specific punktą, CBUS Signals:
Pabandymui C1 pasirenku Drive_1, turėtų tame išėjime visada būtų aukštas lygis. Iš tikrųjų, išjungus ir vėl prijungus adapterį, buvęs TX LEDas dabar šviečia pastoviai. Prie IO Pins > CBUS dar radau įdomų nustatymą:
Aprašyme lyg nemačiau, kad CBUS’ai mokėtų riboti srovę, bet gamyklinis nustatymas 4mA. O kam tada reikalingas LED rezistorius? Chm, o pabandom nustatyti 16 mA ir pažiūrėti, kas bus su tuo pastoviai šviečiančiu LED. Chm, nepasakyčiau, kad šviečia ryškiau. Tiesa kažkoks srovės ribojimas, matomai, visgi yra, nes prijungus prie USB sekundės daliai LED švystelna ryškiau, po to matyt apsiriboja srovė ir LED vėl tampa blankus. Bet yra visai įdomių galimybių nustatyti CBUS išvadų funkcijas: