Je commence tout juste à utiliser le GPIO sur le Raspberry Pi pour divers projets. Il existe de nombreuses cartes de dérivation pour le RPi et beaucoup d'entre elles ont des broches afin d'empiler les cartes les unes sur les autres. Il semble que les broches GPIO passent directement et toutes les cartes ont les mêmes broches en commun. Pour moi, cela signifie que toutes les cartes d'une pile reçoivent exactement les mêmes signaux du RPi et doivent se comporter en conséquence. Il semble que cela puisse produire beaucoup d'erreurs avec des commandes destinées à une carte affectant le fonctionnement d'une autre carte, mais apparemment, cela ne se produit pas.
Alors, comment le Raspberry Pi sait-il quelle carte reçoit quelles commandes particulières? Existe-t-il une sorte de commande d'initialisation que seule une carte particulière reconnaît puis commence à accepter le reste des commandes?
Réponses:
Les ordinateurs utilisent un système appelé busing pour connecter plusieurs périphériques à la CPU via le même jeu de fils. I2C et SPI sont des exemples de systèmes de bus utilisés avec les broches pi GPIO, qui activent plusieurs périphériques sur les mêmes broches physiques (gérées par le bus interne) mais en utilisant des adresses différentes . L'adressage est une abstraction créée par le protocole du système de bus. C'est un peu comme la façon dont vous pouvez avoir plusieurs applications en réseau utilisant la même connexion physique à Internet, toutes fonctionnant simultanément.
Par exemple, en regardant le RTC Pi Plus , l'une des cartes empilables de votre exemple de lien:
Remarquez sur le côté proche les cinq connexions dans une boîte. Ceux-ci correspondent aux broches de l'autre côté. Ils sont étiquetés:
En d'autres termes, la plupart des broches ne sont pas du tout utilisées par cette carte. Ils sont juste là pour permettre l'empilement. Ceux qu'il utilise sont tous (ou pour la plupart, ne connaissent toujours pas SQW) partageables simultanément avec d'autres appareils.
La véritable limite de l'empilage de cette façon sera la quantité d'énergie pouvant être fournie par rapport à ce qui est consommé, et non le nombre de broches impliquées. Peut-être que cela deviendrait une limitation si vous incluiez des alimentations supplémentaires, mais je pense qu'auparavant, vous devriez déplacer la pile à l'extérieur et commencer à utiliser une échelle pour y travailler. ;)
la source
Vous ne pouvez avoir qu'une seule carte HAT, ce problème n'existe donc pas. Il y a des cartes où vous pouvez en connecter plusieurs mais ce ne sont pas des cartes HAT.
la source
Le Pi ne peut pas savoir. Vous devez vous en assurer.
Le fait est que si vous connectez plusieurs cartes d'extension, vous devrez vous assurer que les lignes de signaux ne sont pas utilisées plus d'une fois ou implémenter un schéma de bus qui peut fonctionner avec plusieurs appareils partageant certaines lignes (comme @goldilocks l'a déjà suggéré). Pour avoir une idée de comment cela pourrait être fait, je recommanderais de lire sur l' ancien bus ISA . Quelque chose qui pourrait être implémenté en utilisant GPIO en tant que lignes de données et d'adresses (et si l'on en veut).
Bien que les THA soient hors de question, le schéma d'identification qu'ils utilisent mérite d'être examiné. Notez qu'il n'y a pas de HAT empilés * (selon Raspberry Pi Blog : les HAT empilables présentés dans la discussion sur les spécifications - mais finalement ils ont été supprimés en raison de la grande augmentation de la complexité de la configuration automatique et du potentiel d'erreur de l'utilisateur. ). Ainsi, à tout moment, un seul HAT sera connecté, sa lecture EEPROM sera lue et ses informations seront disponibles dans l'arborescence des périphériques.
* Il est possible de fabriquer des chapeaux empilables s'ils sont du même type et ne nécessitent donc pas d'identification multiple et différente, par exemple le Adafruit 16 canaux PWM / Servo HAT pour Raspberry Pi .
la source