Почему некоторые контакты GPIO ВЫСОКИЕ, когда загружается Raspberry Pi?

18

У меня есть простая схема, со светодиодом, подключенным к контакту 18 на эталонной плате. Я запускаю простую программу, чтобы установить вывод 18 в положение ВЫСОКОЕ, что включает светодиод, а затем через пару секунд я устанавливаю вывод 18 в положение НИЗКИЙ, и, наконец, я завершаю свою программу с помощью GPIO.cleanup ().

В этот момент светодиод выключен, что означает, что вывод 18 выключен (НИЗКИЙ). Теперь я перезагружаю или перезагружаю мой Raspberry Pi, и когда он снова загружается, светодиод на контакте 18 снова включается, даже если контакт был выключен до того, как я перезагрузил Raspberry Pi.

Почему это может происходить? Как я могу настроить определенный вывод, например, вывод 18, чтобы он отключался при загрузке Raspberry Pi? И я не хочу, чтобы какие-либо контакты GPIO были на ВЫСОКОМ, когда Raspberry Pi загрузится.

Я обеспокоен этой проблемой, потому что, скажем, контакт 18 подключен к двигателю постоянного тока на роботе, и когда Raspberry Pi загрузится, двигатель включится, и это не то, что я хочу, потому что это будет мешать вся конструкция робота, и некоторые двигатели могут запускаться, а другие - нет, в зависимости от контактов, к которым они подключены. Я хочу вручную включить все двигатели синхронно.

Еще одна вещь состоит в том, что не все контакты имеют эту проблему. Некоторые останавливаются, когда Raspberry Pi загружается, а другие нет.

Виктор Малиновый
источник
Этот светодиодный индикатор горит так же ярко, как и при установке на высоком уровне, или он просто тускло светится?
Златовласка
К нему приложено 3,3 вольта.
Виктор Малиновый
Итак, если вы войдете /sys/class/gpioи экспортируете контакт 18, в каком состоянии система скажет, что находится, если вы ничего не меняете?
Златовласка
Когда я пишу "/ sys / class / gpio", он говорит "-bash: / sys / class / gpio: это каталог". Я не уверен, как экспортировать конкретный пин-код.
Виктор Малиновый
Существует множество объяснений этому , поэтому я не буду беспокоиться о том, чтобы извергать. Этот пример является тяжелым для того echo, что пишет, то есть устанавливает что-то. После того, как вы экспортируете его, вы хотите воздержаться от этого и просто использовать cat, который читает, чтобы проверить направление и значение.
Златовласка

Ответы:

25

При включении питания GPIO протягиваются либо высоко, либо низко через внутренние резисторы. Высокий или низкий уровень тяги для конкретного GPIO подробно описан на стр. 102 периферийных устройств ARM BCM2835 .

Поскольку ядро ​​Linux запущено и если дерево устройств включено (вероятно), оно будет переконфигурировать GPIO в соответствии с настройками дерева устройств. Загруженные модули /etc/modulesтакже могут обновлять состояние GPIO.

Любое другое программное обеспечение, которое вы запускаете при запуске, может потенциально перенастроить GPIO после настроек дерева устройств и загрузки модулей.

Безопаснее всего найти аппаратное решение, если у вас есть оборудование, которое может быть неправильно запущено при запуске системы.

Джоан
источник
10

Когда Raspberry Pi загружается, линии GPIO сбрасываются на значения по умолчанию для чипа, затем ОС загружается и сбрасывает их на значения по умолчанию для ОС. Нет способа «запомнить» настройки при перезагрузке. Смотрите также Что такое состояние GPIO? и состояние GPIO после загрузки .

hildred
источник
2

Я знаю, что уже довольно поздно. Отвечать. Вы можете написать скрипт на python или bash, который вручную установит пин-код на низкий уровень и запланирует запуск задания cron при каждой загрузке. Вам не нужно изменять какие-либо системные / критические файлы. Помимо хрон

Sathaye.h
источник