Системы нумерации пинов: "BOARD", "BCM", "SOC", "SUNXI".

Для взаимодействия с физическими контактами на гребенке 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 -> 96
  • PE -> 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) Архитектурное имя (вычисляемое). Программная генерация пинов, работа с портами целиком.

51 просмотров0 комментариев

Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Разделы

Навигация

ВойтиРегистрация