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 SPI vs I2C vs 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.
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.
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** |
15 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 :
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.
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.
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).
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).