Question:
Seul le maître peut-il initier la communication dans SPI alors que dans I2C l'esclave peut également initier la communication?
Prawn Hongs
2019-05-13 09:08:48 UTC
view on stackexchange narkive permalink

Est-il possible pour un esclave d'initier une communication dans SPI?

Je pensais qu'en raison de la sélection de la puce, c'est-à-dire que la fonction NSS que seul le maître pouvait communiquer la communication.Cependant, dans I2C, l'esclave peut également initier la communication en modifiant le drapeau RW dans la communication i2c.Est-ce correct?

Juste pour ajouter aux réponses existantes, une approche courante consiste à utiliser une broche GPIO séparée comme interruption qui signale au maître que l'esclave a des données lues à lire.
@Prawn_Hongs pouvez-vous clarifier ce que vous entendez par «initier»?Je pense que vous pourriez être confondu avec les données de lecture / écriture maître / esclave.
Cinq réponses:
TemeV
2019-05-13 09:39:58 UTC
view on stackexchange narkive permalink

Avec les deux, seul le maître peut initier la communication.I²C peut cependant avoir plusieurs maîtres et les nœuds peuvent changer les rôles, donc c'est un peu plus flexible.Mais dire que l'esclave pourrait initier la communication n'est toujours pas correct.

Une manière courante pour un esclave d'indiquer qu'il veut communiquer avec le maître est d'utiliser un signal d'interruption.Sur de nombreux capteurs et ADC, ils sont appelés «prêts pour les données» ou quelque chose de similaire.Une fois qu'un esclave a émis le signal, le maître sait que l'esclave a de nouvelles données disponibles.

user
2019-05-13 15:44:54 UTC
view on stackexchange narkive permalink

SPI et I2C autorisent uniquement le maître à établir la communication initiale.Cependant, il est possible pour les périphériques esclaves d'indiquer que quelque chose s'est produit qui mérite de communiquer avec eux via une broche d'interruption.

Les broches d'interruption sont assez courantes sur les circuits intégrés avec des bus série.L'état de la broche change pour indiquer qu'un événement s'est produit, et le maître peut alors regarder la broche pour savoir quand il doit communiquer avec l'esclave pour savoir ce qui s'est passé.

Même dans ce cas, c'est au maître de démarrer la communication et il peut simplement ignorer l'esclave s'il le souhaite.

Justme
2019-05-13 09:37:17 UTC
view on stackexchange narkive permalink

Non, dans I2C seul le maître peut commencer à communiquer sur le bus, et tous les esclaves doivent suivre le maître.Un esclave ne peut pas initier de communication et spécifiquement l'esclave ne peut en aucun cas changer le drapeau RW.

CL.
2019-05-13 11:10:58 UTC
view on stackexchange narkive permalink

Avec SPI, la ligne MOSI transmet toujours les données du maître à l'esclave, et la ligne MISO transmet toujours les données de l'esclave au maître.

Avec I²C, il n'y a qu'une seule ligne de données pour les deux sens.Le bit R / W contrôle quel appareil transmet les octets de données et avec l'appareil transmet les bits ACK, mais le bit R / W lui-même est toujours contrôlé par le maître.(Le bit R / W peut être modifié avec une condition de démarrage répétée, mais uniquement par le maître.)

Et l'horloge est toujours contrôlée par le maître.(Un esclave I²C peut retarder les cycles d'horloge avec étirement d'horloge, mais il ne peut pas générer de nouveaux cycles d'horloge.)

supercat
2019-05-14 00:19:08 UTC
view on stackexchange narkive permalink

Dans SPI, chaque appareil a un rôle fixe de maître ou d'esclave. Dans I2C, les rôles des appareils peuvent changer de manière dynamique. Tout appareil qui initie une transaction sur le bus (par opposition à la sollicitation d'une transaction via un moyen extérieur au bus) doit se comporter en maître pour cette transaction, mais cet appareil pourrait se comporter en esclave pour les transactions initiées par d'autres appareils. À l'exception de quelques détails, I2C repose sur le fait qu'il y ait exactement un maître et un esclave pour une transaction particulière:

  1. Lors de l'utilisation de formats d'adressage plus longs, plusieurs appareils peuvent agir provisoirement en tant qu'esclaves en attendant leur adresse complète. Dans cet état, la seule chose que les esclaves peuvent faire est d'indiquer au maître que l'esclave qui intéresse le maître pourrait être prêt à répondre.

  2. Plusieurs appareils peuvent agir simultanément en tant que maîtres si tous veulent envoyer les mêmes données en même temps. Cela peut potentiellement causer des problèmes si par ex. deux appareils demandent chacun qu'un appareil incrémente un compteur, puis demandent simultanément que l'appareil le décrémente. Si les deux maîtres envoient des requêtes identiques bit à bit, aucun des deux ne perdra l'arbitrage, et donc chacun penserait que sa requête a été honorée.

La plupart des systèmes I2C ne contiennent qu'un seul périphérique qui peut jamais agir en tant que maître, mais le protocole autoriserait plusieurs périphériques. À moins qu'un bus ne soit censé avoir plusieurs maîtres, cependant, il est plus facile d'implémenter un appareil qui s'attend à être le seul maître que celui qui peut coexister avec d'autres maîtres sur le bus.

Comment fonctionne l'arbitrage de bus avec I2C?Les périphériques I2C sur les MCU ne transmettent-ils pas aveuglément sans écouter les collisions?
@Navin: Tout périphérique qui voit un front descendant sur SCL doit maintenir SCL bas jusqu'à ce qu'il ait déterminé ce qu'il doit faire, le cas échéant, avec SDA, et chaque fois que le maître libère SCL, il doit attendre qu'il atteigne réellement le niveau élevé (tout le monde l'a publié) avant de continuer.Si deux maîtres créent simultanément des conditions de démarrage, chacun peut penser qu'il a le bus (celui qui est le plus rapide attendrait que l'autre libère SCL après chaque bit) jusqu'à ce que l'un essaie de transmettre un 1 et l'autre un 0, à quel point le 0gagnerait et l'appareil qui essayait de transmettre un 1 tomberait du bus.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...