Використання додаткових GPIO в якості цифрового вводу / виводу?


11

сподіваюся, це питання досить просте, але мій швидкий гуглінг не знайшов відповіді.

Я знаю, що у RPi є декілька GPIO, які я можу використовувати, а також спеціалізовані GPIO (SPI, I2C, UART тощо). У моєму проекті я фактично закінчуюсь звичайними GPIO, і я хотів би використовувати SPI, I2C та інші GPIO як "звичайні" GPIO. Я знаю, що це можна зробити, але, мабуть, я не впевнений, як я можу їх налаштувати, щоб вони не працювали в режимах SPI / I2C / тощо, а просто працювали як звичайні GPIO.

Чи потрібно мені щось робити, щоб правильно їх встановити для цього?

Відповіді:


10

Коротка відповідь

Ні, ви (майже) цього не робите. Насправді навпаки - ви повинні налаштувати їх не на GPIO, а на їх особливе призначення. Єдиним винятком є ​​шпильки UART. Також і шпильки I²C якось особливі.

Шпильки UART

UART штифти використовуються ядром для консолі. Вам доведеться налаштувати систему не використовувати їх, якщо ви хочете, щоб вони були доступними для вашого використання:

  • редагування /boot/cmdline.txtта видалення console=ttyAMA0,115200та kgdboc=ttyAMA0,115200параметри
  • відредагуйте /etc/inittabта прокоментуйте (поставте #персонаж перед ним) рядок:

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • перезавантажте RaspberryPi

Тепер шпильки не повинні використовуватися системою, і ви можете ними користуватися

Шпильки I²C

На штифтах I²C встановлені вбудовані підвісні резистори 1,8 к. Вони не можуть бути відключені. Це обмежує використання цих штифтів в одних ситуаціях (але може бути зручно в інших).

Додаткові рішення

Якщо у вас не вистачає GPIO-штифтів, іноді ви можете легко розширити його номер, використовуючи додаткове (але просте) обладнання. Наприклад, для виводу, ви можете використовувати shift registersабо I²C I/O expanders(також звані `розширювачі шин I²C), і їх легко купувати та використовувати. Ви можете знайти приклад його використання тут .

PFC8574(або подібні з цього сімейства) настільки популярні, що є готовий до використання модуль ядра, який обробляє всю комунікацію для вас ( це не ввімкнено в офіційному ядрі RaspberryPi, для його використання потрібно буде скласти власне ядро ). Модуль викликається gpio_pcf857x, якщо ви завантажили його modprobe(разом з драйверами I²C) і у вас є чіп, підключений до I²Cшини, ви можете його активувати так:

echo pcf8574 0x27 > /sys/class/i2c-adapter/i2c-0/new_device

де pcf8574ваше власне ім’я мікросхеми (цей модуль може обробляти декілька різних мікросхем, таких як pca967xі max732x), і 0x27вказується його адреса I²C(ви можете налаштувати адресу мікросхеми при підключенні до нього).

Це створить записи в /sys/class/gpio/каталозі, які дозволять вам використовувати їх так само, як і інші порти GPIO в RaspberryPi, за умови використання sysінтерфейсу (наприклад, wiringPiSetupSys()в wiringPi). На жаль, RPi.GPIOмодуль Python не підтримує цей режим, тому він не зможе використовувати ці шпильки з цією бібліотекою. У штифтів буде кілька високих цифр, таких як 248-255 або подібних.

Примітка: PCF8574 є sinking current- це може дати мийці диска (прийняти в низькому стані) аж 20mA, але він може створювати лише 0,1mA у високому стані. Це означає, що ви зазвичай збираєтесь використовувати його у зворотній логіці, тобто +3.3V -> LED -> RESISTOR -> PCF8574_PIN.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.