diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index f97f45c4..23b4149a 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -13,6 +13,7 @@ * [Прошивка PixHawk/PixRacer](firmware.md) * [Пилотирование со смартфона](rc.md) * [SSH-доступ](ssh.md) +* [Устройство UART](uart.md) * [Неисправности радиоаппаратуры](radioerrors.md) * [Безопасность](safety.md) * [Техника безопасности по пайке](tb.md) diff --git a/docs/assets/hciuart_error.jpg b/docs/assets/hciuart_error.jpg new file mode 100644 index 00000000..b7ece83a Binary files /dev/null and b/docs/assets/hciuart_error.jpg differ diff --git a/docs/glossary.md b/docs/glossary.md index 97ea72c1..8d9c34a5 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -64,3 +64,7 @@ Armed – состояние коптера готовности к полету ## MAVROS Библиотека-связующее звено между аппаратом, работающем по протоколу MAVLink, и ROS. + +## UART + +Последовательный асинхронный интерфейс передачи данных, применяемый во многих устройствах. Например GPS антенны, Wi-Fi роутеры или PixHawk. \ No newline at end of file diff --git a/docs/uart.md b/docs/uart.md new file mode 100644 index 00000000..a897b500 --- /dev/null +++ b/docs/uart.md @@ -0,0 +1,85 @@ +# Интерфейс UART + +UART – последовательный асинхронный интерфейс для передачи данных, применяемый во многих устройствах. Например GPS антенны, Wi-Fi роутеры или PixHawk. + +Интерфейс обычно содержит две линии: TX – линия для передачи данных, RX – линия для приёма данных. А также обычно использует 5-ти вольтовую логику. + +Для соединения двух устройств необходимо линию TX первого устройства подать на RX второго. Аналогичную операцию нужно совершить с другой стороны, чтобы обеспечить двустороннюю передачу данных. + +> Также необходимо синхронизировать уровни напряжений – соединить землю на двух устройствах. + +Почитать больше про интерфейс и протокол можно в [этой статье](https://habr.com/post/109395/). + +## Linux TTY + +В Linux есть понятие Posix Terminal Interface (подробнее [здесь](https://ru.wikipedia.org/wiki/TTY-абстракция)) это некоторая асбтракция над последовательным или виртуальным интерфейсом позволяющая работать с устройством нескольким агентам одновременно. + +В качестве примера такой абстрации в Raspbian можно привести `/dev/tty1` – устройство вывода текста на экран подключенный по HDMI. + +## UART на Raspberry Pi 3 + +В Raspberry Pi 3 есть два аппаратных UART интерфейса: + +1. `Mini UART` (/dev/ttyAMA0) – для своей работы использует тактирование видео-ядра RPi, в связи с чем ограничивает его частоту. +2. `PL011` (/dev/ttyS0) – полноценный UART интерфейс выполненный на отдельном блоке кристалла микроконтроллера. + +Подробнее про UART на Raspberry Pi в [оффициальной статье](https://www.raspberrypi.org/documentation/configuration/uart.md). + +Данные интерфейсы с помощью вентелей микроконтроллера можно переключать между двуями физическими выходами: + +1. Разъём UART на GPIO +2. 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 устройство, что подключено к Bluetooh модулю. + +### Настройка 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` сервис: + +```bash +sudo systemctl disable hciuart.service +``` + +## Дефолтная настройка образа + +На образе CLEVER мы изначально выключили `Mini UART` и Bluetooth модуль. + +## Bugs + +Если использовать подключение `Mini UART` к Bluetooth, `hciuart` падает с ошибкой: + +![hciuart error](assets/hciuart_error.jpg) + +В случае отключения Bluetooth + +``` +/dev/serial0 -> ttyAMA0 +/dev/serial1 -> ttyS0 +``` \ No newline at end of file diff --git a/image_builder/scripts/hardware_setup.sh b/image_builder/scripts/hardware_setup.sh index c748688e..be2abc88 100755 --- a/image_builder/scripts/hardware_setup.sh +++ b/image_builder/scripts/hardware_setup.sh @@ -38,7 +38,8 @@ echo -e "\033[0;31m\033[1m$(date) | #6 Turn on UART\033[0m\033[0m" # https://github.com/RPi-Distro/raspi-config/pull/75 /usr/bin/raspi-config nonint do_serial 1 /usr/bin/raspi-config nonint set_config_var enable_uart 1 /boot/config.txt -/usr/bin/raspi-config nonint set_config_var dtoverlay pi3-miniuart-bt /boot/config.txt +/usr/bin/raspi-config nonint set_config_var dtoverlay pi3-disable-bt /boot/config.txt +systemctl disable hciuart.service # After adding to Raspbian OS # https://github.com/RPi-Distro/raspi-config/commit/d6d9ecc0d9cbe4aaa9744ae733b9cb239e79c116