Por que “cat ttyUSB0” não produz saída?

11

Eu conectei um receptor infravermelho a uma porta USB ... (a última linha do dmesg informa o arquivo do 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

Então eu continuei tentando ...

$ sudo cat /dev/ttyUSB0

mas sem saída, simplesmente trava. Mesmo assim, ao pressionar qualquer botão no meu controle remoto, o LED do dispositivo receptor infravermelho pisca, de modo que parece funcionar.

Por que isso poderia ser?

notas:

  • o comando acima é encerrado quando eu removo o dispositivo da porta USB e imprimo "cat: ttyUSB0: No such device", e o dmesg imprime 3 linhas:

     [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)
    
  • com os arquivos do dispositivo para o teclado isso funciona, por exemplo:

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

    produz muitos caracteres estranhos no console enquanto pressiono qualquer tecla do teclado

  • o mesmo acontece em outras portas USB também
por nlognfan 23.03.2014 / 08:57

5 respostas

3

Acho que para dispositivos seriais você precisa definir a taxa de transmissão antes de fazer qualquer coisa. Não tenho certeza de como fazer isso a partir da linha de comando para obter cat para funcionar, mas você poderia usar um emulador de terminal que cuida disso.

Teste minicom ou screen (ou seja, screen /dev/ttyUSB0 115200 - substitua 115200 pela taxa de transmissão do seu receptor de infravermelho.)

    
por 24.05.2014 / 07:49
1

Desconsidere a resposta sobre a necessidade de iniciar a conexão USB - ela já foi iniciada quando você conectou o dispositivo.

Se você quiser apenas verificar se está funcionando, use dd if=/dev/ttyUSB0 . Se você quiser realmente ler esses caracteres, você precisa de um terminal serial. Use minicom (CLI, precisa de manual), picocom (pode descobrir por si próprio), cutecom (interface gráfica agradável, fácil) ou screen (CLI, mas muito fácil). Você precisará saber a taxa de transmissão ... 90% é 115200 ou 9600, bem como 57600, 38400 ou 19200.

A propósito, que tipo de receptor você está usando? Você poderia nos dar um link para uma página ou descrição do produto?

    
por 25.06.2014 / 07:14
1

Isso pode não ajudar, mas aqui está um problema semelhante que tive no passado. Quando eu cato o arquivo do dispositivo para o meu mouse diretamente (ou seja, usando cat /dev/input/by-id/usb-<mymouse> ), recebo uma saída semelhante à que você obtém com o teclado (ou seja, rabiscos). No entanto, alguns movimentos do mouse, como o clique esquerdo, não geram nenhum caractere imprimível, portanto o terminal não mostra nada.

É claro que o mouse ainda está fazendo alguma coisa, nós não podemos ver por cat 'o arquivo do dispositivo. Felizmente, o kernel tem um recurso interessante chamado usbmon, que é útil para escutas na saída binária bruta de dispositivos usb. Usando isso, podemos ver exatamente o que está acontecendo quando executamos (digamos) um clique com o botão esquerdo, enquanto que fazer a mesma coisa via /dev geralmente não mostra nada.

Novamente, isso pode não ajudar, mas veja como usar o usbmon:

  1. Certifique-se de que seu kernel tenha o usbmon ativado. A saída de:
    zcat /proc/config.gz | grep USB_MON
    deve ter =m ou =y .

  2. Se foi =m , carregue o módulo com sudo modprobe usbmon

  3. Para certificar-se de que todos os soquetes usb estão aparecendo no lugar certo, execute:% ls /sys/kernel/debug/usb/usbmon
    Você deve ver algo como: 0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u

Os diferentes números referem-se a diferentes portas USB, e aqueles com um 0 na frente fornecem a saída agregada de todas as portas USB. Por exemplo, executar cat /sys/kernel/debug/usb/usbmon/0u mostra exatamente o que o dispositivo está fazendo, mesmo nos casos em que cat 'ing o arquivo em /dev não mostrou nada.

Se isso resolve ou não seu problema, pode ser útil no futuro, já que muitas vezes é uma maneira mais útil de espionar dispositivos USB do que /dev .

Boa sorte:)

    
por 19.07.2014 / 23:47
1

Para mim, foi a taxa de transmissão muito baixa. A saída apareceu assim que eu reconfigurei o sistema (dispositivo e porta) para usar 300 em vez de 150.

    
por 26.01.2015 / 08:02
-1

Eu pareço lembrar que o USB é um protocolo que requer que o computador inicie a comunicação. Não é permitido falar sozinho. Assim, o driver realmente fala com o dispositivo bruto e, em seguida, captura a saída. No entanto, isso é apenas um palpite, eu também vou esperar por outra resposta para confirmar minhas suspeitas.

    
por 23.03.2014 / 14:51