Difference between revisions of "How to use TTY with User Terminal"
[unchecked revision] | [quality revision] |
Erwan Le Ray (talk | contribs)
m (→Framing errors detection)
|
Erwan Le Ray (talk | contribs)
m (→Parity errors detection)
|
Template:ArticleMainWriter Template:ArticleApprovedVersion
Contents
- 1 Purpose
- 2 Print the file name of the terminal connected to standard input (with tty tool)
- 3 Change serial port configuration (with stty tool)
- 4 Send / Receive data (with stty, minicom, echo and cat tools)
- 5 Identify processes using a tty serial device (with fuser tool)
- 6 Link a tty serial device with a line discipline (with ldattach tool)
- 7 File transfer over serial console
- 8 References
1 Purpose[edit]
This article describes how to use TTY with a user terminal. The TTY overview is described in Serial TTY overview article.
The use case of the following examples is a data transfer between a STM32 MPU board and PC, over a USB to a RS232 adapter cable.
The setup of this use case is described in details in the How to get Terminal article.
For the following examples:
- uart4 is activated by default (for the Linux console)
- usart3 is enabled by device tree
- The usart3 pins are connected to a RS232 card
- The RS232 card is connected to the PC over the USB to RS232 adapter cable.
Note: Some TTY tools are used in this article. A list of TTY tools is defined a dedicated article [TTY Tools ].
2 Print the file name of the terminal connected to standard input (with tty tool)[edit]
tty # The console is connected to uart4 (aka ttySTM0) # /dev/ttySTM0
3 Change serial port configuration (with stty tool)[edit]
Many serial port properties can be displayed and changed with the stty tool. The full feature list is available in stty user manual pages [1] .
stty --help
- Display the current configuration:
stty -a -F /dev/ttySTM1
# Display the configuration of uart3 (aka ttySTM1) #
speed 115200 baud; rows 45; columns 169; line = 0;
- Display only the current baud rate:
stty -F /dev/ttySTM1 speed
# uart3 (aka ttySTM1) baud rate is set to 115200 bps #
115200
- Change the baud rate:
stty -F /dev/ttySTMx EXPECTED_BAUDRATE
Example: change the baud rate to 19200
# Change uart3 (aka ttySTM1) baud rate to 19200 bps #
stty -F /dev/ttySTM1 19200
The stty tool proposes many arguments allowing many operations on a tty terminal, such as:
- special settings (various arguments such as speed, line discipline, minimum number of characters for a completed read, size, timeout, etc...)
- control settings
- input settings
- output settings
- local settings
- combination settings
Note: If you want to go further, an interesting tutorial describes termios and stty [2].
4 Send / Receive data (with stty, minicom, echo and cat tools)[edit]
4.1 Default configuration (8 data bits frame, no parity errors detection, no framing errors detection)[edit]
Sending data can be simply done by opening the device as a file and writing data to it.
- Configure a port on ttySTM1 (aka usart3)
stty -F /dev/ttySTM1 115200 -echo
- Display the current configuration on ttySTM1 (usart3):
# display the configuration of uart3 (aka ttySTM1) #
stty -a -F /dev/ttySTM1
speed 115200 baud; rows 45; columns 169; line = 0;
- Open a port on ttySTM1 (usart3) to receive data
cat /dev/ttySTM1 &
- On the remote PC, identify the tty terminal associated to RS232 card connected on STM32MPU USART3 pins
# Command to execute from host terminal #
ls /dev/ttyUSB*
/dev/ttyUSB0
- Open a minicom in a second terminal on the remote device connected on USART3 pins
minicom -D /dev/ttyUSB0
- Display the current configuration on ttyUSB0 (remote device):
# Display the configuration of host uart (aka ttyUSB0) #
stty -a -F /dev/ttyUSB0
speed 115200 baud; rows 45; columns 169; line = 0;
- Send data from remote PC to STM32MPU over USART3 with default termios configuration (8 frames length, no parity)
# Execute this command from host terminal #
echo "HELLO" > /dev/ttyUSB0
- send data from STM32MPU to remote PC over USART3 with default termios configuration (8 frames length, no parity)
# Execute this command from STM32 terminal #
echo "HELLO" > /dev/ttySTM1
4.2 Parity errors detection[edit]
Some additional termios funtions allow to enable parity errors detection:
- parenb: Parity enable.
- parodd: Odd parity else even.
- inpck: Enable input parity or framing check.
- ignpar: Ignore characters with parity or framing errors
Exemples:
- Configure a port on ttySTM1 (usart3) with even parity enabling
# STM32 parity enabling #
stty -F /dev/ttySTM1 115200 -echo parenb -parodd inpck ignpar
- Open a port on ttySTM1 (usart3) to receive data
cat /dev/ttySTM1 &
Open a minicom in a second terminal on the remote device connected on USART3 pins minicom -D /dev/ttyUSB0
- Configure a port on ttyUSB0 (remote device) with even parity enabling:
# Remote device parity enabling #
stty -a -F /dev/ttyUSB0 115200 -echo parenb -parodd inpck ignpar
speed 115200 baud; rows 45; columns 169; line = 0;
- Send data from remote PC to STM32MPU over USART3 with default termios configuration (8 frames length, no parity)
# Execute this command from host terminal #
echo "HELLO" > /dev/ttyUSB0
- send data from STM32MPU to remote PC over USART3 with default termios configuration (8 frames length, no parity)
# Execute this command from STM32 terminal #
echo "HELLO" > /dev/ttySTM1
4.3 Framing errors detection[edit]
Some additional termios funtions allow to enable framing errors detection:
- csize: Number of bits per byte (CS5, CS6, CS7, or CS8)
- inpck: Enable input framing check
- ignpar: Ignore characters with parity or framing errors
Exemples:
- Configure a port on ttySTM1 (usart3) with framing check enabling and 7 data bits length frames
# STM32 framing enabling #
stty -F /dev/ttySTM1 115200 -echo cs7 inpck ignpar
- Open a port on ttySTM1 (usart3) to receive data
cat /dev/ttySTM1 &
Open a minicom in a second terminal on the remote device connected on USART3 pins minicom -D /dev/ttyUSB0
- Configure a port on ttyUSB0 (remote device) with framing check enabling and 7 data bits length frames
# Remote device parity enabling #
stty -a -F /dev/ttyUSB0 115200 -echo cs7 inpck ignpar
speed 115200 baud; rows 45; columns 169; line = 0;
- Send data from remote PC to STM32MPU over USART3 with default termios configuration (8 frames length, no parity)
# Execute this command from host terminal #
echo "HELLO" > /dev/ttyUSB0
- send data from STM32MPU to remote PC over USART3 with default termios configuration (8 frames length, no parity)
# Execute this command from STM32 terminal #
echo "HELLO" > /dev/ttySTM1
5 Identify processes using a tty serial device (with fuser tool)[edit]
fuser /dev/ttySTM0
# The process numbered 395, 691 and 3872 are using a tty serial device #
395 691 3872
6 Link a tty serial device with a line discipline (with ldattach tool)[edit]
Attach ttySTM1 with line discipline number n :
ldattach n /dev/ttySTM1
7 File transfer over serial console[edit]
Please see the dedicated article How to transfer a file over serial console.
8 References[edit]
<noinclude> {{ArticleMainWriter | ErwanLR}} {{ArticleApprovedVersion | ErwanLR | FabriceG (Passed), AlexandreT (Passed) , NathalieS | No previous approved version | AlainF - 14Aug'18 - 8369 | 28Aug'18}} {{UpdateNeededForNewRelease}} [[Category:Serial TTY|3]]</noinclude> __TOC__<br /> ==Purpose== This article describes how to use TTY with a user terminal. The TTY overview is described in [[Serial TTY overview]] article. <br/> The use case of the following examples is a data transfer between a STM32 MPU board and PC, over a USB to a RS232 adapter cable. <br/> The setup of this use case is described in details in the [[How_to_get_Terminal#Remote Terminal via serial link (UART/USB)|How to get Terminal]] article. For the following examples: * uart4 is activated by default (for the Linux console) * usart3 is enabled by [[Serial TTY_device_tree_configuration#Activation_of_a_USART_or_UART_instance|device tree]] * The usart3 pins are connected to a RS232 card * The RS232 card is connected to the PC over the USB to RS232 adapter cable. Note: Some TTY tools are used in this article. A list of TTY tools is defined a dedicated article [TTY Tools ]. == Print the file name of the terminal connected to standard input (with tty tool)== {{Board$}} tty {{highlight|# The console is connected to uart4 (aka ttySTM0) #}} {{Green|'''/dev/ttySTM0'''}} ==Change serial port configuration (with stty tool)== Many serial port properties can be displayed and changed with the stty tool. The full feature list is available in stty user manual pages <ref>[https://linux.die.net/man/1/stty stty manual page]</ref> . {{Board$}} stty --help * Display the current configuration: {{Board$}} stty -a -F /dev/ttySTM1 {{highlight|# Display the configuration of uart3 (aka ttySTM1) #}} speed 115200 baud; rows 45; columns 169; line = 0; * Display only the current baud rate: {{Board$}} stty -F /dev/ttySTM1 speed {{highlight|# uart3 (aka ttySTM1) baud rate is set to 115200 bps #}} 115200 * Change the baud rate: stty -F /dev/ttySTMx ''EXPECTED_BAUDRATE''<br/> <br/> Example: change the baud rate to 19200 {{highlight|# Change uart3 (aka ttySTM1) baud rate to 19200 bps #}} {{Board$}} stty -F /dev/ttySTM1 19200 The stty tool proposes many arguments allowing many operations on a tty terminal, such as: * special settings (various arguments such as speed, line discipline, minimum number of characters for a completed read, size, timeout, etc...) * control settings * input settings * output settings * local settings * combination settings <br/> '''Note''': If you want to go further, an interesting tutorial describes termios and stty <ref>[https://blog.nelhage.com/2009/12/a-brief-introduction-to-termios-termios3-and-stty/ A Brief Introduction to termios: termios(3) and stty] stty tutorial</ref>. ==Send / Receive data (with stty, minicom, echo and cat tools)== ===Default configuration (8 data bits frame, no parity errors detection, no framing errors detection)=== Sending data can be simply done by opening the device as a file and writing data to it.<br/> * Configure a port on ttySTM1 (aka usart3) {{Board$}} stty -F /dev/ttySTM1 115200 -echo * Display the current configuration on ttySTM1 (usart3): {{highlight|# display the configuration of uart3 (aka ttySTM1) #}} {{Board$}} stty -a -F /dev/ttySTM1 speed 115200 baud; rows 45; columns 169; line = 0; * Open a port on ttySTM1 (usart3) to receive data {{Board$}} cat /dev/ttySTM1 & * On the remote PC, identify the tty terminal associated to RS232 card connected on STM32MPU USART3 pins {{highlight|# Command to execute from host terminal #}} {{PC$}} ls /dev/ttyUSB* /dev/ttyUSB0 * Open a minicom in a second terminal on the remote device connected on USART3 pins {{PC$}} minicom -D /dev/ttyUSB0 * Display the current configuration on ttyUSB0 (remote device): {{highlight|# Display the configuration of host uart (aka ttyUSB0) #}} {{PC$}} stty -a -F /dev/ttyUSB0 speed 115200 baud; rows 45; columns 169; line = 0; * Send data from remote PC to STM32MPU over USART3 with default termios configuration (8 frames length, no parity) {{highlight|# Execute this command from host terminal #}} {{PC$}} echo "HELLO" > /dev/ttyUSB0 * send data from STM32MPU to remote PC over USART3 with default termios configuration (8 frames length, no parity) {{highlight|# Execute this command from STM32 terminal #}} {{Board$}} echo "HELLO" > /dev/ttySTM1 ===Parity errors detection=== Some additional termios funtions allow to enable parity errors detection: * parenb: Parity enable. * parodd: Odd parity else even. * inpck: Enable input parity or framing check. * ignpar: Ignore characters with parity or framing errors<br/> Exemples: * Configure a port on ttySTM1 (usart3) with even parity enabling {{highlight|# STM32 parity enabling #}} {{Board$}} stty -F /dev/ttySTM1 115200 -echo parenb -parodd inpck ignpar * Open a port on ttySTM1 (usart3) to receive data {{Board$}} cat /dev/ttySTM1 & Open a minicom in a second terminal on the remote device connected on USART3 pins {{PC$}} minicom -D /dev/ttyUSB0 * Configure a port on ttyUSB0 (remote device) with even parity enabling: {{highlight|# Remote device parity enabling #}} {{PC$}} stty -a -F /dev/ttyUSB0 115200 -echo parenb -parodd inpck ignpar speed 115200 baud; rows 45; columns 169; line = 0; * Send data from remote PC to STM32MPU over USART3 with default termios configuration (8 frames length, no parity) {{highlight|# Execute this command from host terminal #}} {{PC$}} echo "HELLO" > /dev/ttyUSB0 * send data from STM32MPU to remote PC over USART3 with default termios configuration (8 frames length, no parity) {{highlight|# Execute this command from STM32 terminal #}} {{Board$}} echo "HELLO" > /dev/ttySTM1<br/> ===Framing errors detection=== Some additional termios funtions allow to enable framing errors detection: * csize: Number of bits per byte (CS5, CS6, CS7, or CS8) * inpck: Enable input framing check * ignpar: Ignore characters with parity or framing errors<br/> Exemples: * Configure a port on ttySTM1 (usart3) with framing check enabling and 7 data bits length frames {{highlight|# STM32 framing enabling #}} {{Board$}} stty -F /dev/ttySTM1 115200 -echo cs7 inpck ignpar * Open a port on ttySTM1 (usart3) to receive data {{Board$}} cat /dev/ttySTM1 & Open a minicom in a second terminal on the remote device connected on USART3 pins {{PC$}} minicom -D /dev/ttyUSB0 * Configure a port on ttyUSB0 (remote device) with framing check enabling and 7 data bits length frames {{highlight|# Remote device parity enabling #}} {{PC$}} stty -a -F /dev/ttyUSB0 115200 -echo cs7 inpck ignpar speed 115200 baud; rows 45; columns 169; line = 0; * Send data from remote PC to STM32MPU over USART3 with default termios configuration (8 frames length, no parity) {{highlight|# Execute this command from host terminal #}} {{PC$}} echo "HELLO" > /dev/ttyUSB0 * send data from STM32MPU to remote PC over USART3 with default termios configuration (8 frames length, no parity) {{highlight|# Execute this command from STM32 terminal #}} {{Board$}} echo "HELLO" > /dev/ttySTM1 ==Identify processes using a tty serial device (with fuser tool)== {{Board$}} fuser /dev/ttySTM0 {{highlight|# The process numbered 395, 691 and 3872 are using a tty serial device #}} 395 691 3872 ==Link a tty serial device with a line discipline (with ldattach tool)== Attach ttySTM1 with [[Serial TTY line discipline|line discipline]] number ''n'' : {{Board$}} ldattach ''n'' /dev/ttySTM1 ==File transfer over serial console== Please see the dedicated article [[How to transfer a file over serial console]]. ==References==<references />
Line 101: | Line 101: | ||
===Parity errors detection=== |
===Parity errors detection=== |
||
Some additional termios funtions allow to enable parity errors detection: |
Some additional termios funtions allow to enable parity errors detection: |
||
− | * parenb: Parity enable |
+ | * parenb: Parity enable |
− | * parodd: Odd parity else even |
+ | * parodd: Odd parity else even |
− | * inpck: Enable input parity or framing check |
+ | * inpck: Enable input parity or framing check |
* ignpar: Ignore characters with parity or framing errors |
* ignpar: Ignore characters with parity or framing errors |
||
<br/> |
<br/> |