Я только начинаю использовать GPIO на Raspberry Pi для различных проектов. Для RPi есть много разделительных досок, и у многих из них есть контакты для укладки досок друг на друга. Кажется, что выводы GPIO просто проходят сквозь них, и все платы имеют одинаковые общие выводы. Для меня это означает, что все платы в стеке получают одинаковые сигналы от RPi и должны вести себя соответственно. Кажется, что это может привести к большому количеству ошибок с командами, предназначенными для одной платы, которые влияют на работу другой платы, но, очевидно, этого не происходит.
Так как же Raspberry Pi узнать, какая доска получает какие конкретные команды? Существует ли какая-то команда инициализации, которую распознает только определенная плата, а затем начинает принимать остальные команды?
Ответы:
Компьютеры используют систему, называемую шинной, для подключения нескольких периферийных устройств к ЦП через один и тот же набор проводов. I2C и SPI являются примерами систем шин, используемых с выводами pi GPIO, которые позволяют использовать несколько устройств на одних и тех же физических выводах (управляемых внутренней шиной), но с разными адресами . Адресация - это абстракция, созданная протоколом системной шины. Это немного похоже на то, как вы можете иметь несколько сетевых приложений, использующих одно и то же физическое соединение с Интернетом, и все они работают одновременно.
Например, если взглянуть на RTC Pi Plus , одну из стекируемых плат из вашего примера ссылки:
Обратите внимание на пять сторон в пяти соединениях в коробке. Они соответствуют контактам на другой стороне. Они помечены:
Другими словами, большинство выводов вообще не используются этой доской. Они просто там, чтобы учесть укладку. Все, что он использует, все (или в основном все еще не знают о SQW) могут использоваться совместно с другими устройствами.
Реальным пределом для такой укладки будет количество энергии, которое может быть подано против потребляемого, а не количество задействованных контактов. Возможно, это станет ограничением, если вы включите дополнительные источники питания, но я думаю, что раньше вам нужно было бы вынести стек наружу и начать использовать лестницу для работы с ним. ;)
источник
Вы можете иметь только одну доску HAT, поэтому такой проблемы нет. Есть несколько плат, к которым можно подключить более одной платы, но это не платы HAT.
источник
Пи не может знать. Вы должны убедиться.
Дело в том, что если вы подключаете несколько плат расширения, вам нужно позаботиться о том, чтобы сигнальные линии либо не использовались более одного раза, либо реализовать схему шин, которая может работать с несколькими устройствами, использующими несколько линий (как уже предлагалось @goldilocks). Чтобы почувствовать, как это можно сделать, я бы порекомендовал почитать на старой шине ISA . Нечто, что может быть реализовано с использованием GPIO в качестве строк данных и адресов (и если это возможно).
Хотя о HAT не может быть и речи, схема идентификации, которую они используют, стоит посмотреть. Обратите внимание на то, что нет стековых HAT * (в блоге Raspberry Pi : стекируемые HAT, представленные в обсуждении спецификации, - но в итоге они были исключены из-за значительного увеличения сложности автоконфигурации и возможной ошибки пользователя. ). Таким образом, в любой момент времени будет подключен только один HAT, будет считана его EEPROM и предоставлена информация в дереве устройств.
* Можно создавать составные шляпы, если они относятся к одному и тому же типу и, таким образом, не требуют многократной и разной идентификации, например, 16-канальный ШИМ / Серво HAT Adafruit для Raspberry Pi .
источник