Cet article traite de la norme SPI (Serial Peripheral Interface) et de ses défis en matière d’intégrité du signal, qui découlent tous de l’impédance de l’interface et des liaisons transportant des signaux numériques.
Avant de passer au sujet principal de cet article, je vais répondre à ma propre question :
En écrivant cela, je veux dire que la norme SPI ne mentionne aucune exigence d’impédance particulière. Si vous regardez d’autres recommandations de conception qui avancent quelque chose comme « la norme SPI a besoin d’une impédance contrôlée », vous verrez en fait que, très souvent, elles n’indiquent aucune valeur d’impédance spécifique. Au mieux, elles indiqueront une gamme allant de 30 Ohms à 150 Ohms. C’est une gamme de valeurs vaste (et peu utile).
J’ai également vu récemment une note d’application d’un grand fabricant de semi-conducteurs indiquant que les lignes SPI ont besoin d’une impédance contrôlée et d’une correspondance des longueurs, ignorant apparemment les temps de configuration et le duplex intégral de cette interface. Elles n’indiquent pas non plus de valeur d’impédance ou de valeur de tolérance de disparité de longueur. À mon humble avis, ce n’est pas une recommandation très utile.
La réalité est que les lignes SPI n’ont besoin d’un contrôle d’impédance que lorsque la longueur de l’interconnexion devient très longue. Et comme il n’y a pas d’exigence d’impédance spécifique dans le bus, vous avez une certaine liberté dans la conception et dans la terminaison des canaux.
Mais alors, qu’est-ce que l’on considère comme interconnexion « très longue » et quand est-ce qu'une méthode de terminaison est-elle nécessaire ? Nous allons le découvrir dans cet article.
La topologie d’une interface SPI est très simple. Elle utilise trois lignes avec une seule liaison contrôleur-périphérique, ou quatre lignes avec plusieurs esclaves dans le bus. Le contrôleur en amont peut envoyer et recevoir des données sur une paire de lignes jusqu’à 60 Mbps, les données pouvant être envoyées via un câble à une autre carte ou un autre dispositif. La topologie d’un bus SPI typique est illustrée ci-dessous.
Que se passe-t-il sur le circuit imprimé ? Si vous consultez les fiches techniques d’un composant doté d’une interface SPI, vous trouverez des valeurs minimales de temps de montée pouvant descendre jusqu’à 1 ns pour les composants avancés. Pour certains composants, le temps de montée peut être beaucoup plus long, peut-être de 20 ns ou plus.
De toute évidence, un bus lent comme un bus SPI peut toujours avoir un comportement de signal haute vitesse même si le débit de données et le débit d’horloge sont faibles, mais il n’y a aucune spécification d’impédance ! Quelle est la meilleure façon d’aborder les conceptions SPI ?
On parle peu de ce problème de l’interface SPI alors qu’il s’agit de l’un des problèmes classiques de la conception de circuits imprimés haute vitesse. Puisque nous avons une situation où nous devons déterminer si une liaison SPI est « rapide » ou « lente » en termes de temps de montée, la première étape consiste à comprendre ce qui influe exactement sur le temps de montée.
La première étape consiste à rechercher dans vos fiches techniques le composant principal qui contrôlera votre bus SPI. Si votre composant est bien documenté, le temps de montée sur l’interface SPI sera exprimé en fonction d’une capacité de charge particulière observée sur le bus. Notez que la « capacité de charge » suppose une inductance nulle dans la connexion entre la sortie SPI et la charge de test, de sorte que vous pouvez traiter cette valeur de temps de montée comme une constante de temps RC en première approximation.
Les valeurs figurant dans l’exemple ci-dessus qui montre une capacité de charge élevée ne sont pas typiques de la plupart des composants, mais elles illustrent l’idée principale : le temps de montée est déterminé par la capacité du bus.
Dans cet exemple, si nous prenons le temps de montée de 10 % - %-90 % indiqué ci-dessus et que nous déterminons son équivalent en 2.2RC (norme utilisée pour déterminer les valeurs constantes de temps), nous obtenons une résistance observée dans le bus de R = 113,6. Cela signifie que, si nous ajoutions une résistance au driver (voir ci-dessous), nous pourrions ralentir le temps de montée tout en faisant correspondre l’impédance.
Gardez ces points à l’esprit car, plus tard, nous les utiliserons pour comprendre pourquoi la terminaison de résistance série peut être utilisée pour ralentir le bus SPI. Maintenant que nous connaissons le temps de montée du bus observé au récepteur, nous pouvons déterminer quand le bus est considéré comme « long ».
Pour obtenir une estimation approximative, nous pouvons comparer la distance parcourue par le signal pendant son temps de montée à la longueur totale. L’autre approche consiste à utiliser une estimation de la bande passante à partir du temps de montée (qui est de 35 MHz dans l’exemple ci-dessus) pour déterminer quand l’impédance d’entrée du bus s’éloigne trop d’une impédance de charge comme je l’ai décrit précédemment dans cet article. Le moyen le plus simple d’obtenir une estimation approximative est de comparer la distance parcourue par le signal pendant son temps de montée au délai de propagation de l’interconnexion.
Je préfère utiliser une limite conservatrice de 10 % pour estimer quand le bus commence à être long ; si le retard de propagation est inférieur à environ 10 % de la distance parcourue pendant le temps de montée du signal, alors le bus est considéré comme court et nous n’avons pas besoin de nous soucier de terminer l’impédance du bus :
Notez que d’autres recommandations indiquent un seuil compris entre 10 % et 50 % ; il n’y a pas de valeur unique à partir de laquelle le bus devient soudainement long, c’est une question de jugement. Par exemple, pour un signal SPI de 10 ns sur une couche de circuit imprimé où Dk = 4, la limite de 10 % est de 0,15 mètre, soit 15 cm. Cela signifie que tout routage SPI portant un signal de 10 ns inférieur à 15 cm sera considéré comme un bus court, ce qui s’applique à de nombreuses situations.
Si vous avez un bus SPI lent, voici quelques recommandations très simples que vous pouvez suivre pour éviter certains problèmes élémentaires d’intégrité du signal. Voici quelques mesures très simples que vous pouvez mettre en œuvre pour réduire simultanément l’inductance (qui conduit à l’oscillation), la diaphonie et les émissions par rayonnement :
Pour de meilleures performances, je recommande de ne pas utiliser deux couches et de plutôt commencer par un empilement de circuit imprimé compatible avec les conceptions numériques haute vitesse.
Dans les cas où les lignes SPI doivent avoir une impédance spécifique, il existe une bonne raison pour laquelle les concepteurs utilisent 50 Ohms comme impédance cible. Ironiquement, je ne pense pas que les gens comprennent vraiment l’intérêt de faire cela, mais ils finissent par prendre la bonne décision, même si c’est pour de mauvaises raisons.
Si 50 Ohms est la cible d’impédance caractéristique d’un bus SPI électrique, il y a probablement sur la carte d’autres pistes à impédance contrôlée qui ciblent également l’impédance caractéristique de 50 Ohms. Le fait d’avoir une seule cible d’impédance facilite grandement le contrôle de l’impédance pour un fabricant. S’ils doivent échanger des matériaux dans l’empilement pour atteindre votre objectif d’impédance, il est beaucoup plus facile de le faire s’il n’y a qu’une seule cible à atteindre dans votre empilement.
D’après ce que nous avons vu ci-dessus, dans la grande majorité des situations pratiques avec une liaison SPI, il n’y a pas besoin de terminaison au niveau du driver ou du récepteur. Si c’était le cas, il y aurait une spécification d’impédance quelque part dans les fiches techniques des composants, dans les spécifications SPI ou les deux. De plus, les composants auraient probablement une terminaison intégrée appliquée à l’impédance cible, ce qui vous éviterait d’avoir à placer une résistance.
La réponse est assez simple : l’idée est de ralentir le signal émis par le driver. La résistance offre également l’avantage d’amortir toute oscillation au niveau de la sortie. Notez que dans ce cas, le choix de cette résistance n’a rien à voir avec la correspondance d’impédance à déterminer en cas de ligne électrique courte.
Si votre contrôleur est un composant avancé comme un FPGA et que vous intégrez une interface SPI à ce contrôleur, le temps de montée peut être très court car la structure physique de l’appareil garantit simplement des temps de montée très rapides. Par conséquent, il peut être avantageux de ralentir le signal afin de ne pas avoir un signal rapide créant une diaphonie. Dans ce cas, vous devez placer la résistance près du driver.
Veillez à ne pas trop ralentir le temps de montée, sinon le signal sera trop lent pour faire basculer les E/S au niveau de la charge et le signal pourrait ne pas être lu correctement. Vous pouvez également outrepasser les temps de préparation si le temps de montée est trop long. Il existe un modèle RLC simple qui peut être simulé pour déterminer la valeur de résistance en série appropriée.
Le modèle réel d’un bus SPI est plus complexe. Il comprend les facteurs suivants :
Le bus court ressemble essentiellement à ce modèle LC :
L’impédance de la source est idéalement de 0 Ohms, bien qu’en réalité il puisse s’agir d’une faible valeur d’environ 10 à 30 Ohms. La capacité de charge doit être spécifiée dans la fiche technique du récepteur.
Howard Johnson en parle sur le site Web de SigCon ; il s’agit d’un bus qui peut présenter une oscillation sous-amplifiée s’il reçoit un signal rapide et s’il y a trop d’inductance ; il peut également être simulé dans SPICE. L’ajout d’une résistance en série dans ce cas ajoute une atténuation, ce qui réduira le temps de montée.
Notez que je n’ai pas tenu compte de la résistance des pistes dans cette liste ; la résistance des pistes sera très faible et fournira des pertes et une atténuation négligeables. En effet, la résistance des pistes est de l’ordre du milliOhm et la résistance approximative qui régit le temps de montée est comprise entre 10 et 100 Ohms, donc la résistance des pistes est clairement négligeable.
Dans le cas d’un bus long, ce qui est peu courant, vous devez faire correspondre la ligne SPI à une impédance cible (50 Ohms est une valeur pratique). Dans ce cas, en comparant simplement le basculement du signal au niveau de l’E/S SPI au courant, vous obtiendrez une valeur de résistance pour le signal à l’état MARCHE.
Dans ce cas, la résistance en série nécessaire pour atteindre une cible de 50 Ohms sera généralement de 22 Ohms ou de 33 Ohms. Placez-la près du driver pour que l’impédance corresponde et ralentissez le signal comme décrit ici.
L’autre raison de le faire est si vous avez plusieurs composants esclaves sur le bus ; vous devrez alors adapter la résistance à l’impédance d’entrée dans chaque branche du bus, et il peut être pertinent de ralentir le temps de montée de manière suffisante pour que vous n’ayez pas à vous soucier de l’impédance d’entrée au niveau des séparations dans le bus. En général, il est préférable de séparer la ligne près du driver car l’impédance d’entrée dans chaque section sera plus proche de l’impédance caractéristique de la ligne.
Un aspect que nous n’avons pas abordé dans cet article est le format de signalisation dans les interfaces SPI. Pour en savoir plus sur cet aspect du protocole SPI, lisez cette excellente présentation de Mark Harris :
Que vous deviez ou non respecter une exigence d’impédance de liaison SPI, vous pouvez concevoir les meilleurs cartes à l’aide des fonctionnalités de conception et de routage des 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.