¿Por qué "cat ttyUSB0" no produce salida?

13

Conecté un receptor de infrarrojos a un puerto USB ... (la última línea de dmesg le dice al archivo 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

Luego lo probé ...

$ sudo cat /dev/ttyUSB0

pero sin salida, simplemente se cuelga. Aunque, cuando presiono cualquier botón en mi control remoto, el LED del dispositivo receptor de infrarrojos parpadea, por lo que parece funcionar.

¿Por qué podría ser eso?


notas:

  • el comando anterior se cierra cuando quito el dispositivo del puerto USB e imprime "cat: ttyUSB0: No such device", y dmesg imprime 3 líneas:

     [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 los archivos de dispositivo para teclado esto funciona, por ejemplo:

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

    produce muchos caracteres extraños en la consola cuando presiono cualquier tecla del teclado

  • lo mismo ocurre en otros puertos USB también
nlognfan
fuente
2
intente en su stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0lugar.
Stéphane Chazelas
@ Stephane Chazelas: de manera similar, no pasa nada
nlognfan
Si no obtiene ningún resultado, sospecho que es un problema del controlador o que el hardware no se detectó / identificó correctamente. Esto también puede ser útil: help.ubuntu.com/community/Lirc_USB-UIRT
slm
Tenga en cuenta que el uso de transceptores de infrarrojos con puentes USB a serie generalmente no funcionará.
groxxda

Respuestas:

3

Creo que para los dispositivos en serie hay que establecer la velocidad de transmisión antes de que hagan algo. No estoy seguro de cómo hacerlo desde la línea de comandos para poder cattrabajar, pero podría usar un emulador de terminal que se encargue de ello.

Pruebe minicomo screen(es decir screen /dev/ttyUSB0 115200, reemplace 115200 con la velocidad en baudios de su receptor IR).

LawrenceC
fuente
1

No tenga en cuenta la respuesta sobre la necesidad de iniciar la conexión USB: ya se inició cuando enchufó el dispositivo.

Si solo quieres comprobar si está funcionando, úsalo dd if=/dev/ttyUSB0. Si realmente quiere leer esos caracteres, necesita un terminal en serie. Use minicom(CLI, necesita manual), picocom(puede resolverlo usted mismo), cutecom(interfaz gráfica agradable, fácil) o screen(CLI, pero realmente fácil). Necesitará saber la velocidad en baudios. El 90% es 115200 o 9600, podría ser 57600, 38400 o 19200.

Por cierto, ¿qué tipo de receptor estás usando? ¿Podría darnos un enlace a una página o descripción del producto?

Арсений Пичугин
fuente
1

Puede que esto no ayude, pero aquí hay un problema similar que tuve en el pasado. Cuando busco el archivo del dispositivo para mi mouse directamente (es decir, usando cat /dev/input/by-id/usb-<mymouse>) obtengo un resultado similar al que obtienes con tu teclado (es decir, galimatías). Sin embargo, algunos movimientos del mouse, como el clic izquierdo, no generan caracteres imprimibles, por lo que el terminal no muestra nada.

Por supuesto, el mouse todavía está haciendo algo, simplemente no podemos verlo caten el archivo del dispositivo. Afortunadamente, el núcleo tiene una característica ordenada llamada usbmon que es útil para espiar la salida binaria sin formato de los dispositivos usb. Usando eso, podemos ver exactamente lo que sucede cuando realizamos (digamos) un clic izquierdo, mientras que hacer lo mismo a través de a /devmenudo no muestra nada.

De nuevo, esto puede no ayudar, pero aquí está cómo usar usbmon:

  1. Asegúrese de que su núcleo tenga habilitado usbmon. La salida de:
    zcat /proc/config.gz | grep USB_MON
    debería tener uno =mo =ymás.

  2. Si fue así =m, cargue el módulo consudo modprobe usbmon

  3. Para asegurarse de que todos los sockets usb se muestren en el lugar correcto, ejecute:
    ls /sys/kernel/debug/usb/usbmon
    Debería ver algo como:
    0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u

Los diferentes números se refieren a diferentes puertos USB, y los que tienen un 0 al frente dan la salida agregada de todos los puertos USB. Entonces, por ejemplo, la ejecución cat /sys/kernel/debug/usb/usbmon/0umuestra exactamente lo que está haciendo el dispositivo, incluso en los casos caten que el archivo /devno mostró nada.

Si esto resuelve su problema o no, puede ser útil en el futuro, ya que a menudo es una forma más útil de espiar dispositivos USB que /dev.

Buena suerte :)

Vamos a tener una aventura
fuente
1

Para mí fue el baudrate demasiado bajo. La salida apareció una vez que configuré el sistema (dispositivo y puerto) para usar 300 en lugar de 150.

Raigedas
fuente
-1

Me parece recordar que el USB es un protocolo que requiere que la computadora inicie la comunicación. No está permitido hablar solo. Entonces, el controlador realmente se comunica con el dispositivo sin procesar y luego captura la salida. Sin embargo, eso es solo una corazonada, también esperaré otra respuesta para confirmar mis sospechas.

Orión
fuente
Pero esta es una pregunta sobre un puerto serie. El hecho de que el puerto serie esté conectado con USB no está ni aquí ni allá.
Celada