Найти в Дзене

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

Запускаем конфигуратор в терминале командой: 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. Посмотреть все доступные последовательные порты можно командой: dtoverlay -a | grep uart Вывод: midi-uart0
midi-uart0-pi5
midi-uart1
midi-uart1-pi5
midi-uart2
midi-uart2-pi5
midi-uart3
midi-uart3-pi5
midi-uart4
midi-uart4-pi5
midi-uart5
miniuart-bt
qca7000-uart0
uart0
uart0-pi5
uart1
uart1-pi5
uart2
uart2-pi5
uart3
uart3-pi5
uart4
uart4-pi5
uart5 Подробную информацию о доступном последовательном порте можно узнать командой: dtoverlay -h uart0-pi5 где "uart0" - имя последовательного порта от 0 до 5. Вывод: Name: uart0-pi5
Info: Enable uart 0 on GPIOs
Оглавление

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

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

sudo raspi-config

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

-2
-3

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

-4

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

-5

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

-6

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

Доступные последовательные порты

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

dtoverlay -a | grep uart

Вывод:

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

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

dtoverlay -h uart0-pi5

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

Вывод:

Name: uart0-pi5
Info: Enable uart 0 on GPIOs 14-15. Pi 5 only.
Usage: dtoverlay=uart0-pi5,<param>
Params: ctsrts Enable CTS/RTS on GPIOs 16-17 (default off)
-7

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

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

UART0
TXD --> GPIO14
RXD --> GPIO15
CTS --> GPIO16
RTS --> GPIO17

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

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

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

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

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

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

"Доступный порт" - не значит готовый к использованию, т.к. Linux еще не назначил ему файл вывода, а ножка GPIO не сконфигурирована. Отредактируем файл конфигурации config.txt, выполнив команду:

sudo nano /boot/firmware/config.txt

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

dtoverlay=uart1-pi5
dtoverlay=uart2-pi5
dtoverlay=uart3
-pi5
dtoverlay=uart4
-pi5
# UART on
enable_uart=1
# Bluetooth off
dtoverlay=disable-bt
-8

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

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

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

sudo reboot

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

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

ls /dev/ttyAMA*

Результат:

/dev/ttyAMA0 /dev/ttyAMA10 /dev/ttyAMA3 /dev/ttyAMA1 /dev/ttyAMA2 /dev/ttyAMA4
-9

То есть, теперь в системе для работы доступно 5 портов, которые мы добавили и шестой - /dev/ttyAMA10. Это выделенный порт на отдельном разъеме платы, а не на линейке GPIO.

Назначение интересующих нас пинов GPIO, их логическое состояние и подключенные резисторы подтяжки можно посмотреть командой:

pinctrl | grep XD

Вывод:

-10

Состояние всех пинов GPIO без фильтрации смотрите командой

pinctrl

И, естественно, не обязательно включать все порты UART, как описано в статье. Используете, исходя из своих задач.