Raspberry Pi:Настройка/Изменение дефолтной распиновки GPIO-контактов

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Изменение дефолтной распиновки GPIO-контактов[1]

Примечание

Эта функция — для продвинутых пользователей.

Начиная с 15 июля 2014 года прошивка Raspberry Pi поддерживает изменение дефолтной распиновки Raspberry Pi при помощи пользовательского DTB-файла. Чтобы проверить, является ли версия вашей прошивки достаточно новой, запустите команду vcgencmd version.

Создание пользовательского blob-файла с информацией о дереве устройств

Чтобы переконвертировать DTS-файл (эта аббревиатура расшифровывается как «device tree source», что можно перевести как «источник данных о дереве устройств») в DTB-файл (эта аббревиатура расшифровывается как «device tree blob», что можно перевести как «массив двоичных данных о дереве устройств»), вам надо установить компилятор дерева устройств. Делается это при помощи команды

sudo apt-get install device-tree-compiler

После этого вы сможете использовать команду dtc — примерно следующим образом:

sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob.dts
Примечание

Если установка выполнялась через NOOBS, DTB-файл должен находиться в разделе /recovery, а не /boot.

Кроме того, если необходимо, DTB-файл можно переконвертировать обратно в DTS-файл.

dtc -I dtb -O dts -o dt-blob.dts /boot/dt-blob.bin

Секции DTB-файла

Этот dt-blob.bin обычно используется, чтобы при загрузке Pi осуществлять конфигурацию GPU. Ядро Linux этот файл не использует (по крайней мере, на данный момент), но позднее разработчики обещают добавить в dt-blob.bin секцию kernel, чтобы с ее помощью осуществлять конфигурацию ядра Raspberry Pi. DTB-файл позволяет задавать альтернативные настройки, благодаря чему способен конфигурировать любую версию Raspberry Pi, включая даже Вычислительный Модуль (Compute Module). Для DTB-файла корректны следующие секции:

1. videocore

Эта секция содержит всю бинарную информацию о графическом ядре. Все нижеследующие секции должны быть заключены внутрь этой «главной» секции.

2. pins_*

Тут может быть до восьми отдельных секций pins_*, а именно:

  1. pins_rev1. Распиновка для Rev 1. Может немного отличаться из-за перемещенных I2C-контактов.
  2. pins_rev2. Распиновка для Rev 2, включая восемь контактов разъема P5.
  3. pins_bplus1. Model B+ Rev 1.1, включая полный 40-контактный коннектор.
  4. pins_bplus2. Model B+ Rev 1.2. Сетевые и питающие контакты поменялись местами.
  5. pins_aplus. Model A+ за вычетом Ethernet.
  6. pins_2b1. Pi 2 Model B Rev 1.0. SMPS управляется через I2C0.
  7. pins_2b2. Pi 2 Model B Rev 1.1. SMPS управляется через I2C на R42 и R43.
  8. pins_cm. Вычислительный модуль. Имейте в виду, что дефолтные настройки для этого устройства — это дефолтные настройки и для чипа тоже. Поэтому для начала было бы полезно раздобыть где-нибудь исходную информацию о дефолтных стягивающих и подтягивающих резисторах чипа.

Каждая из этих секций может содержать секции pin_config и pin_defines.

3. pin_config

Эта секция используется для конфигурации отдельных контактов. Каждый элемент этой секции должен быть проименован в соответствии с тем контактом, информация о котором в нем содержится. К примеру, pin@p32 будет означать GPIO32.

Кроме того, тут есть специальная секция pin@default, содержащая дефолтные настройки для тех контактов, которые не указаны в pin_config.

4. pin@pinname

В этой секции может содержать любое сочетание нижеперечисленных элементов:

	1. polarity
		— active_high
		— active_low
		2. termination
		— pull_up
		— pull_down
		— no_pulling
	3. startup_state
		— active
		— inactive
	4. function
		— input
		— output
		— sdcard
		— i2c0
		— i2c1
		— spi
		— spi1
		— spi2
		— smi
		— dpi
		— pcm
		— pwm
		— uart0
		— uart1
		— gp_clk
		— emmc
		— arm_jtag
       5. drive_strenght_ma. В этой секции задается выходной ток для GPIO-контактов. Обратите внимание, что это значение задается разом для всех GPIO-контактов Raspberry Pi. Корректные значения для этой секции — «8» и «16».

5. pin_defines

Эта секция используется, чтобы задать отдельным контактам специальный GPU-функционал. Это позволяет, к примеру, переместить на другое место контакты для питания камеры или для подключения HDMI (т.е. речь о вещах, которые Linux не контролирует). Пример DTS-файла — ниже.

Настройка тактовой частоты

Через этот интерфейс можно настраивать и тактовую частоту, но результаты такой настройки предугадать довольно сложно. Конфигурация тактово-частотной системы очень-очень сложна, поскольку Pi имеет пять отдельных PLL-блоков, каждый из которых имеет собственную фиксированную (или вариативную — если речь о PLLC) ГУН-частоту. Кроме того, каждый ГУН имеет множество различных каналов, каждый из которых может быть настроен по-разному — в зависимости от того, на какое значение поделить VCO-частоту. Кроме того, каждый «пункт назначения» тактовой частоты тоже может быть настроен на определенный канал. Впрочем, тут есть и определенные ограничения, поскольку между определенными каналами и получателями «маршрут» проложить нельзя.

По этой причине мы предлагаем рассмотреть пару примеров, которые можно использовать для изменения очень специфичных тактовых частот (см. ниже). В более общем смысле эти настройки добавляются, если какой-то элемент системы запрашивает определенную тактовую частоту.

clock_routing {
   vco@PLLA  {    freq = <1966080000>; };
   chan@APER {    div  = <4>; };
   clock@GPCLK0 { pll = "PLLA"; chan = "APER"; };
};

clock_setup {
   clock@PWM { freq = <2400000>; };
   clock@GPCLK0 { freq = <12288000>; };
   clock@GPCLK1 { freq = <25000000>; };
};

В примере выше мы настраиваем PLLA на исходную ГУН-частоту в 1,96608 ГГц (ограничения для этого ГУН — 600 Мгц - 2,4 ГГц), канал APER – на исходную частоту с делением на «4», а GPCLK0 — на то, чтобы источником выступал PLLA через APER. Конкретно эти настройки используются, чтобы дать аудиокодеку 1288000 Гц, необходимые для генерации 48000 Гц.

Пример DTS-файла

Примечание

Поскольку это новая функция, то создать DTS-файл, который бы гарантированно поддерживался будущими версиями прошивки, к сожалению, нельзя.

Впрочем, DTS-файл, который использовался для компиляции DTB-файла в прошивке от 30 мая 2015, можно загрузить отсюда.

См.также

Внешние ссылки