Linux上的串口和USB设备有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux上的串口和USB设备有什么区别?相关的知识,希望对你有一定的参考价值。
我连接了两个带有Linux系统的MCU,一个带有串行接口,另一个带有USB接口.Linux系统将串行接口识别为ttys1,USB接口识别为28.对于串行接口,我可以通过/ dev / ttys1设备文件发送和接收数据。但是对于USB接口,我无法使用/ dev / usb / 001/28设备文件发送和接收数据。
- 为什么我们无法使用与串行接口相同的特定设备文件访问Linux上的USB设备?
- 我们如何向连接的USB设备发送数据和从连接的USB设备接收数据?我已经read this post说我们必须使用libusb库编写代码。如果是这样,为什么我们需要它?
For serial interface: echo -e " x20" > /dev/ttys1 success For USB interface: echo -e " x20" > /dev/ttys1 write error: Invalid argument
答案
像/dev/bus/usb/001/28
这样的文件是由Linux系统中的核心USB驱动程序创建的(参见usb/core/devio.c)。这个驱动程序对串口没有任何了解,它只知道USB。因此,您可以发送到此文件的命令类似于“从端点2读取32个字节”或“将11个字节发送到端点3”,您将使用libusb或libusbp等库来发送这些命令。
但是,如果您可以使用实际的串行驱动程序实现相同的功能,我不建议这样做,这些驱动程序创建/dev/tty*
形式的设备节点,并在/dev/serial/by-id
中创建符号链接。您可以使用像您正在做的shell那样从这些设备读取和写入,但我经常发现它不能按照我期望的方式工作。您可以使用PuTTY或screen
等串行终端程序在串行端口上发送和接收ASCII字节(即键入要发送的字符)。你也可以写一个C程序到open端口,使用termios设置其串口参数,然后从read和write设置它。
以上是关于Linux上的串口和USB设备有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章