2015-12-16 3 views
1

Я создаю новое приложение с использованием Beaglebone Black. Мне нужно настроить GPIO для различных функций. У меня будут некоторые GPIO, некоторые PWM и, возможно, некоторые другие функции.Каковы плюсы/минусы различных способов настройки GPIO на Beaglebone Black?

Я отмечаю, что есть разные способы сделать это. Они находятся в порядке предпочтения:

  • можно писать код, используя Adafruit's Python library сказать «установить этот штифт вверх как PWM» и так далее;
  • Я могу сделать same in Javascript;
  • Я могу создать и скомпилировать исходный файл оверлей дерева устройств (.dts) и использовать его;
  • Я мог бы сделать сценарий bash и echo 'out' и 'in' и т. Д. Для различных определений устройств в файловой системе;
  • Я предполагаю, что есть API C, хотя я бы не использовал его для этого приложения.

Моей большой потребностью здесь является тиражируемость. Мне не нужна высокая производительность. Мне просто нужно настроить связку Beaglebone Blacks таким же образом и заставить их вести себя надежно.

Есть ли какое-то преимущество, которое я не вижу, чтобы сделать наложение на дерево устройства и все такое? Когда кто-то выбирает один метод над другим?

ответ

1

Штыревые мультиплексоры сконфигурированы через регистры в подсистеме модуля управления процессором AM335x. При запуске GNU/Linux регистры модуля управления могут быть доступны только из пространства ядра и, следовательно, должны выполняться драйвером ядра.

На BeagleBone есть драйвер под названием bone-pinmux-helper, который позволяет изменять время выполнения между различными конфигурациями pinmux из пользовательского пространства. Конфигурации необходимо настроить и предварительно передать драйверу с наложением дерева устройств. Например, в PyBBIO у меня есть сценарий, который генерирует overlays для каждого из контактов GPIO. Они настраивают различные возможные режимы (в, из, pullup, dropldown и т. Д.), Затем передают все это в драйвер для костяного pinmux-помощника в разных режимах. Затем, когда вызывается functino pinMode(), PyBBIO использует драйвер capemgr для загрузки сгенерированного наложения для булавки, а затем использует запись sysfs, которую он создает для этого вывода, чтобы установить его в запрошенный режим.

Bonescript использует тот же метод, что и PyBBIO, а IIRC Adafruit_BBIO не имеет наложений для pinmuxing и требует, чтобы пользователь выполнял его отдельно.

Итак, длинный рассказ, оверлеи дерева устройств - единственный способ сделать pinmuxing, а библиотеки пользовательского пространства, такие как PyBBIO и bonescript, просто абстрагируются от этого. Если вы хотите иметь полный контроль, напишите и скомпилируйте свои собственные оверлеи. Если вы не хотите иметь дело с написанием наложений DT или беспокоиться о совместимости, поскольку со временем ситуация может измениться, используйте библиотеку PyBBIO или Bonescript, которые абстрагируются от этого уровня и верят, что они будут следить за тем, чтобы все работало.

+0

Я думаю, что библиотека Adafruit обрабатывает pinmuxing. Я пробовал пару базовых операций, используя PWM и GPIO, и, казалось, работал нормально, без дополнительной работы. Мне не нужно было накладывать наложения. –

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