Perché "cat ttyUSB0" non produce output?


13

Ho collegato un ricevitore a infrarossi a una porta USB ... (l'ultima riga di dmesg indica il file del dispositivo)

$ 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

Poi ho continuato a provarlo ...

$ sudo cat /dev/ttyUSB0

ma nessun output, si blocca semplicemente. Anche se, mentre premo un tasto qualsiasi sul telecomando, il LED del dispositivo ricevitore a infrarossi lampeggia, quindi sembra funzionare.

Perché potrebbe essere?


Appunti:

  • il comando sopra si chiude quando rimuovo il dispositivo dalla porta USB e stampa "cat: ttyUSB0: nessun dispositivo del genere" e dmesg stampa 3 righe:

     [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)
    
  • con i file del dispositivo per tastiera funziona, ad es .:

     $ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd 
    

    produce molti caratteri strani sulla console mentre premo qualsiasi tasto della tastiera

  • lo stesso accade anche su altre porte USB

2
prova stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0invece.
Stéphane Chazelas,

@ Stephane Chazelas: allo stesso modo non succede nulla
nlognfan il


Se non si ottiene alcun output, sospetto che si tratti di un problema con il driver o che l'hardware non sia stato rilevato / identificato correttamente. Questo potrebbe rivelarsi utile anche: help.ubuntu.com/community/Lirc_USB-UIRT
slm

Si noti che l'utilizzo di ricetrasmettitori a infrarossi con bridge da USB a seriale di solito non funziona.
groxxda,

Risposte:


3

Penso che per i dispositivi seriali devi impostare il baud rate prima che facciano qualsiasi cosa. Non sono sicuro di come farlo dalla riga di comando per metterci catal lavoro, ma potresti usare un emulatore di terminale che se ne occupa.

Prova minicomo screen(es. screen /dev/ttyUSB0 115200- sostituisci 115200 con il baud rate del tuo ricevitore IR.)


1

Ignora la risposta sulla necessità di avviare la connessione USB: è già stata avviata quando hai collegato il dispositivo.

Se vuoi solo controllare se funziona, usa dd if=/dev/ttyUSB0. Se vuoi davvero leggere quei caratteri, hai bisogno di un terminale seriale. Usa minicom(CLI, bisogno del manuale), picocom(potrebbe capirlo da solo), cutecom(bella interfaccia grafica, facile) o screen(CLI, ma davvero facile). Dovrai conoscere il baudrate .. Il 90% è 115200 o 9600, potrebbe anche essere 57600, 38400 o 19200.

A proposito, che tipo di ricevitore stai usando? Potresti darci un link a una pagina di prodotto o una descrizione?


1

Questo potrebbe non aiutare, ma ecco un problema simile che ho avuto in passato. Quando cerco direttamente il file del dispositivo per il mio mouse (cioè usando cat /dev/input/by-id/usb-<mymouse>) ottengo un output simile a quello che ottieni con la tua tastiera (cioè senza senso). Tuttavia, alcuni movimenti del mouse, come il clic sinistro, non generano caratteri stampabili, quindi il terminale non mostra nulla.

Certo, il mouse sta ancora facendo qualcosa, semplicemente non possiamo vederlo dal catfile del dispositivo. Fortunatamente il kernel ha una caratteristica ordinata chiamata usbmon che è utile per intercettare l'output binario non elaborato dei dispositivi USB. Usandolo, possiamo vedere esattamente cosa sta succedendo quando eseguiamo (diciamo) un clic sinistro, mentre fare la stessa cosa tramite /devspesso non mostra nulla.

Ancora una volta, questo potrebbe non essere d'aiuto, ma ecco come usare usbmon:

  1. Assicurati che il tuo kernel abbia usbmon abilitato. L'output di:
    zcat /proc/config.gz | grep USB_MON
    dovrebbe avere uno =mo =yin esso.

  2. In tal caso =m, caricare il modulo consudo modprobe usbmon

  3. Per assicurarti che tutte le prese USB siano visualizzate nel posto giusto, esegui:
    ls /sys/kernel/debug/usb/usbmon
    Dovresti vedere qualcosa del tipo:
    0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u

I diversi numeri si riferiscono a diverse porte USB e quelli con uno 0 davanti forniscono l'output aggregato di tutte le porte USB. Quindi, ad esempio, l'esecuzione cat /sys/kernel/debug/usb/usbmon/0umostra esattamente cosa sta facendo il dispositivo, anche nei casi in cui catil file in /devnon mostra nulla.

Indipendentemente dal fatto che questo risolva il tuo problema o meno, potrebbe essere utile in futuro, poiché è spesso un modo più utile di intercettare su dispositivi USB rispetto a /dev.

In bocca al lupo :)


1

Per me il baudrate era troppo basso. L'output è apparso dopo aver riconfigurato il sistema (dispositivo e porta) per utilizzare 300 anziché 150.


-1

Mi sembra di ricordare che USB è un protocollo che richiede al computer di avviare la comunicazione. Non è permesso parlare da solo. Quindi il driver effettivamente parla nel dispositivo non elaborato e quindi cattura l'output. Tuttavia, questo è solo un sospetto, aspetterò anche un'altra risposta per confermare le mie sospensioni.


Ma questa è una domanda su una porta seriale. Il fatto che la porta seriale sia connessa con USB non è né qui né lì.
Celada,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.