Baycom 调制解调器的 Linux 驱动程序

Thomas M. Sailer, HB9JNX/AE4WA, <sailer@ife.ee.ethz.ch>

Baycom 调制解调器的驱动程序已拆分为单独的驱动程序,因为它们不共享任何代码,并且驱动程序和设备名称已更改。

本文档描述了用于简单 Baycom 型业余无线电调制解调器的 Linux 内核驱动程序。

以下驱动程序可用:

baycom_ser_fdx

此驱动程序支持 SER12 调制解调器的全双工或半双工模式。它的波特率可以通过 baud 模块参数更改,因此它几乎支持串行端口上的每个位 bang 调制解调器。它的设备名为 bcsf0 到 bcsf3。这是 SER12 型调制解调器的推荐驱动程序,但是如果您的 UART 克隆损坏,并且没有正常工作的增量状态位,您可以尝试使用 baycom_ser_hdx。

baycom_ser_hdx

这是 SER12 型调制解调器的备用驱动程序。它仅支持半双工模式,并且仅支持 1200 波特。它的设备名为 bcsh0 到 bcsh3。仅当 baycom_ser_fdx 不能与您的 UART 一起工作时才使用此驱动程序。

baycom_par

此驱动程序支持 par96 和 picpar 调制解调器。它的设备名为 bcp0 到 bcp3。

baycom_epp

此驱动程序支持 EPP 调制解调器。它的设备名为 bce0 到 bce3。此驱动程序正在开发中。

支持以下调制解调器

ser12

这是一个非常简单的 1200 波特 AFSK 调制解调器。该调制解调器仅由一个调制器/解调器芯片组成,通常是 TI TCM3105。计算机负责重新生成接收器位时钟,以及处理 HDLC 协议。该调制解调器连接到串行端口,因此得名。由于串行端口不用作异步串行端口,因此不能使用串行端口的内核驱动程序,并且此驱动程序仅支持标准串行硬件(8250、16450、16550)。

par96

这是一个与 G3RUH 标准兼容的 9600 波特 FSK 调制解调器。该调制解调器完成所有滤波并重新生成接收器时钟。数据通过移位寄存器从 PC 传输到 PC 和从 PC 传输。移位寄存器填充了 16 位,并发出一个中断信号。然后,PC 以突发形式清空移位寄存器。该调制解调器连接到并行端口,因此得名。该调制解调器将 HDLC 协议和扰码器多项式的实现留给 PC。

picpar

这是 Henning Rech, DF9IC 对 par96 调制解调器的重新设计。该调制解调器在协议上与 par96 兼容,但仅使用三个低功耗 IC,因此可以从并行端口供电,并且不需要额外的电源。此外,它还包含载波检测电路。

EPP

这是一个连接到增强型并行端口的高速调制解调器适配器。

它的目标用户是在高速集线器 (76.8kbit/s) 上工作的用户。

eppfpga

这是 EPP 适配器的重新设计。

以上所有调制解调器仅支持半双工通信。但是,该驱动程序支持 KISS(见下文)全双工命令。然后,一旦有数据包要传输,它就会立即开始发送,而不关心 DCD,即,即使通道上有人,它也会开始发送。DAMA 信道接入协议的某些实现需要此命令。

驱动程序的接口

与以前的驱动程序不同,这些驱动程序不再是字符设备,而是真正的内核网络接口。因此,安装很简单。安装后,可以使用四个名为 bc{sf,sh,p,e}[0-3] 的接口。可以使用 ax25 实用程序中的 sethdlc 来设置驱动程序状态等。用户空间 AX.25 堆栈的用户可以使用 net2kiss 实用程序(也可在 ax25 实用程序包中找到)将网络接口的数据包转换为伪 tty 上的 KISS 流。我还有一个可用的 WAMPES 补丁,允许直接附加内核网络接口。

配置驱动程序

每次将驱动程序插入内核时,它都必须知道应该在哪个端口访问哪个调制解调器。这可以使用 setbaycom 实用程序完成。如果您仅使用一个调制解调器,也可以从 insmod 命令行配置驱动程序(或通过 /etc/modprobe.d/*.conf 中的选项行)。

示例

modprobe baycom_ser_fdx mode="ser12*" iobase=0x3f8 irq=4
sethdlc -i bcsf0 -p mode "ser12*" io 0x3f8 irq 4

这两行将第一个端口配置为在第一个串行端口(DOS 下的 COM1)驱动 ser12 调制解调器。mode 参数中的 * 指示驱动程序使用软件 DCD 算法(见下文)

insmod baycom_par mode="picpar" iobase=0x378
sethdlc -i bcp0 -p mode "picpar" io 0x378

这两行将第一个端口配置为在第一个并行端口(DOS 下的 LPT1)驱动 picpar 调制解调器。(注意:picpar 意味着硬件 DCD,par96 意味着软件 DCD)。

可以使用 sethdlc -a 或 kissparms 设置信道接入参数。请注意,这两个实用程序对这些值的解释略有不同。

硬件 DCD 与软件 DCD

为了避免空中的冲突,驱动程序必须知道通道何时繁忙。这是 DCD 电路/软件的任务。该驱动程序可以使用软件 DCD 算法(options=1),也可以使用来自硬件的 DCD 信号(options=0)。

ser12

如果使用软件 DCD,则无线电的静噪应始终打开。强烈建议使用软件 DCD 算法,因为它比大多数硬件静噪电路快得多。缺点是系统上的负载略高。

par96

这种类型调制解调器的软件 DCD 算法相当差。该调制解调器根本没有提供足够的信息来在软件中实现合理的 DCD 算法。因此,如果您的无线电馈送 PAR96 调制解调器的 DCD 输入,则建议使用硬件 DCD 电路。

picpar

picpar 调制解调器具有内置的 DCD 硬件,强烈建议使用。

与 Linux 内核其余部分的兼容性

串行驱动程序和 baycom 串行驱动程序竞争相同的硬件资源。当然,一次只有一个驱动程序可以访问给定的接口。串行驱动程序在启动时会抓取它可以找到的所有接口。因此,baycom 驱动程序随后将无法访问串行端口。因此,您可能需要使用“setserial /dev/ttyS# uart none”释放由串行驱动程序拥有的端口,其中 # 是接口的编号。baycom 驱动程序在启动时不会保留任何端口,除非在“insmod”命令行上指定了端口。解决问题的另一种方法是将所有驱动程序编译为模块,并将其留给 kmod 根据应用程序加载正确的驱动程序。

并行端口驱动程序(baycom_par、baycom_epp)现在使用 parport 子系统来在不同的客户端驱动程序之间仲裁端口。

vy 73s de

Tom Sailer, sailer@ife.ee.ethz.ch

hb9jnx @ hb9w.ampr.org