【问题标题】:Tcl refuses to set 76800 baud rate for serial channel on LinuxTcl 拒绝在 Linux 上为串行通道设置 76800 波特率
【发布时间】:2020-12-09 00:01:03
【问题描述】:

我在 /dev/ttyUSB0 有一个 FTDI USB/串行设备。我设置了我的频道

% set channel [open /dev/ttyUSB0 r+]
file3
% chan configure $channel -mode "76800,n,8,1" -buffering none -blocking 0 -translation auto

这对 Windows 上的 Tcl 工作得很好。在 Linux 上,显示波特率查询

% puts [chan configure $channel -mode]
57600,n,8,1

我得到了你期望以错误的波特率进行通信的所有垃圾。我看到了这个以前的帖子: fconfigure refuses to set baud rate to 921600 ...在 Tcl 源中引用一组固定的波特率。有没有办法让我添加我的非标准波特率以使通信在 Windows 和 Linux 下都能正常工作?

【问题讨论】:

    标签: linux serial-port tcl


    【解决方案1】:

    Tcl 拒绝将速度设置为这些值,因为底层 C 函数不支持 Linux 上的那些波特率。事实上,这里的问题不是 Tcl 甚至你的 libc,而是 Linux:它支持一组固定的波特率,而 76800 不是其中之一。

    在我的系统 (Debian sid) 上,超过 POSIX 指定的波特率在/usr/include/x86_64-linux-gnu/bits/termios-baud.h 中可见。此位置可能因操作系统和版本而异。

    如果您想使用此串行设备,您需要将其配置为不同的速率。最接近的是 57600 和 115200。支持的最大 POSIX 指定版本是 38400。

    【讨论】:

      【解决方案2】:

      虽然 bk2204 的响应在 标准 波特率方面是正确的,但可以将非标准波特率用于 FTDI 设备。至少在旧版本的 Linux 中,可以告诉驱动程序在芯片上设置一个自定义除数,以正确的波特率输出(详见this answer)。不过我已经有几年没有尝试过了,所以这可能不再有效。

      在 Windows 上,您需要为您想要自定义波特率的芯片编辑注册表(请参阅 FTDI 文档 AN_120)。

      这两者都基于您使用的是 FTDI 芯片这一事实 - 其他 USB 到串行转换器可能无法在自定义波特率下工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-21
        • 1970-01-01
        • 2018-02-24
        相关资源
        最近更新 更多