串口旁路监听

1. 原理

在串行通信(Serial Communication)中,引脚定义如下:

引脚 定义
TXD (Transmit Data) 数据的输入通道
RXD (Receive Data) 数据的输出通道
GND (Ground) 电路的公共电平参考基准

1.1 TXD (Transmit Data)

定义:数据的输出通道。它代表设备的“嘴巴”。

工作原理:当设备需要向外发送信息时,内部的 UART 控制器会将并行数据转换为串行数据,然后通过 TXD 引脚,按照设定的波特率,将数据一位一位地转化为高低电平发送出去。

物理状态:在标准的 TTL 电平下(1.8V / 3.3V / 5V),TXD 在没有数据发送的空闲状态下,始终保持高电平。当需要发送数据时,它会先拉低一个周期(起始位),然后开始发送数据位。

1.2 RXD (Receive Data)

定义:数据的输入通道。它代表设备的“耳朵”。

工作原理:设备通过 RXD 引脚实时监听外部线路上的电平变化。当它检测到电平从高突然变低,即捕捉到了起始位,就会按照约定好的波特率,开始读取后续的电平高低,并将其重新组合成完整的数据字节。

容错机制:RXD 只负责“听”。如果线路受到干扰,或者波特率设置与发送方不一致,RXD 依然会忠实地把读到的错误电平组合起来,这就导致了我们在串口工具中经常看到的“乱码”。

1.3 GND (Ground)

定义:电路的公共电平参考基准。

核心作用(极其重要):这是整个通信的绝对基石。电压本身是一个“相对值”(电位差),就像高度一样。设备 A 发送了一个 3.3V 的高电平(代表数字 1),它是相对于设备 A 自己的 GND 而言是 3.3V。

如果没有连 GND:如果设备 B 的 GND 没有和设备 A 的 GND 连在一起,设备 A 发出的 3.3V,在设备 B 看来可能变成了 1V,也可能是 5V。此时设备 B 的 RXD 就无法正确判断收到的是 0 还是 1,导致通信彻底失败或全是乱码。因此,共地(连接两者的 GND)是任何有线电平通信的前提。

2. 操作步骤

这里我使用的是 CH343 串口模块,步骤如下:

  1. 共地:CH343 的 GND 必须与设备 A/B 的 GND 连接;

  2. 监听发送(A -> B):将 CH343 的 RXD 接到设备 A 的 TXD,这根线同时也连着设备 B 的 RXD,能看到 A 发送给 B 的所有数据;

  3. 监听接收(B -> A):将 CH343 的 RXD 接到设备 A 的 RXD,这根线同时也连着设备 B 的 TXD,能看到 B 回复给 A 的所有数据;

注意:CH343 的 TXD 悬空:切记不要把 CH343 的 TXD 接到任何地方;

原因:如果在监听过程中 CH343 意外发送了数据,会造成信号冲突(短路),干扰原有通信甚至损坏端口;

2.1 示意图

下图为监听设备 A 发送给设备 B 的所有数据,如果需要监听设备 B 发送给设备 A 的所有数据,将 CH343 模块的 RXD 接到设备 B 的 TXD 即可。

flowchart LR

    subgraph DeviceA [设备 A]
        direction TB
        TX_A[TXD]
        RX_A[RXD]
        GND_A[GND]
    end

    subgraph DeviceB [设备 B]
        direction TB
        RX_B[RXD]
        TX_B[TXD]
        GND_B[GND]
    end

    subgraph CH343 [CH343 监听模块]
        direction TB
        RX_C[RXD - 监听输入]
        TX_C[TXD - 悬空勿接!]
        GND_C[GND - 必须共地]
        USB[USB 接口]
    end

    PC((PC))

    %% 正常双向通信接线 (实线交叉连接)
    TX_A ====|"通信数据 (A发给B)"| RX_B
    RX_A <====|"通信数据 (B发给A)"| TX_B

    %% GND 共地网络 (虚线)
    GND_A -.- GND_B
    GND_A -.- GND_C

    %% 旁路监听接线 (红线单向并联)
    TX_A -- "并联抓取" ---> RX_C
    
    %% USB 连接
    USB == "虚拟串口数据" ==> PC

    %% 节点样式
    classDef default fill:#fff,stroke:#333,stroke-width:1px;
    classDef highlight fill:#e1f5fe,stroke:#0288d1,stroke-width:2px;
    classDef warning fill:#ffebee,stroke:#c62828,stroke-width:2px,stroke-dasharray: 5 5;
    
    class CH343 highlight;
    class TX_C warning;

串口旁路监听
https://flowerdown.org/posts/20260306-191517
作者
Unrealfeathers
发布于
2026年3月6日
许可协议