Яка влада на стан GPIO?


35

Який стан GPIO, коли застосовується живлення? наприклад високий, низький, привіт-Z?

Чи будь-яка ОС змінює стан будь-яких GPIO, коли вона завантажується? Сподіваюсь, що ні.


Якщо це не в аркуші, вам, ймовірно, доведеться його заміряти, щоб впевнитись. Linux не "знає" про GPIO, щоб він не міняв їх під час завантаження (якщо ви не створили сценарій запуску, який це робив), але завжди є ймовірність, що ПЗУ може бути.
Malvineous

@Malvineous, ти неправий. Linux знає про GPIO, і підтримка вбудована прямо в ядро. Ось документація: kernel.org/doc/Documentation/gpio.txt
Еммалі Вілсон

2
@DustyWilson: Вибачте, якщо мені було незрозуміло, я мав на увазі, що ядро ​​Linux не використовує GPIO під час завантаження. Це робить їх доступними лише для користувачів і певних драйверів. Тому ядро ​​запасу не повинно змінювати стан GPIO-штифтів під час завантаження.
Malvineous

@Malvineous: Ах, готча.
Еммалі Вілсон

Відповіді:


11

Я знайшов відповідь тут завдяки russellstrong . Цитую відповідну частину нижче

Я перейшов до висновків про мої підтягуючі резистори / чутливість моєї схеми до резисторів, що тягнуться. RPI не встановлює GPIO для виведення при першому завантаженні. Він вмикає висувний резистор протягом 740 мілісекунд.

Я використав два резистори 18K (3v3 -> GPIO -> GND), щоб подивитися, що саме відбувається з шпильками. Ось слід. Синя лінія - 3v3 потужність, жовта - лінія GPIO.

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


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

1
@AlexChamberlain, схоже, мікросхема широкоспроможного запускається із витягування, але завантажувач очищає витягування, тому вони будуть мати високий імпеданс (входи)
Джон Ла Рой

9

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

Якщо ви робите це через / sys, вам буде цікавим "Шляхи в Sysfs" (пошук у http://www.kernel.org/doc/Documentation/gpio.txt ). Зокрема, ви б увімкнули шпильку, "експортуючи" її. Будь-які команди нижче припускають, що ви працюєте з привілеями root (sudo чи іншим чином) або ви змінили дозволи / право власності на віртуальні файли, що змінюються.

echo 4 > /sys/class/gpio/export

Це дозволяє PIN-код GPIO №4, який призводить до існування / sys / class / gpio / gpio4, який містить кілька віртуальних файлів. Ці файли містять "напрямок", який визначає, чи це вхідний чи вихідний штифт, "значення", яке є лише для читання для введення, або для запису для виведення, і містить поточне значення та інші.

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.