Podłączyłem odbiornik podczerwieni do portu USB ... (ostatnia linia dmesg mówi o pliku urządzenia)
$ dmesg
[10496.596063] usb 7-2: new full-speed USB device number 2 using uhci_hcd
[10496.751112] usb 7-2: New USB device found, idVendor=0df7, idProduct=0620
[10496.751117] usb 7-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[10496.751120] usb 7-2: Product: USB-Serial Controller
[10496.751124] usb 7-2: Manufacturer: Prolific Technology Inc.
[10496.787441] usbcore: registered new interface driver usbserial
[10496.787467] usbcore: registered new interface driver usbserial_generic
[10496.787483] usbserial: USB Serial support registered for generic
[10496.795104] usbcore: registered new interface driver pl2303
[10496.795129] usbserial: USB Serial support registered for pl2303
[10496.795160] pl2303 7-2:1.0: pl2303 converter detected
[10496.807238] usb 7-2: pl2303 converter now attached to ttyUSB0
Potem poszedłem spróbować ...
$ sudo cat /dev/ttyUSB0
ale brak danych wyjściowych, po prostu zawiesza się. Mimo że po naciśnięciu dowolnego przycisku na pilocie dioda LED odbiornika podczerwieni miga, więc wydaje się, że działa.
Dlaczego tak może być?
uwagi:
powyższe polecenie kończy działanie, gdy usuwam urządzenie z portu USB i wypisuje „cat: ttyUSB0: Brak takiego urządzenia”, a dmesg drukuje 3 linie:
[13707.264086] usb 7-2: USB disconnect, device number 2 [13707.264894] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0 [13707.264915] pl2303 7-2:1.0: device disconnected)
w przypadku plików urządzeń dla klawiatury działa to np .:
$ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd
produkuje wiele dziwnych znaków na konsoli, gdy naciskam dowolny klawisz na klawiaturze
- to samo dzieje się na innych portach USB
stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0
zamiast tego.Odpowiedzi:
Myślę, że w przypadku urządzeń szeregowych musisz ustawić prędkość transmisji, zanim cokolwiek zrobią. Nie jestem pewien, jak to zrobić z wiersza poleceń, aby zabrać się
cat
do pracy, ale możesz użyć emulatora terminali, który się tym zajmie.Spróbuj
minicom
lubscreen
(tj.screen /dev/ttyUSB0 115200
- zamień 115200 na szybkość transmisji twojego odbiornika IR).źródło
Zignoruj odpowiedź dotyczącą potrzeby zainicjowania połączenia USB - zostało już zainicjowane po podłączeniu urządzenia.
Jeśli chcesz tylko sprawdzić, czy działa, użyj
dd if=/dev/ttyUSB0
. Jeśli chcesz odczytać te znaki, potrzebujesz terminalu szeregowego. Użyjminicom
(CLI, potrzebujesz instrukcji),picocom
(może sam to wymyślić),cutecom
(ładny interfejs graficzny, łatwy) lubscreen
(CLI, ale naprawdę łatwy). Musisz znać szybkość transmisji. 90% to albo 115200, albo 9600, równie dobrze 57600, 38400 lub 19200.Przy okazji, jakiego odbiornika używasz? Czy możesz podać nam link do strony produktu lub opisu?
źródło
To może nie pomóc, ale oto podobny problem, który miałem w przeszłości. Kiedy przechwytuję plik urządzenia dla mojej myszy bezpośrednio (tj. Za pomocą
cat /dev/input/by-id/usb-<mymouse>
), otrzymuję dane wyjściowe podobne do tego, co otrzymujesz za pomocą klawiatury (tj. Bełkot). Jednak niektóre ruchy myszy, takie jak kliknięcie lewym przyciskiem, nie generują żadnych znaków do wydrukowania, więc terminal nic nie pokazuje.Oczywiście, mysz nadal coś robi, po prostu nie widzimy tego
cat
, pobierając plik urządzenia. Na szczęście jądro ma ciekawą funkcję o nazwie usbmon, która jest pomocna w podsłuchiwaniu surowego wyjścia binarnego urządzeń usb. Korzystając z tego, możemy dokładnie zobaczyć, co się dzieje, gdy wykonujemy (powiedzmy) lewy przycisk myszy, podczas gdy robienie tego samego poprzez/dev
często nie pokazuje niczego.Ponownie może to nie pomóc, ale oto jak korzystać z usbmon:
Upewnij się, że twoje jądro ma włączoną usbmon. Wyjście:
zcat /proc/config.gz | grep USB_MON
powinno mieć albo jedno
=m
albo drugie=y
.Jeśli tak
=m
, to załaduj modułsudo modprobe usbmon
Aby upewnić się, że wszystkie gniazda USB są wyświetlane w odpowiednim miejscu, uruchom:
ls /sys/kernel/debug/usb/usbmon
Powinieneś zobaczyć coś takiego:
0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
Różne liczby odnoszą się do różnych portów USB, a te z 0 na początku dają zagregowane dane wyjściowe wszystkich portów USB. Na przykład uruchamianie
cat /sys/kernel/debug/usb/usbmon/0u
pokazuje dokładnie to, co robi urządzenie, nawet w przypadkachcat
, gdy plik w nim/dev
nic nie pokazał.Niezależnie od tego, czy to rozwiąże problem, czy nie, może być pomocny w przyszłości, ponieważ często jest to bardziej pomocny sposób podsłuchiwania na urządzeniach USB niż
/dev
.Powodzenia :)
źródło
Dla mnie była to zbyt niska prędkość transmisji. Dane wyjściowe pojawiły się, gdy ponownie skonfigurowałem system (urządzenie i port) do użycia 300 zamiast 150.
źródło
Wydaje mi się, że pamiętam, że USB jest protokołem, który wymaga komunikacji komputera z komputerem. Nie wolno mówić samodzielnie. Więc sterownik faktycznie mówi do surowego urządzenia, a następnie przechwytuje dane wyjściowe. Jednak to tylko przeczucie, będę też czekał na kolejną odpowiedź, aby potwierdzić moje podejrzenia.
źródło