Files
clover/docs/ru/uart.md
Oleg Kalachev 2693fd4ace docs: typos
2021-05-20 20:46:48 +03:00

86 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Интерфейс UART
UART последовательный асинхронный интерфейс для передачи данных, применяемый во многих устройствах. Например GPS-антенны, Wi-Fi роутеры или Pixhawk.
Интерфейс обычно содержит две линии: TX линия для передачи данных, RX линия для приёма данных. А также обычно использует 5-ти вольтовую логику.
Для соединения двух устройств необходимо линию TX первого устройства подать на RX второго. Аналогичную операцию нужно совершить с другой стороны, чтобы обеспечить двустороннюю передачу данных.
> **Note** Необходимо синхронизировать уровни напряжений – соединить землю на двух устройствах.
Почитать больше про интерфейс и протокол можно в [этой статье](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`.
> **Note** Надо понимать, что директива `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:
```txt
enable_uart=1
```
Для отключения UART интерфейса от Bluetooth модуля:
```txt
dtoverlay=pi3-disable-bt
```
Для подключения `Mini UART` к Bluetooth модулю:
```txt
dtoverlay=pi3-miniuart-bt
```
В случае отключения Bluetooth модуля следует отключить `hciuart` сервис:
```bash
sudo systemctl disable hciuart.service
```
## Настройка образа по умолчанию
На [образе для RPi](image.md) изначально выключен `Mini UART` и Bluetooth модуль.
## Bugs
Если использовать подключение `Mini UART` к Bluetooth, `hciuart` падает с ошибкой:
![hciuart error](../assets/hciuart_error.jpg)
В случае отключения Bluetooth
```txt
/dev/serial0 -> ttyAMA0
/dev/serial1 -> ttyS0
```