mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-26 21:19:35 +00:00
87 lines
3.1 KiB
Markdown
87 lines
3.1 KiB
Markdown
# UART interface
|
||
|
||
UART is an asynchronous serial interface for data transfer that is used in many devices. For example, GPS antennas, Wi-Fi routers, or Pixhawk.
|
||
|
||
The interface usually contains two lines: TX for data transmission, and RX for data reception. It usually uses the 5-volt logics.
|
||
|
||
To connect two devices, you have to feed the TX line of the first device to the RX line of the other one. A similar manipulation is required on the other end for ensuring two-way data transmission.
|
||
|
||
It is also necessary to synchronize the voltages – connect the ground on two devices.
|
||
|
||
Read more about the interface and the Protocol in [this article](https://habr.com/post/109395/).
|
||
|
||
## Linux TTY
|
||
|
||
In Linux, there is the concept of POSIX Terminal Interface (read more [here](https://en.wikipedia.org/wiki/POSIX_terminal_interface). It is an abstraction over the serial or virtual interface that allows several agents to work with the device simultaneously.
|
||
|
||
An example of such abstraction in Raspbian may be `/dev/tty1` – the device for text output to the screen connected via HDMI.
|
||
|
||
## UART on Raspberry Pi 3
|
||
|
||
Raspberry Pi 3 has two hardware UART interfaces:
|
||
|
||
1. Mini UART (`/dev/ttyAMA0`) – uses the timing of the RPi graphics core, and therefore limits its frequency.
|
||
2. PL011 (`/dev/ttyS0`) – the full-fledged UART interface on a separate chip of the microcontroller.
|
||
|
||
Read more about UART on Raspberry Pi in the [official article](https://www.raspberrypi.org/documentation/configuration/uart.md).
|
||
|
||
Using microcontroller valves, these interfaces may be switched between two physical outputs:
|
||
|
||
1. UART connector on GPIO;
|
||
2. RPi Bluetooth module.
|
||
|
||
By default, Raspberry Pi 3 PL011 is connected to the Bluetooth module. And Mini UART is disabled with the value of directive `enable_uart`, which is `0` by default.
|
||
|
||
> **Note** One should understand that directive `enable_uart` changes its default value, depending on which UART is connected to the RPi Bluetooth module with directive `dtoverlay=pi3-miniuart-bt`.
|
||
|
||
For the sake of convenience of working with these outputs, aliases exist in Raspbian:
|
||
|
||
* `/dev/serial0` – always points to the TTY device that is connected to the GPIO ports.
|
||
* `/dev/serial1` – always points to the TTY device that is connected to the Bluetooth module.
|
||
|
||
### Configuration of UART on Raspberry Pi 3
|
||
|
||
To configure UART, there are directives located in `/boot/config.txt`.
|
||
|
||
To enable the UART interface on GPIO:
|
||
|
||
```txt
|
||
enable_uart=1
|
||
```
|
||
|
||
To disconnect the UART interface from the Bluetooth module:
|
||
|
||
```txt
|
||
dtoverlay=pi3-disable-bt
|
||
```
|
||
|
||
To connect Mini UART to the Bluetooth module:
|
||
|
||
```txt
|
||
dtoverlay=pi3-miniuart-bt
|
||
```
|
||
|
||
If the Bluetooth module is disabled, one should disable the hciuart service:
|
||
|
||
```bash
|
||
sudo systemctl disable hciuart.service
|
||
```
|
||
|
||
## Default image configuration
|
||
|
||
In the [Clover image for RPi](image.md), we initially disabled Mini UART and the Bluetooth module.
|
||
|
||
Bugs
|
||
----
|
||
|
||
If you use the Mini UART connection to Bluetooth, `hciuart` crashes with the following error:
|
||
|
||

|
||
|
||
In case of Bluetooth disconnection
|
||
|
||
```txt
|
||
/dev/serial0 -\> ttyAMA0
|
||
/dev/serial1 -\> ttyS0
|
||
```
|