Mon MCU utilise un bus SPI avec environ 4 appareils. J'aimerais étendre ce bus pour qu'il soit également hors carte, c'est-à-dire que certains PCB soient connectés à la carte "principale" et étendent les fonctionnalités. La distance "pad to pad" serait:
longueur de trace de la carte principale + longueur de câble + longueur de trace sur la carte d'extension
3 "+ 6" + 3 "= environ 12"
D'après mon expérience, même un signal de 1 MHz, avec environ 7 ns de temps de montée, sur cette distance via un câble ruban dépassait de plus de 1 V (mais il n'y avait pas de sonnerie excessive). Les cartes seront alimentées par la même alimentation.
Remarque: Vous ne pouvez pas voir les temps de montée ici, mais vous pouvez voir le dépassement excessif - il s'agit d'un signal de 3,3 V. Et oui, cela a été mesuré correctement avec un fil très court de la sonde à la terre. Tout comme il est souvent recommandé sur ce site. Je ne pense pas que ce soit une erreur de mesure.
J'aimerais que le système fonctionne à 4 MHz, mais 2 MHz est également acceptable. Le max. le nombre de cartes que je souhaite connecter serait d'environ 4, ce qui étendrait le bus SPI à 12 appareils environ. Je ne pense pas que ce serait trop difficile à gérer via du code car j'ai déjà quelque chose qui fonctionne comme ça. Avoir les lignes de sélection d'esclaves supplémentaires n'est pas non plus un problème.
Cependant, ma préoccupation est de savoir comment envoyer les données SPI d'une carte à une autre. Dois-je simplement envoyer SPI directement ou le convertir en LVDS à une extrémité, puis le reconvertir en SPI à l'autre extrémité?
la source
Réponses:
La règle générale dit que vous devez calculer les effets de la ligne de transmission si la longueur de votre connexion est supérieure à 1 / 10e de la longueur d'onde du signal.
Les lignes de transmission provoquent des réflexions là où elles montrent un changement soudain d'impédance. Le signal réfléchi s'ajoute à l'original, peut se refléter à nouveau du côté de l'émetteur, et ainsi aller et venir. Le résultat est montré dans le graphique: le dépassement dont vous parlez, et quelques sonneries.
edit (re question update) Le
temps de montée semble être de 7ns. C'est rapide, comme le dit Kortuk, cela signifie que vous avez un spectre d'au moins 400 MHz, et ces harmoniques subiront en effet des effets de ligne de transmission, même si votre horloge n'est qu'à 1 MHz. Essayez de les filtrer, une bande passante de 20 MHz (80 MHz pour l'horloge de 4 MHz) vous donne plus que suffisamment de temps de montée. Il s'agit d'une onde carrée de 1 MHz filtrée avec un LPF de mur de briques à 20 MHz:
Le placement d'une résistance série formera un LPF de premier ordre avec la capacité de la ligne. Si nous estimons qu'à 50pF alors
la source
Pour un bus aussi court, j'essaierais de mettre une petite résistance en série avec tout ce qui entraîne une ligne. Ce n'est pas la manière idéale théorique de prendre en compte la théorie des lignes de transmission, mais une approche pragmatique qui, je pense, fonctionnera assez bien pour votre cas. Essayez 47 Ω pour commencer et voyez ce que cela fait. Si cela aide mais pas assez, vous pouvez aller plus haut mais je ne dépasserais pas 120 Ω. Les chances sont que quelque part dans cette plage, vous trouverez une valeur qui fonctionne assez bien.
la source
AFAIK le dépassement peut être éliminé par une terminaison propper, si votre conducteur peut conduire la charge. Sinon, une paire pilote / récepteur dédiée comme LVDS ou peut-être même RS485 fera certainement l'affaire.
la source
J'ai eu de graves problèmes dans le passé avec SPI sur des câbles plats, bien que ceux-ci soient beaucoup plus longs que ce que vous décrivez. L'immunité au bruit est devenue un vrai problème et des commandes corrompues ont fini par arriver sur mes périphériques. Il suffisait d'échouer aux tests d'immunité au bruit CE. Si vous rencontrez des problèmes à cet égard plus tard, je vous recommande de mettre un MCU distinct sur chaque carte et de les connecter via CANbus.
la source