如何从串口转USB设备读取数据?

问题描述

我使用串行转 USB 电缆将传感器设备连接到我的 Ubuntu 20 机器。我知道要从中传输数据,我需要运行以下命令:

  1. 使用 sudo -I 输入 root。
  2. 使用 stty -F /dev/ttyACM0 9600 cs8 -cstopb -parenb 设置虚拟 COM 端口。
  3. 使用 echo -e "some_string" > /dev/ttyACM0 向设备发送命令以启动数据流。
  4. 使用 cat < /dev/ttyACM0 流式传输数据。

但是,我无法确定我的设备是否已连接为 /dev/ttyACM0。我该如何设置?目前它的路径是 /dev/bus/usb/001/005,尽管每次插入设备时最后一个数字都会改变。

为了回应下面的评论,这是我断开设备并运行 dmesg | tail 时得到的输出(我编辑了一些实际值):

[89092.291151] usb 1-1: USB disconnect,device number 11
[89100.310893] usb 1-1: new full-speed USB device number 12 using xhci_hcd
[89100.467562] usb 1-1: New USB device found,idvendor=SOME_ID,idProduct=SOME_PRODUCT,bcdDevice=SOME_BCD_DEVICE
[89100.467565] usb 1-1: New USB device strings: Mfr=1,Product=2,SerialNumber=0
[89100.467567] usb 1-1: Product: SOME_PRODUCT
[89100.467569] usb 1-1: Manufacturer: SOME_MANUFACTURER

编辑:我刚刚发现我可以使用 sudo modprobe usbserial vendor=SOME_ID product=SOME_PRODUCT 使 ttyUSB0 可用。但是,将其插入上述命令并运行 screen /dev/ttyUSB0 只会返回大量 ``` 字符。请注意,拔下设备时,这会停止。

解决方法

我设法让这个工作。命令是:

sudo -i
rmmod ftdi_sio
rmmod usbserial
modprobe ftdi-sio
echo -n VENDOR_ID PRODUCT_ID | sudo tee /sys/bus/usb-serial/drivers/ftdi_sio/new_id
stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb
echo -e "uud1\r" > /dev/ttyUSB0
screen /dev/ttyUSB0