fconfigure 拒绝将波特率设置为 921600
fconfigure refuses to set baud rate to 921600
在 expect
脚本中,我试图用 Ubuntu 14.04 下的序列号 port/console 的直接访问替换 spawn kermit
。
代码相当简单:
set device "/dev/ttyUSB1"
set device_handle [open $device w+]
fconfigure $device_handle -mode "921600,n,8,1" -handshake none
#spawn -open $device_handle
我的问题是 Tcl (8.6) 或 Expect (5.45) 拒绝将波特率设置为 921600。
从 strace
输出中,我可以看到波特率设置为 460800(在 TCSETSW
命令中设置为 ioctl()
)。像这样:
$ grep TCSETSW strace.out.*
strace.out.28667:ioctl(6, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B460800 -opost -isig -icanon -echo ...}) = 0
strace.out.28667:ioctl(6, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B460800 -opost -isig -icanon -echo ...}) = 0
strace.out.28667:ioctl(6, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B460800 -opost -isig -icanon -echo ...}) = 0
我测试了较低的波特率 - 9600、115200、460800 - Tcl 以正确的波特率调用 ioctl()
。只有当我尝试设置 921600 时,Tcl 才会设置 460800。 (kermit
使用相同的 ioctl()
调用并设置正确的波特率。)
有什么想法吗?
我已经研究了这个问题,它似乎是 Tcl 核心中的一个限制。在Unix平台上,我们有一个硬编码的波特率列表,最高的是460800。
如果您乐于破解 Tcl 核心源代码,您可以将自己的波特率添加到填充在 unix/tclUnixChan.c 中的 speeds[] 数组(大约第 900 行)。我们将努力在下一个版本中获得一组更新的速度。
--肖恩"The Hypnotoad"伍兹
在 expect
脚本中,我试图用 Ubuntu 14.04 下的序列号 port/console 的直接访问替换 spawn kermit
。
代码相当简单:
set device "/dev/ttyUSB1"
set device_handle [open $device w+]
fconfigure $device_handle -mode "921600,n,8,1" -handshake none
#spawn -open $device_handle
我的问题是 Tcl (8.6) 或 Expect (5.45) 拒绝将波特率设置为 921600。
从 strace
输出中,我可以看到波特率设置为 460800(在 TCSETSW
命令中设置为 ioctl()
)。像这样:
$ grep TCSETSW strace.out.*
strace.out.28667:ioctl(6, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B460800 -opost -isig -icanon -echo ...}) = 0
strace.out.28667:ioctl(6, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B460800 -opost -isig -icanon -echo ...}) = 0
strace.out.28667:ioctl(6, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B460800 -opost -isig -icanon -echo ...}) = 0
我测试了较低的波特率 - 9600、115200、460800 - Tcl 以正确的波特率调用 ioctl()
。只有当我尝试设置 921600 时,Tcl 才会设置 460800。 (kermit
使用相同的 ioctl()
调用并设置正确的波特率。)
有什么想法吗?
我已经研究了这个问题,它似乎是 Tcl 核心中的一个限制。在Unix平台上,我们有一个硬编码的波特率列表,最高的是460800。
如果您乐于破解 Tcl 核心源代码,您可以将自己的波特率添加到填充在 unix/tclUnixChan.c 中的 speeds[] 数组(大约第 900 行)。我们将努力在下一个版本中获得一组更新的速度。
--肖恩"The Hypnotoad"伍兹