Как Raspberry Pi различает несколько плат расширения?

8

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

Так как же Raspberry Pi узнать, какая доска получает какие конкретные команды? Существует ли какая-то команда инициализации, которую распознает только определенная плата, а затем начинает принимать остальные команды?

cspirou
источник
Это также то, что я вижу со стекируемыми щитами Arduino и другими различными вычислительными платформами.
cspirou
Боюсь, ответ заключается в том, что для одной платы нет стандартного способа обнаружить другую и перенастроить себя. Перед покупкой вам нужно будет изучить детали каждой доски и самостоятельно определить ее способность работать друг с другом.
Джоан

Ответы:

5

Компьютеры используют систему, называемую шинной, для подключения нескольких периферийных устройств к ЦП через один и тот же набор проводов. I2C и SPI являются примерами систем шин, используемых с выводами pi GPIO, которые позволяют использовать несколько устройств на одних и тех же физических выводах (управляемых внутренней шиной), но с разными адресами . Адресация - это абстракция, созданная протоколом системной шины. Это немного похоже на то, как вы можете иметь несколько сетевых приложений, использующих одно и то же физическое соединение с Интернетом, и все они работают одновременно.

Например, если взглянуть на RTC Pi Plus , одну из стекируемых плат из вашего примера ссылки:

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

Обратите внимание на пять сторон в пяти соединениях в коробке. Они соответствуют контактам на другой стороне. Они помечены:

  • 5 В = Питание, совместное использование с другими устройствами.
  • GND = Земля, также часто
  • SDA и SCL = выводы шины I2C; на пи это контакты 3 и 5. На шине I2C может быть довольно много устройств, использующих эти же два контакта для связи.
  • SQW = Я считаю, что это означает "прямоугольную волну", и, возможно, один из наших более знающих электронику членов оставит приятный комментарий, объясняющий его цель.

Другими словами, большинство выводов вообще не используются этой доской. Они просто там, чтобы учесть укладку. Все, что он использует, все (или в основном все еще не знают о SQW) могут использоваться совместно с другими устройствами.

Реальным пределом для такой укладки будет количество энергии, которое может быть подано против потребляемого, а не количество задействованных контактов. Возможно, это станет ограничением, если вы включите дополнительные источники питания, но я думаю, что раньше вам нужно было бы вынести стек наружу и начать использовать лестницу для работы с ним. ;)

Златовласка
источник
3

Вы можете иметь только одну доску HAT, поэтому такой проблемы нет. Есть несколько плат, к которым можно подключить более одной платы, но это не платы HAT.

лосось
источник
1
Шляпы могут быть неправильными, но я говорю о платах, которые подключаются к выводам GPIO. На следующем сайте показаны высокие стопки таких досок. abelectronics.co.uk Я могу изменить вопрос, чтобы удалить «HATs»
cspirou
1

Так как же Raspberry Pi узнать, какая доска получает какие конкретные команды?

Пи не может знать. Вы должны убедиться.

Дело в том, что если вы подключаете несколько плат расширения, вам нужно позаботиться о том, чтобы сигнальные линии либо не использовались более одного раза, либо реализовать схему шин, которая может работать с несколькими устройствами, использующими несколько линий (как уже предлагалось @goldilocks). Чтобы почувствовать, как это можно сделать, я бы порекомендовал почитать на старой шине ISA . Нечто, что может быть реализовано с использованием GPIO в качестве строк данных и адресов (и если это возможно).

Существует ли какая-то команда инициализации, которую распознает только определенная плата, а затем начинает принимать остальные команды?

Хотя о HAT не может быть и речи, схема идентификации, которую они используют, стоит посмотреть. Обратите внимание на то, что нет стековых HAT * (в блоге Raspberry Pi : стекируемые HAT, представленные в обсуждении спецификации, - но в итоге они были исключены из-за значительного увеличения сложности автоконфигурации и возможной ошибки пользователя. ). Таким образом, в любой момент времени будет подключен только один HAT, будет считана его EEPROM и предоставлена ​​информация в дереве устройств.


* Можно создавать составные шляпы, если они относятся к одному и тому же типу и, таким образом, не требуют многократной и разной идентификации, например, 16-канальный ШИМ / Серво HAT Adafruit для Raspberry Pi .

Ганима
источник