Linux上的串行设备和USB设备之间的区别?

时间:2018-12-12 06:16:28

标签: linux serial-port usb

我用Linux系统连接了两个MCU,一个带有串行接口,一个带有USB接口。Linux系统将串行接口识别为ttys1,将USB接口识别为28。对于串行接口,我可以通过/ dev / ttys1设备发送和接收数据。文件。但是对于USB接口,我无法使用/ dev / usb / 001/28设备文件发送和接收数据。

  1. 为什么我们不能使用与串行接口相同的特定设备文件在Linux上访问USB设备?
  2. 我们如何向连接的USB设备发送和接收数据?我已经read this post说必须使用libusb库编写代码。如果需要,为什么?

    For serial interface:
    echo -e "\0x20" > /dev/ttys1
    success
    
    For USB interface:
    echo -e "\0x20" > /dev/ttys1
    write error: Invalid argument
    

1 个答案:

答案 0 :(得分:0)

诸如/dev/bus/usb/001/28之类的文件是由Linux系统中的核心USB驱动程序创建的(请参见usb/core/devio.c)。该驱动程序对串行端口一无所知,仅对USB有所了解。因此,您可以发送到该文件的命令是“从端点2读取32个字节”或“向端点3发送11个字节”之类的事情,并且您将使用libusb或libusbp之类的库来发送这些命令。

但是,如果您可以使用实际的串行驱动程序来实现相同的目的,则不建议这样做,该串行驱动程序创建格式为/dev/tty*的设备节点,并在/dev/serial/by-id中创建符号链接。您可能能够像以前一样使用外壳从这些设备进行读写,但是我经常发现它无法按我期望的方式工作。您可以使用PuTTY或screen之类的串行终端程序在串行端口上发送和接收ASCII字节(即,键入字符以发送它们)。您也可以编写C程序到open端口,使用termios设置其串行端口参数,然后从readwrite