29.2.串行术语和硬件 =================== 以下术语在串行通信中经常使用: **bps** 比特每秒(bps)是数据传输的速率。 **DTE** 数据终端设备(DTE)是串行通信中两个端点之一。例如计算机。 **DCE** 数据通信设备(DCE)是串行通信中的另一个端点。它通常是调制解调器或串行终端。 **RS-232** 定义硬件串行通信的原始标准。此后,它被重新命名为 TIA-232。 当提到通信数据率时,本节不使用术语 *波特*\ 。波特指的是在一段时间内进行的电气状态转换的数量,而 bps 才是正确的术语。 要将串行终端连接到 FreeBSD 系统上,需要在计算机上安装串行端口和适当的电缆来连接到串行设备。已经熟悉串行硬件和电缆的用户可以有把握地跳过这一部分。 29.2.1.串行电缆和端口 --------------------- 有几种不同类型的串行电缆。最常见的两种类型是空调制解调器电缆和标准 RS-232 电缆。硬件的文档应该说明所需的电缆类型。 这两种类型的电缆在电线与连接器的连接方式上有所不同。每条线代表一个信号,\ `RS-232C 信号名称 `__\ 中总结了定义的信号。一条标准的串行电缆直接传递所有的 RS-232C 信号。例如,电缆一端的“传输数据”引脚会连接到另一端的“传输数据”引脚。这是用于连接调制解调器和 FreeBSD 系统的电缆类型,也适用于某些终端。 零调制解调器电缆将连接器一端的“发送数据”针脚与另一端的“接收数据”针脚进行切换。该连接器可以是 DB-25 或 DB-9。 零调制解调器电缆可以使用 `DB-25 到 DB-25 零调制解调器电缆 `__\ 、\ `DB-9 到 DB-9 零调制解调器电缆 `__\ 和 `DB-9 到 DB-25 零调制解调器电缆 `__\ 中总结的引脚连接来构建。虽然标准要求 1 号针脚直通 1 号针脚的“保护性接地”线,但它经常被省略。有些终端只使用针脚 2、3 和 7,而其他终端需要不同的配置。如有疑问,请参考硬件的文件。 **表 20. RS-232C 信号名称** ==== ============== 简称 全称 ==== ============== RD 收到的数据 TD 转送的数据 DTR 数据终端就绪 DSR 数据集准备就绪 DCD 数据载体检测 SG 信号地线 RTS 请求发送 CTS 清理发送 ==== ============== **表 21. 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 ==== ===== ====== ===== ==== **表 22. 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 ==== ===== ====== ===== ==== **表 23. 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** 中的一个条目来访问。有两种不同类型的条目: - 调入端口被命名为 **/dev/ttyuN**\ ,其中 *N* 是端口号,从 0 开始。如果一个终端被连接到第一个串口(\ **COM1**\ ),使用 **/dev/ttyu0** 来指代该终端。如果终端在第二个串口(\ **COM2**\ )上,使用 **/dev/ttyu1**\ ,以此类推。一般来说,呼入端口是用于终端的。呼入端口要求串行线断言“数据载波检测”信号以正确工作。 - 呼出端口端口在 FreeBSD 8.X 和更高版本中被命名为 **/dev/cuauN**\ ,在 FreeBSD 7.X 和更低版本中被命名为 ``/dev/cuadN``\ 。Call-out 端口通常不用于终端,而是用于调制解调器。如果串行电缆或终端不支持“数据载波检测”信号,就可以使用呼出端口。 FreeBSD 还提供了初始化设备(\ **/dev/ttyuN.init** 和 **/dev/cuauN.init** 或 **/dev/cuadN.init**\ )和锁定设备(\ **/dev/ttyuN.lock** 和 **/dev/cuauN.lock** 或 **/dev/cuadN.lock**\ )。初始化设备用于在每次打开一个端口时初始化通信端口参数,例如用于使用 ``RTS/CTS`` 信令进行流量控制的调制解调器的 ``crtscts``\ 。锁定设备用于锁定端口的标志,以防止用户或程序改变某些参数。请参考 `termios(4) `__, `uart(4) `__ 和 `stty(1) `__\ ,分别了解关于终端设置、锁定和初始化设备以及设置终端选项的信息。 29.2.2.串行端口配置 ------------------- 默认情况下,FreeBSD 支持四个串口,即通常所说的 **COM1**\ 、\ **COM2**\ 、\ **COM3** 和 **COM4**\ 。FreeBSD 还支持非智能多端口串行接口卡,如 BocaBoard 1008 和 2016,以及更智能的多端口卡,如 Digiboard 制造的那些。然而,默认的内核只寻找标准的 **COM** 端口。 要想知道系统是否能识别串口,可以寻找以 ``uart`` 开头的系统启动信息: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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** 上的呼入端口的设置: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # stty -a -f /dev/ttyu1 串行设备的全系统初始化是由 **/etc/rc.d/serial** 控制的。这个文件会影响到串行设备的默认设置。要改变一个设备的设置,请使用 ``stty``\ 。默认情况下,改变后的设置在设备关闭前一直有效,当设备重新打开时,它又回到了默认设置。要永久地改变默认设置,请打开并调整初始化设备的设置。例如,要在 ``CLOCAL`` 模式、8 位通信和 ``XON/XOFF`` 流量控制下打开 **ttyu5**\ ,请输入: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # stty -f /dev/ttyu5.init clocal cs8 ixon ixoff 为了防止某些设置被应用程序改变,对锁定设备进行调整。例如,要把 **ttyu5** 的速度锁定为 57600 bps,请输入: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # stty -f /dev/ttyu5.lock 57600 现在,任何打开 **ttyu5** 并试图改变端口速度的应用程序将被锁定在 57600 bps。