下一页 上一页 目录

21. 其他串行设备 (非异步 RS-232)

21.1 RS-232 的后继者

电子工业协会 (EIA) (或 RS) 已经制定了许多标准,用于使用双绞线(平衡)技术实现更高的速度和更长的距离。平衡传输可以实现更高的速度,并且速度可以比非平衡的 RS-232 快一千倍。对于给定的速度,使用双绞线时距离(最大电缆长度)可能会长很多倍。但是,大约在 2004 年之前,PC 一直采用准过时的 RS-232,因为它在电缆长度较短时可以与调制解调器和鼠标配合使用。

高速串行端口(超过 460.8 kbps)通常支持 RS-232 和 EIA-485/EIA-422 (RS-485/RS-422) 模式。(请注意,对于非 RS-232,我使用了“EIA” designation 而不是更常用的 “RS”,但它们都意味着相同的事情。)在如此高的速度下,RS-232 没有太多用处(除非电缆非常短)。

21.2 EIA-422-A (平衡) 和 EIA-423-A (非平衡)

EIA-423 与非平衡的 RS-232 非常相似,只是电压仅为 5 伏。由于这在 RS-232 规范范围内,因此可以连接到 RS-232 端口。它的规范要求比 RS-232 稍高的速度(但这对于长距离运行可能没有多大帮助,因为不平衡会导致干扰)。由于 EIA-423 对 RS-232 的改进不大,因此很少使用,除非在旧的 Mac 电脑上。

EIA-422 是双绞线(被称为“平衡”或“差分”),并且(根据规范)速度正好是 EIA-423 的 100 倍(EIA-423 反过来又比 RS-232 稍快)。苹果的 Mac 电脑在 1998 年中期之前在其 RS-232/EIA-422 端口上使用了它。Mac 使用了一个小的圆形 “mini-DIN-8” 连接器,并将这些串行端口命名为 “modem port”、“printer port” 和/或 “GeoPort”。

Mac 还提供了传统的 RS-232,但电压仅为 5 伏(这仍然是合法的 RS-232)。要使其像 RS-232 一样工作,必须使用特殊的电缆,该电缆(信号)将 RxD+(平衡对的一侧)接地,并将 RxD- 用作接收引脚。虽然 TxD- 用作发送引脚,但由于某种原因,TxD+ 不应接地。请参阅 Macintosh Communications FAQ。然而,由于 Mac(及其升级产品)的成本高于 PC,因此它们作为 Linux 主机计算机并不普及。

21.3 EIA-485

这类似于 EIA-422(平衡 = 差分)。它是半双工的。它不仅仅是点对点,而是像以太网或 USB 一样,因为所有设备(节点)都在其上共享相同的“总线”。它可用于多点局域网(最多 32 个或更多节点)。不幸的是,Linux 目前不支持这一点,您只能在 Linux 下将其用于点对点,在点对点中它的行为类似于 RS-232。因此,仅当您对 Linux 支持这些功能时它们将如何工作感到好奇时,才继续阅读。

由于许多节点共享同一对双绞线,因此需要使用电气三态模式。因此,除了 0 和 1 二进制状态之外,还存在开路状态,以允许其他节点使用双绞线。发射器不会在线路空闲期间在线路上保持 1 状态电压,而是线路开路,所有节点都只是监听(接收模式)。

最常见的架构是主/从架构。主站轮询从站,以查看它们是否有任何内容要发送。从站只能在被轮询后立即发送。但是 EIA-485 只是一个电气规范,没有指定主/从交互的任何协议。事实上,它甚至没有指定必须有主站和从站。因此,已经使用了各种协议。根据 2003 年 3 月在 linux-serial 邮件列表中对 485 的讨论,似乎 Linux 当前不支持这些主/从协议中的任何一个。

还有一种替代实现,其中使用两对线来发送数据。一对线仅供主站发送到从站。由于除了主站之外,没有人在此线路上发送数据,因此无需使其为三态。因此,主站可能只是 RS-232,但从站仍然必须是 EIA-485。有关更多详细信息,请参阅 http://www.hw.cz/english/docs/rs485/rs485.html

21.4 EIA-530

EIA-530-A(平衡,但也可以非平衡使用),在 2Mbits/s(平衡)下,旨在替代 RS-232,但安装的很少。它使用与 RS-232 相同的 25 针连接器。

21.5 EIA-612/613

高速串行接口 (HSSI = EIA-612/613) 使用 50 针连接器,速度高达约 50 Mbits/s,但距离仅限于几米。对于 Linux,有支持 HSSI 的 PCI 卡。销售这些卡的公司通常提供(或指向您)Linux 驱动程序。需要一个关于此主题的 HOWTO 或类似文档。

21.6 通用串行总线 (USB)

通用串行总线 (USB) 正在构建到 PCI 芯片中。较新的 PC 都配备了它们。它最初为 12 Mbps,但现在通过带有 4 针连接器(2 根线是电源)的双绞线达到 480 Mbps。它也限制在最多 5 米的短距离内(取决于配置)。Linux 支持该总线,尽管并非所有可以插入总线的设备都受到支持。

它是同步的,并像网络一样以特殊的数据包传输。就像网络一样,它可以物理连接多个设备,包括串行端口。其上的每个设备都在短时间内获得独占使用的时间片。还可以保证设备在固定间隔使用总线。如果没有其他设备想要使用它,一个设备可以垄断它。详细描述它并不简单。

对于 USB 总线上的串行端口,编译内核时有许多配置选项可以使用。它们都以:CONFIG_USB_SERIAL 开头。每个通常用于某个品牌/型号的串行端口,尽管通用也是一种选择。请参阅内核文档中的配置帮助文件。

有关文档,请参阅 /usr/share/doc/kernel 中的 USB 目录 ... 并查看文件:usb-serial.txt。支持 usb 串行设备的模块位于模块树中:kernel/drivers/usb/serial。如果有一个关于 USB 的 HOWTO 就好了。另请参阅 http://www.linux-usb.org 和/或 http://www.qbik.ch/usb/

21.7 火线

火线 (IEEE 1394) 有点像 USB,只是速度更快(计划为 800 Mbps)。据称总线上的协议比 USB 的效率更高。它使用两对双绞线用于数据,外加两根电源导体(总共 6 根导体)。一个变体仅使用 4 根导体。您可以将火线支持编译到 Linux 内核中。像 USB 一样,它也限制在短距离内。

21.8 MIDI

声卡通常具有用于 MIDI 的 15 针游戏端口连接器。它们用于将乐器键盘连接到 PC,以便您可以创建音乐录音。您也可以连接 MIDI 音响系统。MIDI 标准使用 31250 波特(1M/32),这在普通串行端口上不可用。有些 MIDI 设备的设计使其可以直接连接到普通串行端口。

除了 15 针连接器外,5 针 DIN 连接器也是 MIDI 标准,但声音流仅通过它单向流动,因此对于双向声音,您需要 2 个。分支电缆通常在一端具有 15 针连接器,而在另一端具有 2 个或更多 5 针连接器。/dev/midi00 用于 MIDI。

21.9 同步 & 同步

除了异步 RS-232(和其他)之外,还有许多同步串行端口标准。实际上,RS-232 包括同步规范,但它们通常未在 PC 的串行端口上实现。但首先我们将解释同步的含义。

定义异步与同步

异步(async)意味着“非同步”。实际上,异步信号是异步串行端口发送和接收的信号,它是字节流,每个字节都由起始位和停止位构帧。同步(sync)是大多数其他所有内容。但这并没有解释基本概念。

理论上,同步意味着字节以恒定速率一个接一个地发送,与时钟信号节拍同步。通常有一根单独的电线或通道用于发送时钟信号。时钟信号也可能嵌入在传输的字节中。异步字节可能会不规则地发送,字节之间的时间间隔各不相同(就像某人在键盘上键入字符一样)。

当文件通过异步串行端口发送时,字节流的速度很可能与端口的速度相同(例如 115.2k),这是一个恒定速率。此流可能会由于流量控制而频繁启动和停止。这是同步还是异步?忽略流量控制停止,它可能看起来像同步,因为它是一个稳定的流。但事实并非如此,因为没有时钟信号,并且字节可能是以不规则的方式发送的,因为它们由起始/停止位构帧。

另一种情况是将数据字节(没有任何起始停止位)放入数据包中,数据包之间可能存在不规则的间隔。这称为同步,因为每个数据包内的字节都是同步传输的。

同步通信

您是否曾经想过串行端口 25 针连接器上所有未使用的引脚是做什么用的?它们中的大多数用于同步通信,同步通信很少在 PC 的芯片中实现。有用于同步定时信号以及同步反向通道的引脚。RS-232 规范同时提供了同步和异步,但 PC 使用 UART(通用异步接收器/发送器)芯片,例如 16450、16550A 或 16650,并且无法处理同步。对于同步,需要 USRT 芯片或等效芯片,其中 “S” 代表同步。USART 芯片同时支持同步和异步。由于同步是一个小众市场,因此同步串行端口很可能非常昂贵。

SCC 代表 “串行通信控制器” 或 “串行控制器芯片”。这可能是旧术语,并且由于它没有说 “同步” 或 “异步”,因此它可能同时支持两者。

除了 RS-232 的同步部分之外,还有各种其他 EIA 同步标准。对于 RS-232,连接器的 3 个引脚保留用于时钟(或定时)信号。有时,调制解调器的任务是生成一些定时信号,从而使得在没有同步调制解调器(或没有称为 “同步调制解调器消除器” 的设备,该设备提供定时信号)的情况下无法使用同步通信。

尽管很少有串行端口是同步的,但同步通信通常确实通过使用调制解调器的电话线进行,这些调制解调器使用 V.42 纠错。这会剥离起始/停止位,并将数据字节放入数据包中,从而在电话线上实现同步操作。


下一页 上一页 目录