1. Overview
In computing, a serial port is a serial communication interface through which data can be transmitted or received one bit at a time. Baud rate, in this context, refers to the number of signal symbols transmitted per second.
In this tutorial, we’ll learn how to determine the baud rate of a serial port in Linux. This usually entails utilizing the stty or setserial commands.
2. Getting the Baud Rate With stty
The stty command is a tool for displaying and modifying terminal line characteristics like the baud rate.
To get the baud rate of a particular serial port, we can use it as input to stty. Let’s see how we can use stty to display the baud rate of a particular serial port:
$ stty < /dev/ttyS0
speed 115200 baud; line = 0;
-brkint -imaxbel
As we can observe above, the baud rate of the serial port device /dev/ttyS0 is 115200.
We can also get the baud rate information by specifying a serial port with the -F option instead of redirecting the input:
$ stty -F /dev/ttyS0
speed 115200 baud; line = 0;
-brkint -imaxbel
Here, -brkint and -imaxbel are port-specific settings that aren’t related to the baud rate. Hence, we can specify the speed* setting in the command to make *stty only print the baud rate:
$ stty -F /dev/ttyS0 speed
115200
As can be seen above, the output is now only the baud rate of 115200.
3. Using setserial to Determine the Baud Rate
In order to determine the baud rate, we can also use the setserial tool. This tool allows us to manage and manipulate serial port configurations including reporting information such as the baud base, hardware I/O port, and much more.
Let’s get the baud rate of the serial port device from before using setserial:
$ setserial -a /dev/ttyS0
/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
We can see that this output verifies the baud rate of /dev/ttyS0 is 115200, as we observed previously.
Above, we used the -a option to get more detailed data including the baud rate. We can also use the -G option to print the same information in a different form:
$ setserial -G /dev/ttyS0
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
Additionally, this output form can be fed back to setserial as command-line arguments to configure the serial port. This option allows for a rudimentary backup-and-restore functionality.
Moreover, we can add the -g option to get the data of several ports at once:
$ setserial -Gg /dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS1 uart 16550A port 0x02f8 irq 3 baud_base 115200 spd_normal skip_test
/dev/ttyS2 uart 16550A port 0x03e8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS3 uart 16550A port 0x02e8 irq 3 baud_base 115200 spd_normal skip_test
Above, we get the baud rates of /dev/ttyS0, /dev/ttyS1, /dev/ttyS2, and /dev/ttyS3 together.
4. Configuring the Baud Rate
In addition to getting the baud rate, we can also set it for a serial port with stty by directly passing the new value:
$ stty -F /dev/ttyS0 38400
After this command, the baud rate is updated to 38400. We can verify this new value:
$ stty -F /dev/ttyS0 speed
38400
Now, let’s change back the baud rate with setserial:
$ sudo setserial /dev/ttyS0 baud_base 115200
Notably, we need superuser privileges for setserial. Finally, we can check the updated baud rate:
$ setserial -G /dev/ttyS0
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
The baud rate is now 115200, as expected.
5. Conclusion
In this article, we learned how to determine the baud rate of a serial port using stty and setserial. We observed that we can get the baud rate in several ways and in different forms. Also, we learned that we can use additional options to our advantage in order to leverage the abilities of advanced tools. Finally, we saw how to set the baud rate.