图:DB9接口引脚排列示意图
1. DB9 接口概述
DB9(D-subminiature 9-pin)是一种常见的9针串行通信接口,广泛应用于计算机、工业控制、网络设备等领域,主要用于 RS-232 串行通信标准。
2. DB9 引脚定义(公头/插针视图)
以下为 DB9 公头(Male,带插针)从引脚面(非焊接面)观察时的引脚排列与定义:
| 引脚编号 | 信号名称 | 方向 (DTE) | 功能说明 |
|---|---|---|---|
| 1 | DCD (Data Carrier Detect) | 输入 | 数据载波检测,来自调制解调器(Modem) |
| 2 | RXD (Receive Data) | 输入 | 接收数据线 |
| 3 | TXD (Transmit Data) | 输出 | 发送数据线 |
| 4 | DTR (Data Terminal Ready) | 输出 | 数据终端就绪,通知设备准备就绪 |
| 5 | GND (Signal Ground) | - | 信号地线 |
| 6 | DSR (Data Set Ready) | 输入 | 数据设备就绪,来自调制解调器 |
| 7 | RTS (Request To Send) | 输出 | 请求发送,用于流量控制 |
| 8 | CTS (Clear To Send) | 输入 | 清除发送,用于流量控制 |
| 9 | RI (Ring Indicator) | 输入 | 振铃指示,表示有来电 |
3. 常见连接方式
3.1 直连(Null Modem)电缆
用于直接连接两台计算机(DTE 对 DTE),无需调制解调器。典型交叉连接如下:
- 一端 TXD (3) ←→ 另一端 RXD (2)
- 一端 RXD (2) ←→ 另一端 TXD (3)
- 两端 GND (5) 直连
- 一端 RTS (7) ←→ 另一端 CTS (8)
- 一端 CTS (8) ←→ 另一端 RTS (7)
- 一端 DTR (4) ←→ 另一端 DSR (6) 和 DCD (1)(可短接)
3.2 DTE 与 DCE 连接
计算机(DTE)连接调制解调器(DCE)时使用直通电缆,引脚一一对应。
4. 引脚排列示意图(记忆口诀)
从公头引脚面看,两排引脚,上5下4:
公头引脚面视图(带插针): 5 4 3 2 1 9 8 7 6 (上排从左到右:5,4,3,2,1) (下排从左到右:9,8,7,6)记忆口诀:“上5下4,左上为5,右上为1;左下为9,右下为6”。
6. 串口自测试方法
在实际应用中,经常需要对串口进行自测试以验证其通信功能是否正常。以下是几种常见的串口自测试方法:
6.1 硬件环回测试
硬件环回测试是最直接的测试方法,通过短接特定引脚实现信号回环:
- 本地环回测试:将 DB9 接口的 TXD (3) 与 RXD (2) 引脚短接,发送的数据会立即被接收。这种方法可以测试串口芯片和驱动是否正常。
- 硬件流控环回:将 RTS (7) 与 CTS (8) 短接,DTR (4) 与 DSR (6)、DCD (1) 短接,可以测试硬件流控信号通路。
6.2 软件环回测试
软件环回测试不需要硬件连接,通过操作系统或驱动程序实现:
- Windows 虚拟串口:使用虚拟串口软件创建一对 COM 端口(如 COM1 和 COM2),然后使用串口调试工具在两个端口间发送和接收数据。
- Linux 伪终端:使用
socat或pty创建虚拟串口对进行测试。
6.3 使用串口调试工具
常用的串口调试工具可以帮助进行自测试:
- Windows:SecureCRT、Putty、Tera Term、串口调试助手等。
- Linux:minicom、screen、picocom 等。
- 测试步骤:
- 打开两个串口调试工具实例,分别连接到需要测试的两个串口。
- 在一个工具中发送测试数据(如 "Hello, Serial!")。
- 在另一个工具中查看是否接收到相同数据。
- 测试不同波特率(9600、115200 等)和数据格式(8N1、7E1 等)。
6.4 编程自测试
通过编程实现自动化串口测试:
import serial import time def serial_loopback_test(port_name): """串口环回测试函数""" try: # 打开串口 ser = serial.Serial( port=port_name, baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1 ) # 发送测试数据 test_data = b"Serial Loopback Test" ser.write(test_data) # 接收数据 received = ser.read(len(test_data)) # 比较发送和接收的数据 if test_data == received: print(f"✓ {port_name}: 环回测试通过") return True else: print(f"✗ {port_name}: 环回测试失败") return False except Exception as e: print(f"✗ {port_name}: 测试异常 - {e}") return False finally: if 'ser' in locals() and ser.is_open: ser.close() 测试示例 if name == "main": serial_loopback_test("COM1")6.5 测试注意事项
- 波特率匹配:确保发送端和接收端的波特率、数据位、停止位、校验位设置一致。
- 流控设置:如果使用硬件流控,确保 RTS/CTS 信号线正确连接。
- 接地良好:GND (5) 引脚必须可靠连接,否则可能导致通信不稳定。
- 测试数据:建议使用包含所有 ASCII 字符的测试数据,以验证数据传输完整性。
5. 注意事项
- 公头(Male)与母头(Female):引脚定义相同,但物理连接方向相反。母头的引脚编号排列是公头的镜像。
- DTE 与 DCE:方向(输入/输出)是相对于数据终端设备(DTE,如计算机)而言的。连接 DCE 设备(如调制解调器)时,信号方向会反转。
- 现代应用:虽然 USB 已取代多数串口,但 DB9 仍在工业控制、路由器 Console 口、专业设备调试中广泛使用。