Какое влияние на состояние GPIO?


35

Каково состояние GPIO при подаче питания? например Высокий, Низкий, Привет-Z?

Также любая ОС меняет состояние любых GPIO при загрузке? Надеюсь, что нет.


Если это не указано в таблице данных, вам, вероятно, придется измерить его, чтобы быть уверенным. Linux не «знает» о GPIO, поэтому она не изменит их во время загрузки (если вы не сделали загрузочный скрипт, который это сделал), но всегда есть вероятность, что ROM сможет.
Мальвинус

@ Зловещий, ты не прав. Linux знает о GPIO, и поддержка встроена прямо в ядро. Вот некоторая документация: kernel.org/doc/Documentation/gpio.txt
Эммали Уилсон

2
@DustyWilson: Извините, если мне неясно, я имел в виду, что ядро ​​Linux не использует GPIO во время загрузки. Это делает их доступными только для пользователей и конкретных драйверов. Поэтому стандартное ядро ​​не должно изменять состояние выводов GPIO во время загрузки.
Malvineous

@ Malvineous: Ах, Гоча.
Эммали Уилсон

Ответы:


11

Я нашел ответ здесь благодаря russellstrong . Я цитирую соответствующую часть ниже

Я поспешил к выводам о моих нагрузочных резисторах / чувствительности моей цепи к понижающим резисторам. RPi не устанавливает выход GPIO при первой загрузке. Он включает понижающий резистор на 740 миллисекунд.

Я использовал два 18К резистора (3v3 -> GPIO -> GND), чтобы точно посмотреть, что происходит с выводами. Вот след. Синяя линия - мощность 3 на 3, желтая линия - линия GPIO.

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


Вы можете немного уточнить? Когда загружается Raspberry Pi, GPIO настроен на входное состояние с высоким импедансом?
Алекс Чемберлен

1
@AlexChamberlain, похоже, что чип Broadcom запускается с опусканиями, но загрузчик очищает опускания, чтобы они были с высоким импедансом (входы)
John La Rooy

9

Когда запускается рекомендуемый дистрибутив Debian для RPi, GPIO отключается. Вы должны включить каждый штифт индивидуально.

Если вы делаете это через / sys, вы найдете «Пути в Sysfs» интересными (поиск по адресу http://www.kernel.org/doc/Documentation/gpio.txt ). В частности, вы бы активировали пин-код, «экспортировав» его. Любые команды ниже предполагают, что вы работаете с привилегиями root (sudo или иным) или вы изменили права доступа / владельца изменяемых виртуальных файлов.

echo 4 > /sys/class/gpio/export

Это активирует вывод 4 GPIO, который затем вызывает существование / sys / class / gpio / gpio4, который содержит несколько виртуальных файлов. Эти файлы включают в себя «direction», которое определяет, является ли это входной или выходной вывод, «value», которое доступно только для чтения для ввода или доступно для записи для вывода и содержит текущее значение, и другие.

echo out > /sys/class/gpio/gpio4/direction # set it as an output pin
echo 1 > /sys/class/gpio/gpio4/value # set the value to ON
echo 0 > /sys/class/gpio/gpio4/value # set the value to OFF
echo in > /sys/class/gpio/gpio4/direction # set it as input
cat /sys/class/gpio/gpio4/value # get the value
echo 4 > /sys/class/gpio/unexport # disables pin 4 and removes the gpio4 directory

Конечно, вы, вероятно, предпочтете использовать некоторую ранее существующую библиотеку для GPIO, поставляемого или совместимого с вашим языком по вашему выбору. Но если вам нужно что-то простое, вы можете просто напрямую взаимодействовать с sysfs для создания базового GPIO.


Это полезно Я посмотрел на таблицу данных, но не смог найти состояние выводов по умолчанию. Это важно, если вы управляете всем с помощью выводов и не хотите, чтобы периферия включалась во время загрузки ОС.
Джон Ла Рой

3
Это отличный ответ, но я не уверен, что он действительно отвечает на вопрос. Каково состояние GPIO сразу после его включения? и направление установлено?
Алекс Чемберлен

@gnibbler: я думаю, тебе просто нужно проверить это. Я попробовал это сам немного назад, и я не увидел ничего неожиданного в том, что что-то включалось или выключалось. Я не знаю и не обещаю, что мой опыт ожидаемый. Я бы сказал, что вы должны просто вставить мультиметр или что-то подобное в контакты, которые вы хотите проверить, а затем перезагрузить или выключить и снова включить и выключить Pi несколько раз. То, что я увидел, было то, что все контакты были отключены, как будто Пи не было никакой силы, пока я сам не включил каждый контакт.
Эммали Уилсон

@DustyWilson, возможно, они настроены как входы без подтягиваний или опусканий. Это означает, что они эффективно плавают, если подключены к полевому транзистору, и могут привести к случайному поведению, если в затвор не будет добавлен резистор повышающего / понижающего напряжения
Джон Ла Рой

действительно ... cat /sys/class/gpio/gpio4/directionговорит "в". Я прочитал в таблице данных, что невозможно прочитать состояние подтягиваний / раскрытий. Я постараюсь измерить их
Джон Ла Рой
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.