开源串口驱动库
系统的串口
查看系统串口设备
ls /dev/ttyS* /dev/ttyUSB* /dev/ttyACM*
eg:
ls /dev/ttyS*
/dev/ttyS0 /dev/ttyS11 /dev/ttyS14 /dev/ttyS17 /dev/ttyS2 /dev/ttyS22 /dev/ttyS25 /dev/ttyS28 /dev/ttyS30 /dev/ttyS5 /dev/ttyS8
/dev/ttyS1 /dev/ttyS12 /dev/ttyS15 /dev/ttyS18 /dev/ttyS20 /dev/ttyS23 /dev/ttyS26 /dev/ttyS29 /dev/ttyS31 /dev/ttyS6 /dev/ttyS9
/dev/ttyS10 /dev/ttyS13 /dev/ttyS16 /dev/ttyS19 /dev/ttyS21 /dev/ttyS24 /dev/ttyS27 /dev/ttyS3 /dev/ttyS4 /dev/ttyS7
你的系统列出了多个 ttyS*
设备,但这并不代表你的电脑真的有这么多物理串口。这是 Linux 内核的常见行为,原因如下:
内核预分配机制
Linux 内核会预先创建一组ttyS*
设备节点(通常 0-31),即使没有对应的物理硬件。这是为了:兼容可能存在的硬件(如多串口卡)
避免动态创建设备节点的开销
如何确认哪些是真实可用的串口?
# 查看物理串口信息
sudo dmesg | grep ttyS
输出示例(真实串口会显示详细信息):
[ 0.123456] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 1.654321] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
只有显示具体信息的才是真实存在的串口。
串口名称
ttyS3
是什么?
ttyS3
是 Linux 系统中串行端口(Serial Port)的设备名称,也可以理解为内核给物理串口分配的标识符,通常对应物理 UART 串口(如 RS-232)。
命名规则:
ttyS0
,ttyS1
, ...:linux中的物理串口(如windows上的 COM1、COM2)。ttyUSB0
,ttyUSB1
, ...:USB 转串口设备(如 PL2303、CH340 等芯片)。ttyACM0
,ttyACM1
, ...:USB CDC ACM 设备(如某些 Arduino、STM32 的 USB 虚拟串口)。
COM 和 ttyS 的区别与关系**
1. COM*
(Windows 系统)
定义:
COM1
、COM2
等是 Windows 系统对串行端口(Serial Port)的命名,对应物理硬件(如主板上的 RS-232 接口)或虚拟串口(如 USB 转串口设备)。特点:
名称固定:
COM1
、COM2
...(最大到COM256
)。直接关联硬件:
COM1
通常对应主板上的 9 针串口(DB9 接口)。虚拟串口:USB 转串口设备会被分配为
COM3
、COM4
等。
2. ttyS*
(Linux 系统)
定义:
ttyS0
、ttyS1
等是 Linux 系统对物理串口的设备节点命名,位于/dev/ttyS*
。特点:
名称动态:
ttyS0
、ttyS1
...(内核预分配,可能多达ttyS31
)。物理串口:
ttyS0
通常对应主板上的 UART 端口(如 Intel 8250/16550 兼容芯片)。虚拟串口:USB 转串口设备在 Linux 中命名为
ttyUSB0
、ttyUSB1
等(非ttyS*
)。
串口不是USB口
串口使用的是串口通信协议,即(TX--RX接线);
USB使用的是USB协议。