为什么“cat ttyUSB0”不产生输出?

nlo*_*fan 15 usb input devices files cat

我将红外接收器连接到 USB 端口......(dmesg 的最后一行告诉设备文件)

$ 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
Run Code Online (Sandbox Code Playgroud)

然后我就继续尝试了......

$ sudo cat /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

但没有输出,只是挂起。尽管如此,当我按下遥控器上的任何按钮时,红外接收器设备的 LED 会闪烁,所以这似乎确实有效。

为什么会这样?


笔记:

  • 当我从 USB 端口移除设备并打印“cat: ttyUSB0: No such device”时,上述命令退出,dmesg 打印 3 行:

     [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)
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用键盘的设备文件可以工作,例如:

     $ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd 
    
    Run Code Online (Sandbox Code Playgroud)

    当我按下键盘上的任意键时,控制台上会产生许多奇怪的字符

  • 其他 USB 端口也会发生同样的情况

Law*_*ceC 5

我认为对于串行设备,您必须在执行任何操作之前设置波特率。我不确定如何从命令行执行此操作才能开始cat工作,但您可以使用终端模拟器来处理它。

尝试minicomscreen(即screen /dev/ttyUSB0 115200- 将 115200 替换为您的红外接收器的波特率。)


ori*_*ion -1

我好像记得USB是一个需要电脑发起通信的协议。不允许它自己说话。因此,驱动程序实际上与原始设备对话,然后捕获输出。不过,这只是预感,我还会等待另一个答案来证实我的怀疑。