Question:
Pourquoi les lignes I2C utilisent-elles un pilote de drain ouvert au lieu de pilotes à trois états?
athedcha
2017-02-15 23:05:32 UTC
view on stackexchange narkive permalink

D'après ce que je comprends, les lignes I2C utilisent des résistances de pull-up pour monter passivement le bus au niveau logique haut parce que les pilotes utilisés sur le bus sont des pilotes actifs, à savoir collecteur ouvert / drain ouvert.Étant donné que les pilotes à collecteur ouvert / drain ouvert peuvent conduire la ligne à un niveau bas mais pas élevé, le problème de conflit de bus est atténué.

Ma question est cependant, pourquoi le protocole I2C utilise-t-il ces pilotes par opposition aux pilotes à trois états?Si vous avez plusieurs pilotes de sortie à trois états connectés au même bus, tant que les signaux d'activation pour les trois états sont mutuellement exclusifs, ne devrions-nous pas être en mesure de prendre en charge les conflits de bus et d'obtenir des temps de montée plus rapides en comparaisonaux topologies à collecteur ouvert / à drain ouvert?

Clock-Stretching pour une raison.Et comment vous assurez-vous que les activations à trois états sont mutuellement exclusives entre plusieurs appareils différents?
Notez que le problème des temps de montée peut être quelque peu résolu en utilisant des sources de courant au lieu de simples résistances pull-up.
Six réponses:
The Photon
2017-02-15 23:35:58 UTC
view on stackexchange narkive permalink

... tant que les signaux d'activation pour les trois états s'excluent mutuellement ...

L'astuce consiste à faire cela sans ajouter un autre fil, ou plusieurs fils pour dire à chaque périphérique quand il est autorisé à piloter le bus.

Le principal avantage d'I2C est qu'il n'utilise que deux fils et deux broches sur chaque puce connectée au bus.

Si vous êtes prêt à échanger des broches contre de la vitesse, envisagez d'utiliser SPI, qui peut généralement atteindre une vitesse plus élevée que I2C, mais nécessite 3 ou 4 broches par appareil.

+ aussi la négociation multi-maître est assez transparente sur les bus filaires OU (à @athedcha: qui a tiré le collecteur ouvert en fait partie).
@Asmyldof, vrai, mais selon vous, quel% des applications I2C utilisent réellement le multi-maître?
Trop peu.Le multi-maître est cool.Mais c'est une partie décente de la spécification, donc comme raison de "pourquoi pas différent", c'est tout à fait pertinent.
@Asmyldof: Multi-master a quelques fonctionnalités intéressantes, mais n'a pas de moyen propre de gérer certains scénarios.Par exemple, si deux maîtres émettent simultanément une demande de "compteur d'incrémentation" à un esclave, chacun peut penser que sa demande a réussi mais le compteur ne sera avancé que de un au lieu de deux.
@supercat dans lequel ce "compteur d'incrémentation" est une forme de commande que quelqu'un a implémentée dessus.Les commandes et les transactions peuvent assez facilement être conçues de telle sorte que ces occurrences n'endommagent pas la couche de protocole de commande de l'un ou l'autre maître.
@Asmyldof: De nombreux périphériques ont des commandes qui ne sont pas idempotentes;"compteur d'incrémentation" est simplement le plus simple à décrire (deux mots).À moins que la structure de commande d'un périphérique ne soit conçue de bas en haut pour une utilisation multi-maître, il y a des problèmes.En outre, même un seul maître-deux esclaves sans étirement d'horloge peut entrer dans un état irrécupérable si un esclave ne voit pas d'impulsion d'horloge;Je pense que le multi-maître ajouterait encore plus d'états problématiques.
Adam Haun
2017-02-16 00:01:21 UTC
view on stackexchange narkive permalink

Il existe deux fonctionnalités spécifiques qui nécessitent des conduites à drain ouvert.Le premier est l'étirement d'horloge, où un esclave peut maintenir l'horloge (SCL) à un niveau bas pour retarder la transaction pendant qu'il traite les données.Le second est l'arbitrage multi-maître, où deux maîtres ou plus essaient de transmettre en même temps.L'arbitrage est effectué en faisant arrêter la transmission par un maître lorsqu'il voit la ligne de données maintenue au niveau bas par un autre maître.

L'arbitrage est le plus gros, je pense.Vous pourriez probablement remplacer l'horloge par quelque chose de basé sur un protocole, mais si vous voulez plusieurs maîtres sur le même bus, vous devez éviter les conflits.À moins que vous ne puissiez ajouter un autre fil, vous êtes coincé avec un drain ouvert.(Voir aussi: la couche physique CAN, qui utilise un schéma d'arbitrage similaire.)

pipe
2017-02-15 23:36:11 UTC
view on stackexchange narkive permalink

tant que les signaux d'activation pour les trois états s'excluent mutuellement

Il n'y a aucun moyen de s'en assurer dans I2C.Vous auriez besoin d'un signal d'activation par appareil - vous avez maintenant inventé un cousin de SPI.

Non inventé, mis en œuvre.Il existe déjà et est largement utilisé différemment par tous ceux qui l'implémentent.
supercat
2017-02-16 03:01:57 UTC
view on stackexchange narkive permalink

Les protocoles impliquant plusieurs périphériques communiquant sur un bus commun à l'aide de pilotes à trois états nécessitent généralement l'ajout d'un câble de contrôle externe pour éviter les conflits de bus ou des pilotes de limitation de courant pour éviter tout dommage en cas de conflit de bus. Alors que le niveau de courant de défaut que l'on peut tolérer en cas de conflit de bus peut être plus élevé que le niveau de courant que l'on pourrait tolérer à chaque fois qu'une ligne est basse, les pilotes bidirectionnels à courant limité sont plus compliqués que les pilotes à collecteur ouvert combinés avec des pull-ups passifs. .

Si l'on est prêt à accepter la dépense supplémentaire des pilotes actuellement limités, cela permettra de concevoir des protocoles plus rapides et plus robustes que I2C. D'autre part, l'ajout de pilotes actifs à un maître I2C peut permettre d'obtenir des avantages similaires même avec I2C. Pour obtenir de tels avantages en toute sécurité, il peut être nécessaire d'ajouter des résistances série sur la ligne SDA entre le maître et les esclaves, mais si l'on utilise une résistance séparée entre le maître et chaque esclave, la capacité du maître à conduire haut la ligne SDA comme le montre tout esclave qui ne le réduit pas activement peut permettre au maître de se remettre de scénarios qui pourraient autrement provoquer le verrouillage permanent du bus (aucun appareil ne peut maintenir SCL bas en continu pendant plus de 9 cycles de SCL, donc un maître serait capable de générer une condition d'arrêt pour n'importe quel appareil dans les 9 cycles, mais si deux appareils pouvaient chacun maintenir la ligne SCL vue l'un par l'autre, ils pourraient entrer dans un état où ils tiraient à tour de rôle vers le bas SCL de manière à ce qu'il ne jamais être libéré, laissant le maître incapable de générer une condition d'arrêt.

Milliways
2017-02-16 12:30:43 UTC
view on stackexchange narkive permalink

La VRAIE réponse à cette question, comme à la plupart des questions similaires, est que c'est ainsi qu'elle a été conçue.L'extension d'horloge, l'arbitrage de bus sont certainement valables, mais la solution est adéquate pour son objectif de conception, qui est une communication à faible vitesse à courte distance (souvent embarquée).

Il existe de nombreux protocoles plus récents et plus rapides, qui compensent une certaine complexité pour la vitesse et la distance.Si vous en avez besoin, utilisez l'un de ces protocoles.

Alors que I²C est un protocole relativement moderne (~ 1982), avant Tri-State ou TTL (~ 1963), les premiers circuits intégrés utilisaient RTL et l'open-collector était la conception de bus standard pour les premiers ordinateurs.(Et je pourrais ajouter un vrai défi aux concepteurs.)

dannyf
2017-02-15 23:20:02 UTC
view on stackexchange narkive permalink

Open drain est une forme de pilote d'état éprouvé.C'est nécessaire ici pour éviter les conflits de logique - l'esclave se tenant sur le bus par exemple.

Open-drain a deux états.


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 3.0 sous laquelle il est distribué.
Loading...