Comment le Raspberry Pi fait-il la différence entre plusieurs cartes d'extension?

8

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?

cspirou
la source
C'est aussi quelque chose que je vois avec les boucliers Arduino empilables et d'autres plates-formes informatiques diverses.
cspirou
La réponse, je le crains, est qu'il n'y a pas de moyen standard pour une carte de détecter une autre et de se reconfigurer. Vous devrez examiner les détails de chaque planche avant l'achat et faire votre propre détermination de leur capacité à travailler ensemble.
joan

Réponses:

5

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:

entrez la description de l'image ici

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:

  • 5 V = puissance, partageable avec d'autres appareils.
  • GND = Ground, également commun.
  • SDA et SCL = broches de bus I2C; sur le pi qui est les broches 3 et 5. Vous pouvez avoir un certain nombre d'appareils sur le bus I2C utilisant tous ces mêmes deux broches pour la communication.
  • SQW = Je crois que cela signifie "onde carrée" et peut-être que l'un de nos membres les mieux informés en électronique laissera un bon commentaire expliquant son objectif.

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. ;)

Boucles d'or
la source
3

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.

Saumon
la source
1
Les HAT ne sont peut-être pas la bonne chose à dire, mais je parle de cartes qui se connectent aux broches GPIO. Le site suivant montre de hautes piles de ces planches. abelectronics.co.uk Je peux modifier la question pour supprimer 'HATs'
cspirou
1

Alors, comment le Raspberry Pi sait-il quelle carte reçoit quelles commandes particulières?

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).

Existe-t-il une sorte de commande d'initialisation que seule une carte particulière reconnaît puis commence à accepter le reste des commandes?

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 .

Ghanima
la source