SPI-Busabschluss und Pull-up-Widerstände

Mein Mikrocontroller (ATMEL-Serie) muss über das SPI-Protokoll mit einem Slave-Gerät kommunizieren. Ich entwerfe die Hardware. Die maximale SPI-Busgeschwindigkeit beträgt 1 MHz. Der Abstand zwischen Master und Slave beträgt weniger als 50 mm.

F1) Muss ich dem SPI-Bus einen Abschluss in Reihe hinzufügen, um Reflexionen bei dieser SPI-Geschwindigkeit (1 MHz) zu vermeiden? Wenn ja, wie soll ich seinen Wert berechnen und wo soll ich den Abschlusswiderstand platzieren - in der Nähe des Masters oder in der Nähe des Slaves?

F2) Ich habe andere Referenzdesigns gesehen, bei denen Leute manchmal Pull-up-Widerstände für alle SPI-Signale verwenden, manchmal nur für einige wenige Signale (CS oder MISO) und manchmal gar keine. Benötigen wir Pull-up-Widerstände für SPI-Signale (da der SPI-Port eine Push-Pull-Konfiguration hat)? Die einzige Zeit, in der Pins schweben, ist, bis der Mikrocontroller seine Leistung erhält und Pins als Ausgänge festlegen kann. Sollte ich also Pull-up-Widerstände verwenden müssen oder was passiert, wenn ich in meinem Design keine Pull-up-Widerstände verwende?

Antworten (1)

  1. Bei 1 MHz und 50 mm (2 Zoll) benötigen Sie keine Abschlüsse. Sie haben gewöhnliche digitale Signale an Bord und nicht einmal sehr schnelle.
  2. Sie brauchen keine Pullups oder Pulldowns auf SPI-Leitungen. Bei Verwendung werden SPI-Leitungen immer explizit in beide Richtungen gefahren. Es kann jedoch sinnvoll sein, einen Pulldown (oder Pullup) auf die MISO-Leitung zu setzen. Das liegt daran, dass diese Leitung nur dann von einem Slave angesteuert wird, wenn seine Slave-Select-Leitung aktiviert ist. Wenn der Bus nicht verwendet wird, sind normalerweise alle Slave-Auswahlleitungen nicht aktiviert, sodass MISO floatet. Der willkürliche Datenwert ist irrelevant, da nichts auf seinen Wert schaut, es sei denn, ein Slave ist ausgewählt, aber Zwischenspannungen auf dieser Leitung können dazu führen, dass der Empfänger im Master einen übermäßigen Strom zieht oder möglicherweise oszilliert. Aus diesem Grund lege ich normalerweise einen 100-kΩ-Pulldown auf MISO. Es hält die Leine bei Nichtgebrauch harmlos niedrig. Sie könnten genauso gut einen Klimmzug verwenden, solange alle Slaves auch bei Nichtgebrauch mit Strom versorgt werden.
Ein wichtiger Grund für einen Pullup an den CS/SS-Pins besteht darin, sicherzustellen, dass alle Slaves deselektiert bleiben, wenn der Master zurückgesetzt oder hochgefahren wird. In diesem Fall sind seine Pins normalerweise Hi-Z und daher schwebend, was dazu führen könnte, dass mehrere Slaves ausgewählt werden und den MISO-Bus ansteuern (was zu Kurzschlüssen führt). Vielleicht wäre dies eine nützliche Ergänzung zu dieser Antwort?