Baycom 调制解调器的 Linux 驱动程序¶
Thomas M. Sailer, HB9JNX/AE4WA, <sailer@ife.ee.ethz.ch>
Baycom 调制解调器的驱动程序已被拆分为独立的驱动程序,因为它们不共享任何代码,并且驱动程序和设备名称已更改。
本文档描述了用于简单 Baycom 型业余无线电调制解调器的 Linux 内核驱动程序。
以下驱动程序可用:¶
- baycom_ser_fdx
此驱动程序支持 SER12 调制解调器,可全双工或半双工工作。其波特率可通过
baud
模块参数更改,因此它支持串行端口上的几乎所有位操作(bit bang)调制解调器。其设备名为 bcsf0 到 bcsf3。这是 SER12 类型调制解调器的推荐驱动程序,但是如果您的 UART 克隆设备损坏且没有正常工作的 delta 状态位,您可以尝试 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 之间传输。移位寄存器填充 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 算法。因此,如果您的电台将 DCD 输入馈送给 PAR96 调制解调器,建议使用硬件 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