# 29.2.串行术语和硬件

以下是串行通信中常用的术语：

**bps**\
每秒位数（bps）是数据传输的速率。

**DTE**\
数据终端设备（DTE）是串行通信中的两个端点之一。一个例子是计算机。

**DCE**\
数据通信设备（DCE）是串行通信中的另一个端点。通常，它是一个调制解调器或串行终端。

**RS-232**\
定义硬件串行通信的原始标准。此后它已被更名为 TIA-232。

在提到通信数据速率时，本节不会使用“*baud*”一词。波特率（baud）指的是在一定时间内发生的电气状态转换的次数，而 bps 是正确的术语。

要将串行终端连接到 FreeBSD 系统，需要计算机的串行端口和正确的电缆来连接到串行设备。已经熟悉串行硬件和电缆的用户可以跳过这一部分。

## 29.2.1. 串行电缆和端口

有几种不同类型的串行电缆。最常见的两种类型是无调制解调器电缆和标准 RS-232 电缆。硬件的文档应该描述所需的电缆类型。

这两种电缆在如何连接信号线到连接器方面有所不同。每根电线代表一个信号，定义的信号总结在 [RS-232C 信号名称](https://docs.freebsd.org/en/books/handbook/serialcomms/#serialcomms-signal-names) 中。标准串行电缆将所有 RS-232C 信号直接通过。例如，电缆一端的“传输数据”引脚连接到另一端的“传输数据”引脚。这种类型的电缆用于将调制解调器连接到 FreeBSD 系统，也适用于某些终端。

无调制解调器电缆交换了连接器一端的“传输数据”引脚与另一端的“接收数据”引脚。连接器可以是 DB-25 或 DB-9。

无调制解调器电缆可以使用 [DB-25 到 DB-25 无调制解调器电缆](https://docs.freebsd.org/en/books/handbook/serialcomms/#nullmodem-db25)，[DB-9 到 DB-9 无调制解调器电缆](https://docs.freebsd.org/en/books/handbook/serialcomms/#nullmodem-db9)，以及 [DB-9 到 DB-25 无调制解调器电缆](https://docs.freebsd.org/en/books/handbook/serialcomms/#nullmodem-db9-25) 中总结的引脚连接来构建。虽然标准要求直通式引脚 1 到引脚 1 的“保护地线”，但它通常被省略。一些终端仅使用引脚 2、3 和 7，而其他终端可能需要不同的配置。如有疑问，请参考硬件的文档。

**表 1. RS-232C 信号名称**

| 缩写  | 名称     |
| --- | ------ |
| RD  | 接收数据   |
| TD  | 传输数据   |
| DTR | 数据终端就绪 |
| DSR | 数据集就绪  |
| DCD | 数据载波检测 |
| SG  | 信号地    |
| RTS | 请求发送   |
| CTS | 清除发送   |

**表 2. DB-25 到 DB-25 无调制解调器电缆**

| 信号  | 引脚号 |     | 引脚号 | 信号  |
| --- | --- | --- | --- | --- |
| SG  | 7   | 连接到 | 7   | SG  |
| TD  | 2   | 连接到 | 3   | RD  |
| RD  | 3   | 连接到 | 2   | TD  |
| RTS | 4   | 连接到 | 5   | CTS |
| CTS | 5   | 连接到 | 4   | RTS |
| DTR | 20  | 连接到 | 6   | DSR |
| DTR | 20  | 连接到 | 8   | DCD |
| DSR | 6   | 连接到 | 20  | DTR |
| DCD | 8   | 连接到 | 20  | DTR |

**表 3. DB-9 到 DB-9 无调制解调器电缆**

| 信号  | 引脚号 |     | 引脚号 | 信号  |
| --- | --- | --- | --- | --- |
| RD  | 2   | 连接到 | 3   | TD  |
| TD  | 3   | 连接到 | 2   | RD  |
| DTR | 4   | 连接到 | 6   | DSR |
| DTR | 4   | 连接到 | 1   | DCD |
| SG  | 5   | 连接到 | 5   | SG  |
| DSR | 6   | 连接到 | 4   | DTR |
| DCD | 1   | 连接到 | 4   | DTR |
| RTS | 7   | 连接到 | 8   | CTS |
| CTS | 8   | 连接到 | 7   | RTS |

**表 4. DB-9 到 DB-25 无调制解调器电缆**

| 信号  | 引脚号 |     | 引脚号 | 信号  |
| --- | --- | --- | --- | --- |
| RD  | 2   | 连接到 | 2   | TD  |
| TD  | 3   | 连接到 | 3   | RD  |
| DTR | 4   | 连接到 | 6   | DSR |
| DTR | 4   | 连接到 | 8   | DCD |
| SG  | 5   | 连接到 | 7   | SG  |
| DSR | 6   | 连接到 | 20  | DTR |
| DCD | 1   | 连接到 | 20  | DTR |
| RTS | 7   | 连接到 | 5   | CTS |
| CTS | 8   | 连接到 | 4   | RTS |

当一端的引脚连接到另一端的引脚对时，通常通过一根短线连接器中的引脚对和一根长线连接到另一根单引脚来实现。

串行端口是数据在 FreeBSD 主机计算机和终端之间传输的设备。存在几种不同类型的串行端口。在购买或制作电缆之前，确保它适配终端和 FreeBSD 系统的端口。

大多数终端具有 DB-25 端口。个人计算机可能具有 DB-25 或 DB-9 端口。多端口串行卡可能具有 RJ-12 或 RJ-45 端口。查看随硬件提供的文档，了解端口类型，或通过外观确认端口类型。

在 FreeBSD 中，每个串行端口通过 **/dev** 目录中的一个条目进行访问。有两种不同类型的条目：

* **Call-in** 端口命名为 **/dev/ttyuN**，其中 *N* 是端口号，从零开始。如果终端连接到第一个串行端口（**COM1**），则使用 **/dev/ttyu0** 来表示该终端。如果终端连接到第二个串行端口（**COM2**），则使用 **/dev/ttyu1**，以此类推。通常，呼叫端口用于终端。呼叫端口要求串行线路激活“数据载波检测”信号才能正常工作。
* **Call-out** 端口在 FreeBSD 8.X 及更高版本中命名为 **/dev/cuauN**，在 FreeBSD 7.X 及以下版本中命名为 **/dev/cuadN**。呼叫端口通常不用于终端，但用于调制解调器。如果串行电缆或终端不支持“数据载波检测”信号，则可以使用呼叫端口。

## 29.2.2. 串口配置

默认情况下，FreeBSD 支持四个串口，通常称为 **COM1**、**COM2**、**COM3** 和 **COM4**。FreeBSD 还支持一些简单的多端口串行接口卡，例如 BocaBoard 1008 和 2016，以及更智能的多端口卡，如 Digiboard 生产的卡。然而，默认的内核仅会识别标准的 **COM** 端口。

要查看系统是否识别了串口，可以查找以 `uart` 开头的系统启动消息：

```sh
# grep uart /var/run/dmesg.boot
```

如果系统未识别到所需的串口，可以在 **/boot/device.hints** 中添加额外的条目。该文件已经包含了 **COM1** 的 `hint.uart.0.*` 和 **COM2** 的 `hint.uart.1.*` 条目。当为 **COM3** 添加端口条目时使用 `0x3E8`，为 **COM4** 添加端口条目时使用 `0x2E8`。常见的 IRQ 地址为 **COM3** 的 `5` 和 **COM4** 的 `9`。

要确定端口的默认终端 I/O 设置，可以指定其设备名称。以下示例确定 **COM2** 的调用端口设置：

```sh
# stty -a -f /dev/ttyu1
```

系统范围内的串口设备初始化由 **/etc/rc.d/serial** 控制。此文件会影响串口设备的默认设置。要更改设备的设置，可以使用 `stty` 命令。默认情况下，更改的设置会一直有效，直到设备被关闭，重新打开时会恢复到默认设置。要永久更改默认设置，请打开并调整初始化设备的设置。例如，要为 **ttyu5** 启用 `CLOCAL` 模式、8 位通信和 `XON/XOFF` 流控，可以输入：

```sh
# stty -f /dev/ttyu5.init clocal cs8 ixon ixoff
```

要防止某些设置被应用程序更改，可以调整锁定设备的设置。例如，要将 **ttyu5** 的速率锁定为 57600 bps，可以输入：

```sh
# stty -f /dev/ttyu5.lock 57600
```

现在，任何打开 **ttyu5** 并尝试更改端口速率的应用程序将被限制为 57600 bps。
