Serial Port: различия между версиями

Материал из Wiren Board
Строка 2: Строка 2:
<translate>
<translate>


== Перед началом работы == <!--T:1-->
== Последовательные порты и их реализация в Linux == <!--T:1-->


<!--T:2-->
<!--T:2-->
Монументальное описание последовательных портов - http://www.tldp.org/HOWTO/Serial-HOWTO.html
Монументальное описание последовательных портов - http://www.tldp.org/HOWTO/Serial-HOWTO.html. Краткий неточный пересказ:
 
* в последовательный порт можно посылать данные и получать оттуда данные;
<!--T:3-->
* в Linux последовательные порты представлены в виде псевдофайлов из папки ''/dev/'', например, в Wiren Board это могут быть ''/dev/ttyAPP0'', ''/dev/ttyNSC1'', ''/dev/ttyUSB0'' (у всех в названии есть ''tty'').
Далее будет дано краткое неточное описание.
 
<!--T:4-->
В последовательный порт вы можете посылать данные, и получать их оттуда. В Linux последовательные порты представлены в виде некоторых псевдофайлов из папки ''/dev/'', например, в Wiren Board это ''/dev/ttyAPP0'', ''/dev/ttyNSC1'', ''/dev/ttyUSB0'' (у всех в названии есть ''tty'').


<!--T:5-->
<!--T:5-->
Перед тем, как начать работать с портом, надо настроить его скорость и другие параметры в зависимости от того, какое устройство к нему подключено:
Перед тем, как начать работать с портом, надо настроить его скорость и другие параметры в зависимости от того, какое устройство к нему подключено:
* скорость в битах в секунду. Самое популярное значение 115200
* скорость в битах в секунду. Самое популярное значение 115200;
* количество бит в символе, чётность, количество стоп-битов. Самая популярная конфигурация называется ''8N1'' - восемь бит в символе, проверки чётности нет, один стоп-бит
* количество бит в символе, чётность, количество стоп-битов. Самая популярная конфигурация называется ''8N1'' - восемь бит в символе, проверки чётности нет, один стоп-бит;
* аппаратный и программный контроль потока. Если не знаете - поставьте нет в обоих настройках.
* аппаратный и программный контроль потока. Если не знаете, поставьте "нет" в обоих настройках.


== Интерактивный HEX-терминал serial_tool == <!--T:6-->
== Интерактивный HEX-терминал serial_tool == <!--T:6-->


<!--T:7-->
<!--T:7-->
Для интерактивной отправки и приёма данных в HEX (шестнадцатеричном) формате используйте утилиту [https://github.com/contactless/serial_tool serial_tool] (уже установлена в Wiren Board).
Чтобы отправлять и получать данные в шестнадцатеричном формате (то есть фактически побитово, группами по четыре бита), используйте утилиту [https://github.com/contactless/serial_tool serial_tool]. Она предустановлена на контроллерах Wiren Board.
 
=== Справка по использованию === <!--T:8-->


<!--T:9-->
<!--T:9-->
Строка 33: Строка 27:
                   port
                   port


<!--T:10-->
serial_tool - interactive hex serial port console
serial_tool - interactive hex serial port console


<!--T:11-->
positional arguments:
positional arguments:
   port                  Serial port to open, i.e. /dev/ttyXXX
   port                  Serial port to open, i.e. /dev/ttyXXX


<!--T:12-->
optional arguments:
optional arguments:
   -h, --help            show this help message and exit
   -h, --help            show this help message and exit
Строка 55: Строка 46:
</pre>
</pre>


=== Пример запуска === <!--T:13-->
Пример использования:<!--T:13-->


<!--T:14-->
<!--T:14-->

Версия 14:07, 15 июня 2020

Другие языки:

Последовательные порты и их реализация в Linux

Монументальное описание последовательных портов - http://www.tldp.org/HOWTO/Serial-HOWTO.html. Краткий неточный пересказ:

  • в последовательный порт можно посылать данные и получать оттуда данные;
  • в Linux последовательные порты представлены в виде псевдофайлов из папки /dev/, например, в Wiren Board это могут быть /dev/ttyAPP0, /dev/ttyNSC1, /dev/ttyUSB0 (у всех в названии есть tty).

Перед тем, как начать работать с портом, надо настроить его скорость и другие параметры в зависимости от того, какое устройство к нему подключено:

  • скорость в битах в секунду. Самое популярное значение 115200;
  • количество бит в символе, чётность, количество стоп-битов. Самая популярная конфигурация называется 8N1 - восемь бит в символе, проверки чётности нет, один стоп-бит;
  • аппаратный и программный контроль потока. Если не знаете, поставьте "нет" в обоих настройках.

Интерактивный HEX-терминал serial_tool

Чтобы отправлять и получать данные в шестнадцатеричном формате (то есть фактически побитово, группами по четыре бита), используйте утилиту serial_tool. Она предустановлена на контроллерах Wiren Board.

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)

Пример использования:

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

Здесь установлены настройки 9600 8N2, таймаут 1 секунда, порт /dev/ttyNSC1 (RS-485).

Интерактивный режим работы из консоли

Самая удобная утилита для работы с последовательным портом из консоли - minicom (есть в стандартном образе Wiren Board). Minicom удобно пользоваться для работы с устройстами, которые управляются текстовыми командами или выводят текстовые сообщения. Примерами таких устройств являются GSM-модемы (управляются AT-командами), в том числе встроенный в Wiren Board GSM-модуль; GPS-модули, работающие по протоколу NMEA и т.п.

Краткая инструкция (считаем, что мы будем работать с портом /dev/ttyAPP0):

  • В первый раз запускаем minicom с ключом, создающим профиль работы с портом (в нём хранятся номер порта, скорость передачи данных, чётность, и т.д.):
 $ minicom -s /dev/ttyAPP0
  • Зайти в настройки (нажать Ctrl+A, затем O), выбрать пункт Serial port setup, там установить порт /dev/ttyAPP0, скорость и чётность - 115200, 8N1, Hardware flow control - No, Software flow control - No
  • Сохранить настройки: Save setup as _dev_ttyAPP0
  • Далее запускать как:
 $ minicom /dev/ttyAPP0

(все параметры будут сразу браться из профиля с названием /dev/ttyAPP0, который мы ранее создали)

  • Теперь можно вводить данные, которые вы хотите отправить в порт. Приходящие в порт данные от внешних устройств также будут выводиться

modbus-client

Одним из самых удобных средств отладки коммуникаций Modbus из командной строки Wiren Board является утилита modbus-client. Описание и примеры можно найти на этой странице modbus-client.

Работа с последовательным портом из своей программы

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