Интерфейс UART
UART – последовательный асинхронный интерфейс для передачи данных, применяемый во многих устройствах. Например GPS-антенны, Wi-Fi роутеры или Pixhawk.
Интерфейс обычно содержит две линии: TX – линия для передачи данных, RX – линия для приёма данных. А также обычно использует 5-ти вольтовую логику.
Для соединения двух устройств необходимо линию TX первого устройства подать на RX второго. Аналогичную операцию нужно совершить с другой стороны, чтобы обеспечить двустороннюю передачу данных.
Необходимо синхронизировать уровни напряжений – соединить землю на двух устройствах.
Почитать больше про интерфейс и протокол можно в этой статье.
Linux TTY
В Linux есть понятие Posix Terminal Interface (подробнее здесь). Это некоторая абстракция над последовательным или виртуальным интерфейсом, позволяющая работать с устройством нескольким агентам одновременно.
В качестве примера такой абстракции в Raspbian можно привести /dev/tty1
– устройство вывода текста на экран подключенный по HDMI.
UART на Raspberry Pi 3
В Raspberry Pi 3 есть два аппаратных UART интерфейса:
Mini UART
(/dev/ttyAMA0) – для своей работы использует тактирование видеоядра RPi, в связи с чем ограничивает его частоту.PL011
(/dev/ttyS0) – полноценный UART интерфейс выполненный на отдельном блоке кристалла микроконтроллера.
Подробнее про UART на Raspberry Pi в официальной статье.
Данные интерфейсы с помощью вентилей микроконтроллера можно переключать между двумя физическими выходами:
- разъём UART на GPIO;
- Bluetooth модуль RPi.
По умолчанию в Raspberry Pi 3 PL011
подключен к Bluetooth модулю. А Mini UART
отключен с помощью значения директивы enable_uart
, по дефолту равной 0
.
Надо понимать, что директива
enable_uart
меняет свое дефолтное значение исходя из того, какой UART подключен к Bluetooth модулю RPi с помощью директивыdtoverlay=pi3-miniuart-bt
.
Для удобства работы с этими выходами в Raspbian существуют алиасы:
/dev/serial0
– всегда указывает на то TTY устройство, что подключено к GPIO портам./dev/serial1
– всегда указывает на то TTY устройство, что подключено к Bluetooth модулю.
Настройка UART на Raspberry Pi
Для настроек UART существуют директивы, которые находятся в /boot/config.txt
.
Для включения UART интерфейса на GPIO:
enable_uart=1
Для отключения UART интерфейса от Bluetooth модуля:
dtoverlay=pi3-disable-bt
Для подключения Mini UART
к Bluetooth модулю:
dtoverlay=pi3-miniuart-bt
В случае отключения Bluetooth модуля следует отключить hciuart
сервис:
sudo systemctl disable hciuart.service
Настройка образа по умолчанию
На образе для RPi изначально выключен Mini UART
и Bluetooth модуль.
Bugs
Если использовать подключение Mini UART
к Bluetooth, hciuart
падает с ошибкой:
В случае отключения Bluetooth
/dev/serial0 -> ttyAMA0
/dev/serial1 -> ttyS0