I2C, SPI ou UART : comment router ces bus courants

Zachariah Peterson
|  Créé: September 27, 2020  |  Mise à jour: October 1, 2021
I2C vs SPI vs UART pour un écran LCD

Si vous créez une carte de développement pour votre projet ou utilisez un microcontrôleur courant, vous trouverez de nombreux protocoles pour communiquer d'autres composants actifs. Des standards comme USB et Ethernet sont intégrés à la majorité des contrôleurs afin de fonctionner avec des périphériques informatiques. Toutefois, des protocoles comme I2C, SPI ou encore UART sont utilisés en interface avec des microcontrôleurs ou des circuits intégrés programmables en aval. Les différences entre les bus I2C, SPI et UART sont simples, et tout concepteur travaillant avec un microcontrôleur doit savoir comment configurer le routage pour ces protocoles.

Ces protocoles étant des normes de signalisation plus lentes, vous n'aurez presque jamais à vous soucier d'éléments comme le contrôle d'impédance ou le comportement des lignes de transmission si vous les utilisez. Toutefois, certains points de conception importants doivent être pris en compte pour garantir que les signaux de vos lignes de bus sont lus correctement au niveau de vos récepteurs. L'adressage doit aussi être surveillé, mais le produit concerné et votre code peuvent permettre d'y répondre. Pour le moment, voyons comment ces trois protocoles communs peuvent être utilisés dans votre routage de circuit et intéressons-nous à quelques points importants pour le maintien de l'intégrité du signal.

Différences entre I2C, SPI et UART

Tous les microcontrôleurs de 8 bits à 32 bits utilisent au moins un de ces protocoles en plus des GPIO pour la programmation et l'envoi de signaux à des périphériques simples. Ces trois protocoles série sont des protocoles de bus : I2C et UART utilisent des schémas d'adressage alors que SPI est sans adresse. Malgré cela, il s'agit d'un protocole de bus qui peut toujours être utilisé pour sélectionner des dispositifs en aval en vue de la réception de données.

Protocole I2C

L'I2C (prononcé en anglais I-squared C, ou parfois IIC pour circuit inter-intégré) utilise deux lignes (modes standard, rapide et fast-plus) pour contrôler d'autres appareils. L'une des lignes est une ligne d'horloge (SCL) tandis que l'autre est une ligne de données (SDA). Il existe en trois modes résumés dans le tableau ci-dessous. Notez que les valeurs temporelles de montée/descente supposent que les résistances en série classiques sont installées aux E/S.

Mode

Débit / Vitesse de l'horloge

Temps max. de montée/descente

Temps min. de montée/descente

Direction

Standard

100 kHz

1000 ns

-

Bidirectionnel

Rapide

400 kHz

300 ns

20 ns*

Bidirectionnel

Fast-plus

1 MHz

300 ns

20 ns*

Bidirectionnel

Haute vitesse

3,4 MHz (bus 100 pF)

1,7 MHz (bus 400 pF)

120 ns**
240 ns**

15 ns**
30 ns**

Bidirectionnel

Ultra-fast

5 MHz

50 ns

25 ns

Unidirectionnel


*Suppose que VDD/VCC = 5,5 V. Diminue de manière linéaire si VDD/VCC est inférieur
**Diviser ces valeurs par 2 pour la ligne d'horloge.

Notez que le mode ultra-fast est le seul où la communication est uniquement utilisée pour les opérations d'écriture en aval. Ce mode est également important car il nous aide à identifier à quel moment l'impédance du bus doit être adaptée, ce qui n'arrive en pratique quasiment jamais. Si on adopte une limite très prudente de 10 % sur la longueur de ligne critique, nous constatons que la longueur cruciale de ces lignes est de 0,32 m, soit une valeur nettement plus longue que la taille de la plupart des cartes qui utiliseront I2C. En prenant la fréquence de coude pour la durée minimale de montée/descente avec une limite de 10 % sur la longueur critique, on obtient une valeur beaucoup plus longue de 0,92 m. Nous devrions retenir la valeur plus prudente de 0,32 m pour le mode ultra-fast : toute ligne I2C plus courte que cette valeur ne se comportera pas comme une ligne de transmission, et nous devons seulement nous préoccuper du schéma de terminaison.

Les éléments importants de la terminaison consistent à sélectionner les bonnes résistances en série et de tirage. Les résistances de tirage et la capacitance du bus de ligne VDD/VCC forment un circuit RC de décharge et de charge, ce qui transmet un signal au récepteur lorsque le pilote commute. Les valeurs des résistances de tirage (Rp) pour les lignes de signaux et d'horloge doivent respecter l'inégalité suivante :

Valeurs des résistances de tirage pour le protocole I2C
Valeurs des résistances de tirage pour le protocole I2C

 

Topologie d’un circuit I2C
Topologie d’un circuit I2C.

La capacitance d'un bus est déterminée à l'aide des formules standard pour l'impédance du bus VCC, qui est calculée grâce aux équations que vous utiliseriez pour une ligne de transmission (microruban ou ruban). Vous pouvez ensuite résoudre la capacitance du bus à l'aide de l'impédance et du temps de propagation de la ligne. Les résistances en série sont facultatives dans le cadre de la norme I2C, mais elles peuvent être incluses afin de protéger les appareils contre les pics de tension et de ralentir les temps de montée/descente. Consultez la page 59 de la norme I2C pour déterminer la bonne valeur de résistance en série à associer à la valeur de votre résistance de tirage.

Protocole SPI

Le protocole SPI est similaire à I2C.Quatre lignes au total sont utilisées dans ce bus et les composants peuvent être disposés selon deux modes. Si un seul contrôleur est utilisé pour déclencher un périphérique en aval, la topologie est simplement de type point à point. Le déclenchement de plusieurs périphériques dépend du nombre de sorties chip-select fournies par le pilote (mode standard). Le second mode utilise le daisy chaining, dans lequel une seule sortie de sélection de périphériques déclenche successivement chaque périphérique de la daisy chain.

Contrairement au protocole I2C, les différents paramètres de signalisation de SPI sont hautement configurables. À moins que vous n'utilisiez une interface extrêmement rapide, vous pouvez estimer le niveau du signal sur l'ensemble de l'interconnexion sous forme de courant continu : vous serez en effet sous la longueur critique pour le comportement de la ligne de transmission. Vous pourrez alors utiliser une résistance en série pour terminer la sortie à basse impédance du pilote et assurer un transfert de puissance maximal. La méthode de décharge RC avec la capacitance de piste indiquée ci-dessus peut contrôler le courant de sortie et les temps de montée/descente à partir de votre interface.

Protocole UART

L'émetteur-récepteur asynchrone universel (UART) est similaire au protocole I2C. Ces interfaces ont un débit de données maximal d'environ 5 Mbps. Les périphériques UART sont également faciles à utiliser car aucune horloge n'est envoyée entre eux, tout est asynchrone. Notez que l'horloge interne (système) de chaque périphérique UART doit fonctionner à un multiple donné de la fréquence en bauds (en d'autres termes, chaque bit est échantillonné N fois). Seuls deux fils sont utilisés pour la communication entre un contrôleur et un périphérique en aval.

Notez que le format des données, les niveaux des signaux et le débit en bauds d'un périphérique UART sont configurables avec un circuit de pilotage externe. Malheureusement, cela signifie également qu'il existe peu de règles strictes et rapides pour le routage des périphériques UART. Suivez les directives standard de conception à haute vitesse pour déterminer le moment auquel une terminaison est nécessaire en examinant la transition vers le comportement de la ligne de transmission (voir l'article dont j'indique le lien ci-dessous). La terminaison en série est souvent adoptée pour réduire les dépassements. Notez que le protocole UART peut être inactif à des niveaux élevés ou faibles, et que des résistances de tirage peuvent être nécessaires pour définir le niveau d'inactivité requis. Veillez à vérifier les spécifications de vos composants avant d'ajouter des résistances de tirage.

Pour en savoir plus sur la différence de synchronisation entre les bus synchrones et asynchrones, reportez-vous à cette présentation AltiumLive de 2018 par Max Seeley (en anglais).

RÉSUMÉ : SPI vs I2C vs UART

Les règles SPI et UART peuvent sembler un peu vagues, ce qui s'explique par le fait que vous disposez de plus de liberté de conception de votre interface au niveau du firmware. Dès lors que l'une de ces normes est exécutée à des vitesses de transmission rapides, elle est susceptible d'entraîner de la diaphonie, tout comme les normes de signalisation à haute vitesse. Toutefois, comme vous disposez d'une grande souplesse dans vos spécifications, vous pouvez généralement concevoir des pistes à faible inductance et réduire la diaphonie inductive. Vous bénéficiez d'une certaine flexibilité pour le routage de ces signaux et pour les rendre très faciles à utiliser au sein de votre prochain système numérique.

Lors de l'élaboration de systèmes numériques avec des normes de signalisation communes, vous pouvez tenir compte des différences entre I2C, SPI et UART grâce aux règles de conception d'Altium Designer®. Le gestionnaire d'empilements de couches et le solveur de champ 3D intégré de Simberian utilisent la géométrie de votre carte et la géométrie des traces pour extraire les éléments parasites et la capacitance de votre bus dans vos lignes de signaux.

En permettant aux concepteurs de travailler de chez eux et d'atteindre des niveaux d'efficacité sans précédent, la solution Altium Designer disponible sur Altium 365 offre à l'industrie électronique un degré d'intégration inégalé qui était jusqu'à présent réservé au secteur informatique.

Tout cela n'est qu'un aperçu des possibilités offertes par Altium Designer sur Altium 365. Vous pouvez consulter la page produit pour obtenir une description plus détaillée des fonctionnalités ou visionner l'un des webinaires à la demande (en anglais).

A propos de l'auteur

A propos de l'auteur

Zachariah Peterson possède une vaste expérience technique dans le milieu universitaire et industriel. Avant de travailler dans l'industrie des PCB, il a enseigné à la Portland State University. Il a dirigé son M.S. recherche sur les capteurs de gaz chimisorptifs et son doctorat en physique appliquée, recherche sur la théorie et la stabilité du laser aléatoire. Son expérience en recherche scientifique couvre des sujets tels que les lasers à nanoparticules, les dispositifs électroniques et optoélectroniques à semi-conducteurs, les systèmes environnementaux et l'analyse financière. Ses travaux ont été publiés dans diverses revues spécialisées et actes de conférences et il a écrit des centaines de blogs techniques sur la conception de PCB pour de nombreuses entreprises. Zachariah travaille avec d'autres sociétés de PCB fournissant des services de conception et de recherche. Il est membre de l'IEEE Photonics Society et de l'American Physical Society

Articles les Plus Récents

Retournez à la Page d'Accueil