SPI et I2C sont probablement les protocoles numériques les plus couramment utilisés pour connecter des circuits intégrés dans un large éventail de produits. SPI et I2C sont deux des protocoles numériques série les plus faciles à utiliser et les plus difficiles à briser et qui sont également faciles à acheminer du point de vue de l'intégrité du signal.
Contrairement aux protocoles série différentiels haute vitesse à impédance contrôlée, ces deux protocoles n'ont pas de spécification d'impédance et sont souvent considérés comme électriquement courts. Cela signifie que, au niveau du circuit imprimé, les exigences de conception sont relativement simples et que la norme vous laisse encore un peu de marge de manœuvre pour affiner les performances selon vos préférences.
Les protocoles SPI et I2C sont souvent utilisés dans un schéma de montage comme protocoles de lecture et d'écriture dans une mémoire Flash externe. Les puces Flash sont un composant très courant dans les systèmes embarqués et elles offrent des capacités élevées de mémoire non volatile jusqu'à des valeurs se chiffrant en Gb.
Lorsque vous choisissez une puce mémoire, il est important de déterminer la vitesse de bus dont vous avez besoin afin que les opérations de lecture et d’écriture dans votre puce mémoire soient faites en fonction des exigences et fonctionnalités de l'application. Se pose également la question question du type de mémoire Flash auquel vous aurez besoin d'accéder (NOR ou NAND).
Les protocoles SPI (Serial Peripheral Interface) et I2C (Inter-Integrated Circuit) sont tous deux de simples protocoles numériques série qui s'exécutent à des vitesses faibles ou modérées. Ces deux interfaces présentent quelques caractéristiques communes :
Si ces interfaces sont clairement très similaires, elles comportent toutefois des différences importantes qui sont résumées dans le tableau ci-dessous.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Direction | - Semi-duplex | - Duplex intégral |
Conduite du signal | - Drain ouvert | - Push-pull (avec tampon CMOS) |
La norme SPI offre des débits de données plus élevés que l'I2C et peut fonctionner avec des débits de pointe beaucoup plus rapides. En raison de l'utilisation de résistances de tirage avec I2C, de la capacité généralement élevée du bus et du fait que la méthode de conduite est à drain ouvert, les bus I2C peuvent avoir des temps de montée atteignant des centaines de nanosecondes.
Les bus SPI peuvent avoir des temps de montée aussi bas que 1 ns pour les composants avancés qui conduisent de faibles capacités de charge, ce qui signifie qu'ils peuvent présenter des oscillations transitoires pendant la commutation. Les lignes SPI sont également beaucoup plus susceptibles de produire de la diaphonie car leur vitesse de commutation est très rapide. Pour en savoir plus sur ces deux protocoles et sur l'intégrité des signaux dans les bus SPI, lisez les ressources suivantes.
Dans cette section, je n'entrerai pas dans les détails des mémoires Flash NAND et NOR, pour plutôt m'intéresser à la façon dont on accède à chacune d'entre elles avec un protocole série. Ces deux types de puces Flash sont accessibles via un bus SPI ou I2C si vous pouvez vous procurer le bon composant de mémoire :
Si vous consultez Octopart et utilisez les fonctions de filtrage, vous pourrez trouver des mémoires de grande capacité qui utilisent l'une ou l'autre de ces interfaces.
Si vous devez effectuer une conversion entre une interface I2C et une interface SPI, vous pouvez utiliser un pont d'interface. Ces composants convertissent le format de données entre ces interfaces, de sorte qu’un composant qui n’a peut-être qu’un bus SPI peut alors accéder aux composants périphériques qui n’ont qu’un bus I2C. Cela inclut les puces mémoire, bien que si le contrôleur utilise uniquement I2C et que la mémoire utilise SPI, la vitesse risque d'être limitée et le composant récepteur risque de ne pas fonctionner en raison de longs temps de montée.
Pour régler ce problème qui se pose avec I2C, il est préférable d'utiliser un contrôleur avec SPI, puis d'utiliser le pont d'interface pour accéder à un périphérique qui n'a que I2C. Notez que le côté SPI devra avoir une cadence plus basse pour s'assurer qu'il peut être utilisé à des vitesses I2C. Cela se ferait selon la topologie suivante :
Une autre exigence courante dans les protocoles série à drain ouvert et push-pull (où le niveau du signal est fixé par la tension) est le décalage de niveau. Le moyen le plus simple de construire un circuit imprimé est d'utiliser une seule source d'alimentation régulée jusqu'à atteindre la tension souhaitée, par exemple avec un LDO.
En réalité, il se peut que certains périphériques fonctionnent à une tension plus élevée (3,3 V, par exemple), tandis que le contrôleur principal fonctionne à une tension plus faible avec plusieurs rails (2,5 V, 1,8 V, etc.). Si votre MCU fonctionne à 3V3 mais que votre mémoire fonctionne à 1V8 (c'est une situation courante), vous devrez faire passer vos signaux SPI ou I2C par un décaleur de niveau. Notez que certains ponts d'interface comprennent un décaleur de niveau qui se connecte à deux rails d'alimentation ; la topologie est illustrée ci-dessous.
Une fois que vous avez trouvé les composants pour votre conception, comment choisir entre une interface SPI et une interface I2C ? Voici quelques points qui vous aideront à vous décider :
Rapidité : lorsque vous transférez des données en masse ou que vous disposez d'une fenêtre restreinte pour vérifier les entrées de l'utilisateur par rapport aux données stockées dans une puce mémoire, chaque microseconde compte. Si vous avez besoin de capacités de lecture et d'écriture répétées en temps réel avec le reste de votre système, utilisez SPI. Si le contrôleur n'a besoin que de lire ou d'écrire occasionnellement depuis la mémoire, utilisez I2C.
Contrôleur : si vous utilisez un microcontrôleur ou un périphérique très petit et que vous avez très peu de broches libres, optez pour I2C. En réalité, certains microcontrôleurs ne vous laissent pas le choix. Par exemple, les microcontrôleurs ATTiny classiques n’ont que I2C, donc s’ils ont besoin de données provenant d’une mémoire externe, vous devrez trouver une puce mémoire prenant en charge I2C.
Alimentation : si vous concevez un appareil fonctionnant sur batterie qui a besoin d'accéder de manière répétée aux données, vous pouvez opter pour SPI, car cette interface consommera moins d'énergie en moyenne qu'une interface I2C.
Le routage d'interfaces SPI et I2C est beaucoup plus facile à effectuer lorsque vous utilisez l'ensemble des fonctionnalités de conception et de routage de circuits imprimés d'Altium Designer®. Lorsque vous avez terminé votre conception et que vous souhaitez transmettre des fichiers à votre fabricant, la plateforme Altium 365™ vous permet de collaborer et de partager vos projets en toute simplicité.
Tout cela n'est qu'un aperçu des possibilités offertes par Altium Designer sur Altium 365. Commencez sans plus attendre votre essai gratuit d'Altium Designer + Altium 365.