有什么方法可以检查串行设备支持哪些波特率?

Mik*_*ike 8 linux serial-port

有什么方法可以检查 Linux 上的串行设备支持哪些波特率?

我浏览了/sys/class/tty/ttyS0目录,但看不到任何列出此类信息的内容。

F. *_*uri 11

脚本:

锯末的回答中,有我的解决方案:

for bauds in $(
    sed -r 's/^#define\s+B([1-9][0-9]+)\s+.*/\1/p;d' < \
        /usr/include/asm-generic/termbits.h ) ;do
    echo $bauds
    stty -F /dev/ttyS0 $bauds && echo Ok.
done  2>&1 |
    pr -at2
Run Code Online (Sandbox Code Playgroud)

将在我的主机上呈现:

50                              Ok.
75                              Ok.
110                             Ok.
134                             Ok.
150                             Ok.
200                             Ok.
300                             Ok.
600                             Ok.
1200                                    Ok.
1800                                    Ok.
2400                                    Ok.
4800                                    Ok.
9600                                    Ok.
19200                                   Ok.
38400                                   Ok.
57600                                   Ok.
115200                                  Ok.
230400                                  Ok.
460800                                  Ok.
500000                                  Ok.
576000                                  Ok.
921600                                  Ok.
1000000                                 Ok.
1152000                                 Ok.
1500000                                 Ok.
2000000                                 stty: /dev/ttyS0: unable to perform
2500000                                 stty: /dev/ttyS0: unable to perform
3000000                                 stty: /dev/ttyS0: unable to perform
3500000                                 stty: /dev/ttyS0: unable to perform
4000000                                 stty: /dev/ttyS0: unable to perform
Run Code Online (Sandbox Code Playgroud)

也就是说,但这并不意味着它会起作用!

你必须用你的电缆和你的设备来测试它们......


saw*_*ust 6

您似乎在问两个不同的问题。

有什么方法可以检查串行设备支持哪些波特率?

答案取决于 (1) 硬件的功能,即 UART/USART/SCC,以及设备驱动程序可以在波特率生成器中使用的除数范围;查阅器件数据表;(2)与串口设备连接的时钟/振荡器的频率;请参阅董事会文件。

有什么方法可以检查 Linux 上支持哪些波特率?

终端控制结构的c_cflaginclude/asm-generic/termbits.h成员中定义的波特率之一是串行端口(即 UART/USART)设备驱动程序接收波特率配置值的典型方法。

#define  B0     0000000         /* hang up */
#define  B50    0000001
#define  B75    0000002
#define  B110   0000003
#define  B134   0000004
#define  B150   0000005
#define  B200   0000006
#define  B300   0000007
#define  B600   0000010
#define  B1200  0000011
#define  B1800  0000012
#define  B2400  0000013
#define  B4800  0000014
#define  B9600  0000015
#define  B19200 0000016
#define  B38400 0000017

#define    BOTHER 0010000
#define    B57600 0010001
#define   B115200 0010002
#define   B230400 0010003
#define   B460800 0010004
#define   B500000 0010005
#define   B576000 0010006
#define   B921600 0010007
#define  B1000000 0010010
#define  B1152000 0010011
#define  B1500000 0010012
#define  B2000000 0010013
#define  B2500000 0010014
#define  B3000000 0010015
#define  B3500000 0010016
#define  B4000000 0010017
Run Code Online (Sandbox Code Playgroud)

串行端口驱动程序通常没有任何方法来报告/通告这些波特率中的哪些波特率实际上受支持/可配置/实现。FIFO 和睡眠等属性有一个功能值,但波特率没有。驱动程序可以定义ioctl()调用来配置(非标准)波特率,尽管这会使使用它的程序不可移植。


小智 6

您可以使用控制台上的“stty”命令检查设备波特率:

$ stty < /dev/tty..      (where tty... is the device file you are listening)  
Run Code Online (Sandbox Code Playgroud)

输出:

speed 9600 baud; line = 0;
-brkint -imaxbel
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下命令更改波特率:

$ sudo stty -F /dev/tty... 9600    (or whatever baud rate number)
Run Code Online (Sandbox Code Playgroud)