В beagleboard или beaglebone есть разные режимы работы булавки. С предыдущим ядром они расположены в/sys/kernel/debug/omap_mux. Знаете ли вы с последним ядром, где находятся эти файлы?Настройка штифтов Режим Beaglebone
ответ
Я нашел множество примеров, представленных в 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";
};
};
};
};
При добавлении нескольких штифтов в вышеприведенном фрагменте кода, вы можете использовать следующие таблицы для определения того, какие шестнадцатеричные значения соответствовать штифты:
- https://github.com/derekmolloy/boneDeviceTree/blob/master/docs/BeagleboneBlackP8HeaderTable.pdf?raw=true
- https://github.com/derekmolloy/boneDeviceTree/blob/master/docs/BeagleboneBlackP9HeaderTable.pdf?raw=true
Каждый штырь устанавливается добавлением дополнительной записи в pinctrl-single-pin. Формат выглядит следующим образом:
[смещение] [режим]
Пример: 0x030 0x07
В двух таблицах, связанных выше, относится к третьему колонку, озаглавленный "ADDR/OFFSET", для смещения стоимость.
Я надеюсь, что это помогает :)
Edit: Я хотел бы также отметить, что ответы, представленные Мартином и Доном и превосходны должны помочь покрыть остальные важные детали.
Я нашел то, что мне было нужно здесь: 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 минут.
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";
};
};
};
};
Дон Брэнсон большое введение о том, как читать 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/
Постараюсь расширить свой ответ, как я могу узнать больше об этой теме самих.Или, может быть, кто-то может предложить изменения или, надеюсь, даже более экспансивный ответ? Информация, которая в настоящее время доступна, немного редка ...
Удачи вам!
Хорошая информация, спасибо! –
Заканчивать этот набор файлов дерева устройств: https://github.com/nomel/beaglebone/tree/master/gpio-header
Это позволяет изменить режим GPIO мультиплексора на лету.
Я просто попробовал их, и они, похоже, работают.
Наложение файлов наложения на дерево устройства является сложным и особенно раздражающим, если вы пытаетесь поиграть с устройством, а не выпускать продукт. Утилита 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.
Как было сказано выше, я объясню фрагмент @ n magic ...узлы «фрагмент @ n», «цель» и «» «узлы специфичны для накладного загрузчика дерева устройств, который исправляет существующее дерево устройств. Эти узлы не попадают в окончательный объединенный DT, они просто должны сказать загрузчику наложения, что делать.
Файлы наложения могут иметь несколько «патчей» для дерева, так сказать. Каждый фрагмент @ n просто объявляет новый патч, «target» указывает, где в дереве устройств будет скопирован патч, а «overlay» - это содержимое патча. Содержимое объединяется и существующие узлы заменяются. Цели могут использовать фактический синтаксис пути DT (узлы, разделенные /) или псевдонимы, которые используются здесь (& ocp и & am33xx_pinmux). Псевдонимы уже установлены для важных узлов в DT.
«Совместимый», «неполный номер» и «версия» наверху также относятся к оверлеям и обычно используются как фильтры, чтобы определить, поддерживается ли наложение на текущем оборудовании. Все оверлейные файлы имеют определенный синтаксис до наложения узла, в котором внутреннее содержимое представляет собой простой старый синтаксис дерева устройств. Ядра могут поддерживать Дерево устройств, но не накладываются, и в этом случае вам, возможно, придется копировать и вставлять фрагменты в один DTS/DTB самостоятельно. DT и DTO - прекрасная система для встроенных систем и драйверов, но к ним привыкают.
+1 Эти таблицы очень помогли, особенно с пониманием того, что уже выделено. –