2013-06-01 2 views

ответ

9

Я нашел множество примеров, представленных в hipstercircuits, чтобы быть немного подавляющим; особенно если вы просто пытаетесь настроить контакты в режиме 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"; 
    [email protected] { 
     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 */ 
       >; 
      }; 
     }; 
    }; 

    [email protected] { 
     target = <&ocp>; 
     __overlay__ { 
      test_helper: helper { 
       compatible = "bone-pinmux-helper"; 
       pinctrl-names = "default"; 
       pinctrl-0 = <&pinctrl_test>; 
       status = "okay"; 
      }; 
     }; 
    }; 
}; 

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

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

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

Пример: 0x030 0x07

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

Я надеюсь, что это помогает :)

Edit: Я хотел бы также отметить, что ответы, представленные Мартином и Доном и превосходны должны помочь покрыть остальные важные детали.

+0

+1 Эти таблицы очень помогли, особенно с пониманием того, что уже выделено. –

7

Я нашел то, что мне было нужно здесь: 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 минут.

enter image description here

Edit:

ли некоторые исследования и нашел больше информации о том, как установить 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 */ 
     [email protected]{ 
       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 */ 
          >; 
         }; 
       }; 
     }; 

     [email protected]{ 
       target = <&ocp>; 
       __overlay__ { 
         test_helper: helper { 
           compatible = "bone-pinmux-helper"; 
           pinctrl-names = "default"; 
           pinctrl-0 = <&mousetrap_pins>; 
           status = "okay"; 
         }; 
       }; 
     }; 
}; 
9
ответ

Дон Брэнсон большое введение о том, как читать GPIO булавку, но, к сожалению, она не охватывает, как вы можете изменить булавочную режим, например от GPIO до SPI. Это стало more complicated с ядрами 3.8.13 (?) И выше. По ряду причин разработчики ядра переключились на "device tree model".

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

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

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

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

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

Удачи вам!

+0

Хорошая информация, спасибо! –

1

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

Позволяет запрашивать и устанавливать контакты в любой из режимов, которые они позволяют. Вам по-прежнему потребуется наложение дерева устройств, чтобы разрешить режим, который вы хотите, но есть плащ, который позволяет все, поэтому вам не нужно беспокоиться об этом; он называется cape-универсальным. 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 

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

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^