Для взаимодействия с физическими контактами на гребенке GPIO библиотека RepkaPi.GPIO
предоставляет четыре различных схемы адресации. Выбор конкретной схемы осуществляется единожды за сеанс работы с помощью функции GPIO.setmode()
и определяет, как именно программа будет идентифицировать целевой пин. Понимание этих схем является фундаментальным для корректной работы с аппаратным обеспечением.
1. GPIO.BOARD
: Физическая нумерация
-
Определение: Данный режим является прямой проекцией нумерации контактов на 40-пиновой гребенке. Пины именуются целыми числами от 1 до 40 в соответствии с их физическим положением.
-
Принцип работы: Библиотека использует внутреннюю таблицу соответствия (
BOARD_TO_BCM
), чтобы преобразовать физический номер пина в его системный номер, который используется ядром Linux. -
Пример:
import RepkaPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) # Мы обращаемся к контакту, который является 7-й физической ножкой на плате. # Библиотека сама определит, что это системный GPIO7 (PA7). led_pin = 7 GPIO.setup(led_pin, GPIO.OUT)
2. GPIO.BCM
: Нумерация по номеру канала SoC
-
Определение: Этот режим использует нумерацию, основанную на номере канала GPIO непосредственно в однокристальной системе (SoC). Название
BCM
исторически унаследовано от процессоров Broadcom в Raspberry Pi, но в контексте Repka Pi и других плат оно означает системный номер GPIO, используемый вsysfs
. -
Принцип работы: В этом режиме передаваемое значение напрямую соответствует номеру GPIO в
/sys/class/gpio
. Этот подход абстрагирует программу от физического расположения пина, привязывая ее к функции чипа. -
Пример:
import RepkaPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) # Мы обращаемся к системному каналу GPIO4. На плате Repka Pi 3 # он физически выведен на 8-й контакт гребенки. tx_pin = 4 GPIO.setup(tx_pin, GPIO.OUT)
3. GPIO.SUNXI
и GPIO.SOC
: Архитектурная адресация
Эти два режима являются самым низкоуровневым способом адресации и основаны на архитектуре процессоров Allwinner, где все пины сгруппированы в порты. Каждый порт обозначается латинской буквой (A
, B
, C
, D
...) и содержит определенное количество пинов (например, PA0
, PA1
... PL7
).
Принцип вычисления системного номера
Системный номер GPIO (используемый в sysfs
и режиме BCM
) не является произвольным. Он вычисляется по строгой формуле, основанной на номере порта и номере пина внутри порта:
Системный_номер = (Номер_порта * 32) + Номер_пина_в_порту
В библиотеке RepkaPi.GPIO
буквенным портам соответствуют числовые константы, которые по сути являются множителями.
PA
-> 0 (A
- 1-я буква алфавита,(1-1)*32=0
)PB
-> 32 (B
- 2-я буква,(2-1)*32=32
)PC
-> 64 (C
- 3-я буква,(3-1)*32=64
)PD
-> 96PE
-> 128- ...и так далее.
Для портов, идущих после PI
, PJ
, PK
(которые отсутствуют в архитектуре Allwinner), используются напрямую заданные константы, например:
PL
-> 352
Таким образом, для пина PL7
системный номер будет вычислен как: 352 (база порта L) + 7 (номер пина) = 359
.
Реализация в режимах
-
GPIO.SUNXI
: В этом режиме вы передаете имя пина в виде строки. Библиотека сама разбирает эту строку, определяет порт и номер пина, а затем выполняет вычисление.Пример:
import RepkaPi.GPIO as GPIO GPIO.setmode(GPIO.SUNXI) # Передаем "PL7". Библиотека вычислит 352 + 7 = 359. led_pin = "PL7" GPIO.setup(led_pin, GPIO.OUT)
-
GPIO.SOC
: В этом режиме вы выполняете вычисление самостоятельно, используя предопределенные константы.Пример:
import RepkaPi.GPIO as GPIO GPIO.setmode(GPIO.SOC) # Мы сами вычисляем адрес: GPIO.PL (352) + 7 = 359 led_pin = GPIO.PL + 7 GPIO.setup(led_pin, GPIO.OUT)
4.4. Сводка и сценарии использования
Режим | Формат значения | Механизм | Сценарий использования |
---|---|---|---|
GPIO.BOARD |
Целое число (1-40) |
Прямая нумерация контактов. | Физическое прототипирование, образовательные цели. |
GPIO.BCM |
Целое число |
Системный номер GPIO (sysfs ). |
Написание переносимого ПО, работа с существующими скриптами. |
GPIO.SUNXI |
Строка ("PL7") |
Архитектурное имя пина. | Работа с технической документацией на SoC, повышение читаемости кода. |
GPIO.SOC |
Выражение (GPIO.PL+7 ) |
Архитектурное имя (вычисляемое). | Программная генерация пинов, работа с портами целиком. |