Добавить в корзинуПозвонить
Найти в Дзене

Включение интерфейсов UART на GPIO разъеме Raspberry PI 4

В одноплатнике Raspberry PI 4 доступно 5 UART интерфейсов, выведенных на разъем GPIO. Однако, прежде чем начать с ними работать в своих проектах, необходимо сконфигурировать саму "Малинку". Запускаем конфигуратор в терминале командой: sudo raspi-config В появившемся диалоге переходим по цепочке меню "Interfacing Options" --> "Serial Port". На вопрос "Would you like a login shell to be accessible over serial?" отвечаем "<No>". На вопрос "Would you like the serial port hardware to be enabled?" отвечаем "<Yes>". На появившемся экране подтверждения нажимаем "<OK>". Перезагружаем плату. Теперь оболочка отключена от порта UART0. Для этого необходимо отредактировать файл конфигурации config.txt, выполнив команду: sudo nano /boot/config.txt В секцию [all] добавляем следующие строки: dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
# UART on
enable_uart=1
# Bluetooth off
dtoverlay=disable-bt Отключаем сервисы операционной системы, занимающие порты UART, командами: sudo systemctl
Оглавление

В одноплатнике Raspberry PI 4 доступно 5 UART интерфейсов, выведенных на разъем GPIO. Однако, прежде чем начать с ними работать в своих проектах, необходимо сконфигурировать саму "Малинку".

Включение аппаратного UART

Запускаем конфигуратор в терминале командой:

sudo raspi-config

В появившемся диалоге переходим по цепочке меню "Interfacing Options" --> "Serial Port".

-2

На вопрос "Would you like a login shell to be accessible over serial?" отвечаем "<No>".

-3

На вопрос "Would you like the serial port hardware to be enabled?" отвечаем "<Yes>".

-4

На появившемся экране подтверждения нажимаем "<OK>".

-5

Перезагружаем плату. Теперь оболочка отключена от порта UART0.

Включение UART1, UART2, UART3, UART4, UART5

Для этого необходимо отредактировать файл конфигурации config.txt, выполнив команду:

sudo nano /boot/config.txt

В секцию [all] добавляем следующие строки:

dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
# UART on
enable_uart=1
# Bluetooth off
dtoverlay=disable-bt
-6

Отключаем сервисы операционной системы, занимающие порты UART, командами:

sudo systemctl disable hciuart.service
sudo systemctl disable bluealsa.service
sudo systemctl disable bluetooth.service

Перезагружаемся:

reboot

Проверка настроек конфигурации

Проверяем доступные в системе последовательные порты и их имена командой:

ls /dev/ttyAMA*

Результат:

/dev/ttyAMA0 /dev/ttyAMA1 /dev/ttyAMA2 /dev/ttyAMA3 /dev/ttyAMA4
-7

То есть, в системе доступно 5 портов, по именам которых мы будем подключаться в коде своих программ.

Посмотреть все доступные последовательные порты можно командой:

dtoverlay -a | grep uart

Вывод:

midi-uart0
midi-uart1
midi-uart2
midi-uart3
midi-uart4
midi-uart5
miniuart-bt
qca7000-uart0
uart0
uart1
uart2
uart3
uart4
uart5
-8

Подробную информацию о доступном последовательном порте можно узнать командой:

dtoverlay -h uart0

где "uart0" - имя последовательного порта от 0 до 5.

Вывод:

Name: uart0
Info: Change the pin usage of uart0
Usage: dtoverlay=uart0,<param>=<val>
Params: txd0_pin GPIO pin for TXD0 (14, 32 or 36 - default 14)
rxd0_pin GPIO pin for RXD0 (15, 33 or 37 - default 15)
pin_func Alternative pin function - 4(Alt0) for 14&15,
7(Alt3) for 32&33, 6(Alt2) for 36&37
-9

Из этого вывода понятно, что передатчик TXD0 выведен на пин GPIO14, приемник RXD0 - на GPIO15.

Пример для UART4. Выполняем команду:

dtoverlay -h uart4

Вывод:

Name: uart4
Info: Enable uart 4 on GPIOs 8-11. BCM2711 only.
Usage: dtoverlay=uart4,<param>
Params: ctsrtsEnable CTS/RTS on GPIOs 10-11 (default off)
-10

Здесь видно, что передатчик TXD4 выведен на пин GPIO8, RXD4 - на GPIO9, CTX4 - на GPIO10, RTS4 - на GPIO11.

Сводная таблица пинов GPIO

UART0
TXD --> GPIO14
RXD --> GPIO15

UART1
TXD --> GPIO32
RXD --> GPIO33

UART2
TXD --> GPIO0
RXD --> GPIO1
CTS --> GPIO2
RTS --> GPIO3

UART3
TXD --> GPIO4
RXD --> GPIO5
CTS --> GPIO6
RTS --> GPIO7

UART4
TXD --> GPIO8
RXD --> GPIO9
CTS --> GPIO10
RTS --> GPIO11

UART5
TXD --> GPIO12
RXD --> GPIO13
CTS --> GPIO14
RTS --> GPIO15

Напоминаю, что номер GPIO на разъеме и номер пина разъема - это не одно и то же! То есть, GPIO14 находится на пине 8 разъема.

Назначение всех пинов GPIO и состояние резисторов подтяжки можно посмотреть командой:

raspi-gpio funcs
-11

#raspberrypi #gpio #uart