Tcl拒绝在Linux上为串行通道设置76800波特率

Tcl拒绝在Linux上为串行通道设置76800波特率,linux,serial-port,tcl,Linux,Serial Port,Tcl,我在/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 $c

我在/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
我得到了所有的垃圾,你会期望从试图以错误的波特率通信。我看到了以前的帖子:
…参考Tcl源中的一组固定波特率。有没有办法添加我的非标准波特率,以使通信在Windows和Linux下都能正常工作?

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

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


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

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

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


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

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

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


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

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

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

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