无法在Ubuntu 12.04上设置USB串口的波特率

12

我刚刚从Ubuntu 10.04升级,这个项目通过USB串口连接嵌入式设备,波特率为115,200。 升级后,它无法工作,但我重启后就可以连接了。自从关闭和重新启动系统以来,我就无法连接。串行线看起来连接的波特率不正确(快速字符串看起来像:

"'''''''''''''''''ppppp'''''''''''''''pppppp'''''''''''"...

USB设备已被识别并设置为/dev/ttyUSB0。当我尝试使用stty设置波特率时,出现以下情况:
$ sudo stty -F /dev/ttyUSB0 115200
stty: /dev/ttyUSB0: unable to perform all requested operations

如果我尝试将设置为9600,它似乎可以工作:
$ sudo stty -F /dev/ttyUSB0 9600

但是其他任何东西都失败了:

$ sudo stty -F /dev/ttyUSB0 4800
stty: /dev/ttyUSB0: unable to perform all requested operations

这是 stty 看到的内容:

$ stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

我可以使用stty(echo,echoe等)更改其他值,但不能更改波特率。
我在网上看到有人可以使用Minicom设置波特率,但无法通过命令行执行,所以我下载了Minicom并尝试了一下,但结果相同(似乎是错误的波特率)。
我还尝试了setserial,但它也拒绝接受/dev/ttyUSB设备:
$ sudo setserial  /dev/ttyUSB0 -a
Cannot get serial info: Invalid argument
$ sudo setserial  /dev/ttyS0 -a
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
    Baud_base: 115200, close_delay: 50, divisor: 0
    closing_wait: 3000
    Flags: spd_normal skip_test

最后,这里是设备及其来自dmesg的设置:

$ ls -l /dev/ttyUSB*
crw-rw-rw- 1 root dialout 188, 0 Nov 19 15:53 /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 1 Nov 19 16:00 /dev/ttyUSB1
$ dmesg | grep ttyUSB
[   32.444445] usb 4-1: generic converter now attached to ttyUSB0
[   32.444549] usb 8-2: generic converter now attached to ttyUSB1

我曾在Ubuntu 10.04下使用这个设备工作了几个月,并且上周还能够使用,但是自从关机重启后就无法使用了。我在网上搜索到一些遇到类似问题的人,但是没有解决方案。我该如何解决这个问题?


你尝试过使用 setserial 吗? - exussum
是的,setserial调用/dev/ttyUSB0时会出现“无效参数”(请参见问题结尾)。 - user1835090
2个回答

5

我仍然不知道发生了什么,但现在它能够工作了。对于任何遇到相同问题的人,请尝试使用“modprobe -r usbserial”(我的想法是查看旧驱动程序是否可以通过modprobe -f进行加载; 不能),然后重新加载模块“modprobe usbserial”。这次串口工作正常-我不知道为什么。

现在当我执行stty时,它报告:

~$ stty -F /dev/ttyUSB0
speed 115200 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost
-isig -icanon -iexten -echo

我可以更改波特率(我将其更改为9600,然后再改回115200)。

因此并没有令人满意的答案,但显然尝试一些操作可能会使其正常工作 - 就像在重新启动后第一次开始工作一样。


2
旧的线程,但如果你只是重复命令(stty -F /dev/ttyUSB0),它会起作用。我不知道为什么需要尝试两次,但应该可以工作。 - corpico

0

需要对设备文件具有写入权限才能更改设置。您可以通过简单的列表控制它。例如:

$ ls -l
crw-rw-r-T 1 root dialout 188, 0 jan    9 16:16 /dev/ttyUSB0

在上述情况下,所有人都拥有读取权限(r),超级用户rootdialout组也具有写入权限(rw)。
如果您是dialout组的成员,则可以通过上述提到的stty -F /dev/ttyUSB0 115200命令无需任何额外操作即可更改速度,否则您需要使用sudo
您可以使用id命令来控制自己的成员身份。

stty -F /dev/tty0 115200 stty: /dev/tty0: 无法执行所有请求的操作 - CS QGB
1
/dev/tty0是一个虚拟终端。它可用于特殊目的。OP询问了USB串行端口。 - kaliczp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接