SPI ou I2C : comment choisir le meilleur protocole pour vos puces mémoire ?

Créé: February 9, 2018
Mise à jour: August 29, 2023
SPI ou I2C

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).

SPI et I2C, la comparaison

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 :

  • Elles utilisent plus d'un fil pour envoyer/recevoir des données
  • L’horloge est synchrone à la source, ce qui signifie qu'une seule piste porte la ligne d’horloge
  • Les autres puces du bus sont adressables ou désactivables
  • La plupart des microcontrôleurs ont une ou deux de ces interfaces intégrées
  • Le niveau du signal peut être fixé par la tension fournie à la puce
  • Aucune de ces interfaces n'a d'exigences en matière d'impédance

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.

 

I2C

SPI

Noms des signaux

- Données série (SDA)

- Horloge série (SCL)

- Entrée maître, sortie esclave (MISO)

- Sortie maître, entrée esclave (MOSI)

- Horloge série (SCK ou SCLK)

- Sélection de puce (CS, en option)

Topologie

- Topologie de bus de diffusion

- MISO/MOSI/SCK partagés

- Étoile pour les broches CS

Débit de données

- Mode standard : jusqu'à 100 kbit/s

- Mode rapide : jusqu'à 400 kbit/s

- Mode rapide plus : jusqu'à 1 Mbit/s

- Mode haute vitesse : jusqu'à 3,4 Mbit/s

- Fixé par l'heure de la fenêtre d'horloge, atteint jusqu'à 60 Mbit/s

Temps de montée/descente

- Dépend de la capacité du bus et des valeurs de la résistance de tirage (utiliser la constante de temps RC)

- Spécifié pour une impédance de charge donnée

Adressage

- Broches d'adresse fixées sur chaque composant

- Broches CS utilisées dans le contrôleur principal pour le basculement des puces (elles peuvent être basculées avec des GPIO ou des broches CS dédiées)

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.

SPI et I2C pour les puces mémoire, points importants

Accès aux mémoires Flash NAND et NOR

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 :

  • Flash NOR - L'accès se fait le plus souvent via SPI, même sur des puces Flash plus petites et plus lentes. Il existe des puces plus lentes accessibles via I2C.
  • Flash NAND - L'accès se fait le plus souvent au moyen d'un bus parallèle, mais on trouve des puces avec bus I2C et SPI en nombre approximativement égal.

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.

Connexion de l'interface I2C à l'interface SPI pour les mémoires

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 :

Pont d'interface SPI ou I2C
Configuration à privilégier lorsqu'un pont d'interface SPI vers I2C est nécessaire.

Décalage de niveau

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.

Décalage de niveau SPI ou I2C
Topologie utilisée pour le décalage de niveau.

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.

 Zoom sur une voiture entourée de traînées lumineuses
Si la vitesse est importante, choisissez SPI.

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.

Ressources associées

Documentation technique liée

Retournez à la Page d'Accueil
Thank you, you are now subscribed to updates.