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


13

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 tentei ...

$ sudo cat /dev/ttyUSB0

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

Por que poderia ser isso?


notas:

  • o comando acima é encerrado quando eu removo o dispositivo da porta USB e imprimo "cat: ttyUSB0: Não existe esse dispositivo" 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 de dispositivo do 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

2
tente em stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0vez disso.
Stéphane Chazelas 23/03

@ Stephane Chazelas: semelhante nada acontece
nlognfan


Se você não estiver obtendo nenhuma saída, suspeito que seja um problema de driver ou que o hardware não esteja sendo detectado / identificado corretamente. Isso também pode ser útil: help.ubuntu.com/community/Lirc_USB-UIRT
slm

Observe que o uso de transceptores de infravermelho com pontes USB para serial geralmente não funciona.
groxxda

Respostas:


3

Eu acho que para dispositivos seriais você precisa definir a taxa de transmissão antes que eles façam qualquer coisa. Não sei ao certo como fazer isso na linha de comando para começar cata trabalhar, mas você pode usar um emulador de terminal que cuida disso.

Tente minicomou screen( ou seja, screen /dev/ttyUSB0 115200substitua 115200 pela taxa de transmissão do seu receptor de IR).


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ê realmente deseja ler esses caracteres, precisa do terminal serial. Use minicom(CLI, manual necessário), picocom(pode descobrir por conta própria), cutecom(interface gráfica agradável, fácil) ou screen(CLI, mas realmente fácil). Você precisará conhecer a taxa de transmissão. 90% é 115200 ou 9600, e pode ser 57600, 38400 ou 19200.

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


1

Isso pode não ajudar, mas aqui está um problema semelhante que tive no passado. Quando seleciono o arquivo do dispositivo para o mouse diretamente (ou seja, usando cat /dev/input/by-id/usb-<mymouse>), recebo uma saída semelhante à do teclado (ou seja, sem sentido). No entanto, alguns movimentos do mouse, como o clique esquerdo, não geram caracteres imprimíveis, portanto o terminal não mostra nada.

Obviamente, o mouse ainda está fazendo algo, simplesmente não podemos vê-lo através catdo arquivo do dispositivo. Felizmente, o kernel possui um recurso interessante chamado usbmon, que é útil para espionar a saída binária bruta dos dispositivos usb. Usando isso, podemos ver exatamente o que está acontecendo quando executamos (digamos) um clique esquerdo, enquanto fazer o mesmo via /devmuitas vezes não mostra nada.

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

  1. Verifique se o seu kernel tem o usbmon ativado. A saída de:
    zcat /proc/config.gz | grep USB_MON
    deve ter um =mou =ynele.

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

  3. Para garantir que todos os soquetes USB estejam 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 números diferentes 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, a execução cat /sys/kernel/debug/usb/usbmon/0umostra exatamente o que o dispositivo está fazendo, mesmo nos casos em que cato arquivo /devnão mostrou nada.

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

Boa sorte :)


1

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


-1

Lembro-me de que o USB é um protocolo que requer que o computador inicie a comunicação. Não é permitido falar por conta própria. Portanto, o driver realmente fala no dispositivo bruto e captura a saída. No entanto, isso é apenas um palpite, também vou esperar por outra resposta para confirmar minhas suspeitas.


Mas esta é uma pergunta sobre uma porta serial. O fato de a porta serial estar conectada com USB não está aqui nem ali.
Celada
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.