Wirtualny port szeregowy

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Takedowner
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 05 paź 2008, 17:50
Płeć: Mężczyzna
Środowisko graficzne: GNOME

Wirtualny port szeregowy

Post autor: Takedowner »

Witam,
Chciałem poprosić Was o przedstawienie koncepcji(algorytmu) do napisania wirtualnego portu szeregowego pod linuxem. Ostatecznym celem tego projektu, ma być realizacja połączenia pomiędzy komputerem, a urządzeniem od strony którego łączę go przez port RS232 z komputerem przez interfejs USB. Z góry dziękuję za odpowiedź. Pozdrawiam
Awatar użytkownika
mszubart
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 14 lis 2006, 08:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Unity
Architektura: x86

Re: Wirtualny port szeregowy

Post autor: mszubart »

Jeśli masz jedną z tych przejściówek USB<->RS232 za 27,90 zł z elektronicznego za rogiem, to po podłączeniu jej do PC
będzie widoczna jako /dev/ttyUSBx, gdzie x to numerek od 0 do (ile tam sobie ich podłączysz).

Potem już (bo zakładam, że sam chcesz napisać software)
http://en.wikibooks.org/wiki/Serial_Pro ... rial_Linux
czy jakieś tam podobne wygoglujesz sobie

Pamiętaj tylko, że w przejściówce USB za 28 zł (te droższe są takie same) masz tylko 3 piny aktywne (w przypływach więcej, ale to już za większą kasę): Tx, Rx i GND.
W tym oczywiście GND sobie nie posterujesz.

Marzenia o podłączeniu tak starej myszki poszły właśnie w kąt :>
Takedowner
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 05 paź 2008, 17:50
Płeć: Mężczyzna
Środowisko graficzne: GNOME

Re: Wirtualny port szeregowy

Post autor: Takedowner »

Witam,
Dziękuję za odpowiedź. Mam jednak taki problem, że w katalogu /dev mam utworzone stałe węzły do USB:

Kod: Zaznacz cały

usb1
usb2
usbdev1.1_ep00
usbdev1.1_ep81
usbdev1.2_ep00
usbdev1.2_ep81
usbdev2.1_ep00
usbdev2.1_ep81
usbdev2.2_ep00
usbdev2.2_ep02
usbdev2.2_ep03
usbdev2.2_ep81
usbdev2.2_ep84
Posiadam dwa porty USB i po podłączeniu urządzenia jego struktura się nie zmienia. Moje pytanie jest następujące, w jaki sposób rozpoznam, który plik powinienem użyć do otwarcia i manipulacją portu USB?
Z góry dziękuję za odpowiedź. Pozdrawiam

PS. Czy wirtualny port tworzy się jedynie dla RS <-> USB ?
Awatar użytkownika
mszubart
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 14 lis 2006, 08:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Unity
Architektura: x86

Re: Wirtualny port szeregowy

Post autor: mszubart »

Porty szeregowe (przynajmniej w Ubuntu) to zwykle /dev/ttySx dla zwykłych portów (np. karta z portami na PCI) oraz
/dev/ttyUSBx dla przejściówek na USB.

Ważne jest, żebyś odwoływał się niejako do terminala, a nie samej przejściówki (tego usbdev).

Zauważ też, że ttySx będzie występował dla wszystkich możliwych portów szeregowych na płycie głównej (u mnie np do ttyS31) (nie koniecznie wyprowadzonych nawet z chipsetu).

Jak dowiedzieć się który jest który?
hmm... Z ttyUSB jest łatwo, jeśli Twoje urządzenie coś wysyła, to cat /dev/ttyUSBx wypluje Ci jakieś krzaczki :)
Pewnie znajdzie się tu jakiś guru i poda łatwiejszy sposób niż na chybił trafił (oby).
Takedowner
Piegowaty Guziec
Piegowaty Guziec
Posty: 21
Rejestracja: 05 paź 2008, 17:50
Płeć: Mężczyzna
Środowisko graficzne: GNOME

Re: Wirtualny port szeregowy

Post autor: Takedowner »

Super, dziękuję za wyjaśnienie. Chciałbym jeszcze zapytać, bo widzę, że posiadasz wiedzę na ten temat, w jaki sposób jest reprezentowane połączenie poprzez czyste USB, za pomocą którego mógłbym traktować ten plik, jako strumień do komunikacji przez zwykły kabel USB ? Jeszcze raz dziękuję za pomoc. Pozdrawiam.
Awatar użytkownika
mszubart
Sędziwy Jeż
Sędziwy Jeż
Posty: 43
Rejestracja: 14 lis 2006, 08:44
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Unity
Architektura: x86

Re: Wirtualny port szeregowy

Post autor: mszubart »

Widzisz, na końcu przejściówki USB<->RS232 jest wytczka DB-9, ale nie oznacza to, że dane lecą jakoś magicznie z usb na 232.
W tej końcówce jest cały układzik sterujący transmisją - emulator terminala ( coś w stylu usb driver + procek + przetwornica np. max232 ).
Sterownik w jądrze komunikuje się z tą wtyczką po USB i razem udają zwykły port szeregowy.

Jeśli interesuje Cię jak pisać sterowniki do urządzeń USB to zerknij na to:
http://free-electrons.com/doc/linux-usb.pdf

Ewentualnie w zrozumieniu tematu może pomóc Ci:
http://www.recursion.jp/avrcdc/index.html
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości