Working with a serial port in Linux

Материал из Wiren Board
Это утверждённая версия страницы. Она же — наиболее свежая версия.
Другие языки:

Before you start

A monumental description of the serial ports - http://www.tldp.org/HOWTO/Serial-HOWTO.html


The following is a brief, inaccurate description.

You can send data to the serial port and receive it from there. In Linux, serial ports are represented as some pseudo-files from the /dev/ folder, for example, in the Wiren Board it is /dev/ttyAPP0, /dev/ttyNSC1, /dev/ttyUSB0 (all have tty in the name).

Before you start working with the port, you need to adjust its speed and other parameters depending on what device is connected to it:

  • speed in bits per second. The most popular value is 115200
  • number of bits in the symbol, parity, number of stop bits. The most popular configuration is called 8N1 - eight bits per character, no parity, one stop bit
  • hardware and software flow control. If you do not know it - put no in both cases.


Interactive HEX-terminal serial_tool

For interactive sending and receiving of data in HEX (hexadecimal) format, use the serial_tool utility (already installed on the Wiren Board).

Help

root@wirenboard:~# serial_tool -h
usage: serial_tool [-h] [-b BAUD] [-p PARITY] [-d DATA_BITS] [-s STOP_BITS]
                   [-t READ_TIMEOUT]
                   port

serial_tool - interactive hex serial port console

positional arguments:
  port                  Serial port to open, i.e. /dev/ttyXXX

optional arguments:
  -h, --help            show this help message and exit
  -b BAUD, --baud BAUD  Baud rate (default: 9600)
  -p PARITY, --parity PARITY
                        set parity, one of [N, E, O, M, S] (default: N)
  -d DATA_BITS, --data-bits DATA_BITS
                        set number of data bits, i.e. bytesize (default: 8)
  -s STOP_BITS, --stop-bits STOP_BITS
                        set number of stop bits, one of [1, 1.5, 2] (default:
                        1)
  -t READ_TIMEOUT, --timeout READ_TIMEOUT
                        number of seconds to wait for answer (default: 1)


An example of running

root@wirenboard:~# serial_tool -b 9600 -p N -d 8 -s 2 -t 1 /dev/ttyNSC1 
serial_tool on /dev/ttyNSC1: 9600 8N2.0
Enter your commands below in HEX form. 
All characters but 0-9,a-f including spaces are ignored.
Press Control-D or Control-C to leave the application.
Press [Enter] to print received data
>> FF FF 0A 01 11 00 00 1C
<< FF FF 0A 00 11 00 00 1B

The settings are 9600 8N2, 1 second timeout, port /dev/ttyNSC1 (RS-485).


Interactive mode from the console

The most convenient tool to work with the serial port from the console is minicom (available in the standard image of the Wiren Board controller). Minicom is convenient to use for working with devices that are controlled by text commands or output text messages. The examples of such devices are GSM modems (controlled by AT commands), including the GSM module built into the Wiren Board; GPS modules operating under the NMEA Protocol, etc.

Brief instructions (we believe that we will work with the port /dev/ttyAPP0):

  • For the first time, run minicom with a key that creates a port profile (it stores the port number, data rate, parity, etc.):
 $ minicom -s /dev/ttyAPP0
  • Go to settings (press Ctrl+A, then O), select Serial port setup, there set port /dev/ttyAPP0, speed and parity - 115200, 8N1, Hardware flow control - No, Software flow control - No
  • To save settings: Save setup as _dev_ttyAPP0
  • Then run as:
 $ minicom /dev/ttyAPP0

(all settings will be taken from the profile name /dev/ttyAPP0 that we previously created)

  • You can now enter the data you want to send to the port. Data coming to the port from external devices will also be displayed


modbus-client

One of the most convenient means of debugging Modbus communications from the command line of Wiren Board is the modbus-client utility. Description and examples can be found on this page modbus-client.


== Work with serial port from your program ==

http://tldp.org/HOWTO/Serial-Programming-HOWTO/