Настройка пинов в режиме Beaglebone

В биглборде или биглбоуне есть разные режимы работы булавки. В предыдущем ядре они находились в /sys/kernel/debug/omap_mux. Знаете ли вы с последним ядром, где эти файлы?


person Margarita Gonzalez    schedule 01.06.2013    source источник


Ответы (6)


Я нашел, что многие из примеров, представленных на хипстерских кругах, немного ошеломляют; особенно если вы просто хотите настроить контакты в режиме 7. Если у кого-то, кто читает это, возникла та же проблема, следующая ссылка может помочь: http://bbbadventures.blogspot.ca/2013/06/pinmuxing.html Предоставляет самый простой шаблон.

Если ссылка выше не работает, вот предоставленный фрагмент (с некоторыми изменениями для ясности):

/*
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/dts-v1/;
/plugin/;

/ { compatible = "ti,beaglebone", "ti,beaglebone-black";
    /* identification */
    part-number = "pinctrl-test-0";
    fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
            pinctrl_test: pinctrl_test_0_pins {
                pinctrl-single,pins = <
                    0x030 0x07 /* P8_12 OUTPUT | MODE7 */
                    0x034 0x07 /* P8_11 OUTPUT | MODE7 */
                    /* Add more pins here */
                >;
            };
        };
    };

    fragment@1 {
        target = <&ocp>;
        __overlay__ {
            test_helper: helper {
                compatible = "bone-pinmux-helper";
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_test>;
                status = "okay";
            };
        };
    };
};

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

Каждый вывод устанавливается путем добавления дополнительной записи в pinctrl-single,pins. Формат выглядит так:

[смещение] [режим]

Пример: 0x030 0x07

В двух таблицах, связанных выше, обратитесь к третьему столбцу, озаглавленному «ADDR/OFFSET», для значения смещения.

Надеюсь, это поможет :)

Изменить: я должен также упомянуть, что ответы, предоставленные Мартином и Доном, превосходны и должны помочь охватить остальные важные детали.

person Axle    schedule 03.07.2013
comment
+1 Эти таблицы очень помогли, особенно зная, что уже выделено. - person Don Branson; 26.07.2013

Ответ Дона Брэнсона — отличное введение в то, как читать контакты GPIO, но, к сожалению, он не описывает, как вы можете изменить режим контакта, например. с GPIO на SPI. Это стало сложнее с ядрами 3.8.13 (?) и выше. По ряду причин разработчики ядра перешли на "модель дерева устройств".

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

Затем вы компилируете этот файл с помощью dtc в «двоичный файл дерева устройств» и помещаете этот двоичный файл в /lib/firmware. Наконец, вы включаете режимы контактов, повторяя имя двоичного файла (вы можете опустить расширение .dtb) до /sys/devices/bone_capemgr.*/slots.

Очень информативный пример выложен в этом замечательном блоге:

http://hipstercircuits.com/enable-spi-with-device-tree-on-beaglebone-black-copy-paste/

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

Удачи вам!

person Martin J.H.    schedule 12.06.2013

Я нашел то, что мне было нужно здесь: http://www.armhf.com/index.php/using-beaglebone-black-gpios/.

У меня ядро ​​3.8.13.

Исходя из этого, я написал этот скрипт:

#!/bin/bash

# http://www.armhf.com/index.php/using-beaglebone-black-gpios/
# pin 9:11, gpio0[30] - 0 + 30 = 30
echo 30 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio30/direction
cat /sys/class/gpio/gpio30/value

# 1=switch open; 0=switch closed
while [ 1 ] ; do cat /sys/class/gpio/gpio30/value ; sleep .5 ; done

Когда контакт удерживается на низком уровне, сценарий отображает 0 и 1 при высоком уровне. Я макетировал схему на основе http://www.digikey.com/us/en/techzone/microcontroller/resources/articles/protecting-inputs-in-digital-electronics.html.

Оранжевые провода в правой части изображения действуют как переключатель.

Мой план состоит в том, чтобы затем взять это и дверной переключатель от мертвого принтера, чтобы сделать переключатель морозильной камеры. Затем я изменю сценарий, чтобы он присылал мне электронное письмо, когда морозильная камера была открыта более, чем, скажем, 10 минут.

введите здесь описание изображения

Редактировать:

Немного изучил и нашел больше информации о том, как настроить pinmux, особенно с наложениями дерева устройств:

Хорошо, посмотрел это и многому научился: http://www.youtube.com/watch?v=wui_wU1AeQc

Наконец-то удалось получить контроль над настройками pinmux на BBB с помощью наложения дерева устройств ниже. Секция фрагмента@1 по-прежнему волшебна для меня, так что, надеюсь, в какой-то момент она будет иметь больше смысла. Тем не менее, по крайней мере, я могу обнаружить замкнутые переключатели на всех контактах.

Одним из важных элементов была диаграмма в проекте Дерека здесь: https://github.com/derekmolloy/boneDeviceTree/tree/master/docs

/dts-v1/;
/plugin/;

/ {
        compatible = "ti,beaglebone", "ti,beaglebone-black";
        part-number = "mousetraps";
        version = "00A1";

        /* https://github.com/derekmolloy/boneDeviceTree/blob/master/docs/BeagleboneBlackP9HeaderTable.pdf */
        fragment@0{
                target = <&am33xx_pinmux>;
                __overlay__ {
                        mousetrap_pins: pinmux_mousetrap_pins {
                            pinctrl-single,pins = <
                                    0x070 0x2f /* P9_11 30 INPUT MODE7 none */
                                    0x074 0x2f /* P9_13 31 INPUT MODE7 none */
                                    0x040 0x2f /* P9_15 48 INPUT MODE7 none */
                                    0x15c 0x2f /* P9_17 05 INPUT MODE7 none */
                            >;
                        };
                };
        };

        fragment@1{
                target = <&ocp>;
                __overlay__ {
                        test_helper: helper {
                                compatible = "bone-pinmux-helper";
                                pinctrl-names = "default";
                                pinctrl-0 = <&mousetrap_pins>;
                                status = "okay";
                        };
                };
        };
};
person Don Branson    schedule 07.06.2013

Ознакомьтесь с этим набором файлов дерева устройств: https://github.com/nomel/beaglebone/tree/master/gpio-header

Это позволяет вам изменять режим gpio mux на лету.

Я только что попробовал их, и они, кажется, работают.

person brandon    schedule 04.09.2013

Написание файлов наложения дерева устройств сложно и особенно раздражает, если вы пытаетесь поиграть с устройством, а не выпускать продукт. Выручает утилита config-pin.

Это позволяет запрашивать и устанавливать контакты в любой из разрешенных режимов. Вам по-прежнему понадобится наложение дерева устройств, чтобы разрешить нужный режим, но есть плащ, который разрешает все, поэтому вам не нужно об этом беспокоиться; это называется накидка-универсал. config-pin использует номер контакта на разъеме в качестве имени контакта. Например, чтобы установить вывод, известный как P8.11, вывод 13, gpio45 и gpio1_13 (это один вывод) в режим 6, также известный как pr1_pru0_pru_r30_15 (который устанавливает вывод на вывод, управляемый pru от 0 до 15 бит в регистре 30 ), вы бы сделали:

# The first line only needs to be done once; it loads the cape overlay.
config-pin overlay cape-universal
config-pin P8.11 pruout

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

person Bas Wijnen    schedule 11.08.2015

Как было сказано выше, я объясню магию фрагмента@n... узлы "fragment@n", "target" и "overlay" специфичны для загрузчика наложения дерева устройств, который исправляет существующий Дерево устройств. Эти узлы не попадают в окончательный объединенный DT, они просто указывают загрузчику оверлея, что делать.

Файлы наложения могут иметь, так сказать, несколько «заплаток» к дереву. Каждый фрагмент@n просто объявляет новый патч, «цель» указывает, куда в дереве устройств будет скопирован патч, а «overlay» — это содержимое патча. Содержимое объединяется, а существующие узлы заменяются. Цели могут использовать фактический синтаксис пути DT (узлы, разделенные /) или псевдонимы, которые используются здесь (&ocp и &am33xx_pinmux). Псевдонимы уже установлены для важных узлов в DT.

«Совместимость», «номер детали» и «версия» вверху также относятся к оверлеям и обычно используются как фильтры, чтобы определить, поддерживается ли оверлей на текущем оборудовании. Все файлы наложений имеют определенный синтаксис вплоть до узла overlay, после чего внутреннее содержимое представляет собой обычный синтаксис старого дерева устройств. Ядра могут поддерживать дерево устройств, но не оверлеи, и в этом случае вам, возможно, придется самостоятельно копировать и вставлять фрагменты в один DTS/DTB. DT и DTO — прекрасная система для встраиваемых систем и драйверов, но к ней нужно привыкнуть.

person guru_florida    schedule 27.09.2017