Vor ein paar Tagen hatte ich ein Problem, bei dem ich keine Daten von einem SPI-Slave lesen konnte. Ich habe es endlich behoben und kann jetzt ganz gut Daten lesen.
Allerdings habe ich heute ein anderes interessantes Problem gefunden. Wenn ich den Ausgang des Slaves direkt mit der MCU verbinde, werden die Daten beschädigt. Folgendes Bild zeigt dies:
Wenn ich jedoch einen 220-Ohm-Reihenwiderstand einsetze, kommen die Daten wie folgt gut an:
Das übertragene Byte war 11001101. Sie können den Beginn und das Ende der Übertragung an den zwei kleinen Einbrüchen in der Wellenform erkennen. Die anfängliche Senke ist in der Nähe der Auslöseanzeige zu sehen. Diese sind in der beschädigten Wellenform nirgendwo zu sehen.
Die Datenübertragungsrate ist nicht sehr schnell. Die Taktrate beträgt nur 62500 Hz.
Was könnte das verursachen? Und wie kann ich sicherstellen, dass es nicht auftritt, wenn ich die Leiterplatte endgültig auslege?
Die obere Wellenform ist der Takt (SCK) und die untere ist MISO.
Diese Wellenformen zeigen das Klingeln detaillierter. Auch hier ist die obere Wellenform der Takt und die untere ist MISO. In diesem Bild sind CPLD und MCU über einen 220-Ohm-Widerstand verbunden:
Dies zeigt das Klingeln, wenn MCU und CPLD direkt verbunden sind (kein Widerstand dazwischen). Beachten Sie, dass ich den Source-Pin (in diesem Fall den Pin des CPLD) nicht erreichen kann, da sich das CPLD auf einer Entwicklungsplatine und der Chip auf einem BGA-Gehäuse befindet. Ich werde versuchen, zu sehen, ob der Stift sondiert werden kann. Außerdem habe ich vergessen hinzuzufügen, dass ich auch einen 100-Ohm-Widerstand in Reihe am SCK habe. Ich brauchte dies, um das Klingeln von der MCU auf der Uhr zu reduzieren und weil es für den AVR ISP-Programmierer erforderlich ist. Andernfalls gibt AVR Studio einfach einen Fehler aus. Auf dem endgültigen PCB-Layout werden sie also benötigt.
Beim Sondieren müssen Sie das Signal dort prüfen, wo es auf den Eingangsstift trifft, und sicherstellen, dass die Sondenmasse mit einer Masse in der Nähe dieses Stifts verbunden ist, damit kein Erdungssprung verborgen wird. Es sieht für mich so aus, als würden Sie am Ausgangsstift sondieren, der jedes Klingeln verbirgt.
Im ersten Diagramm sehe ich Spitzen an den Signalflanken. Dies sagt mir, dass Sie ein gewisses Überschwingen und möglicherweise ein potenzielles Klingeln haben. Darauf weist auch die Tatsache hin, dass ein 220-Ohm-Widerstand ihn fixiert hat.
Es gibt drei übliche Lösungen für dieses Problem.
Die erste Lösung besteht darin, eine Ferritperle in Reihe zu verwenden, um die Spitze zu dämpfen. Die Ferritperle sieht bei hohen Frequenzen wie ein großer Widerstand und bei niedrigen Frequenzen wie ein Kurzschluss aus. Es ist nicht dasselbe wie eine Induktivität (und eine Spitze bedeutet normalerweise, dass Sie mehr als genug Induktivität in Ihrer Leitung haben).
Die zweite Lösung besteht darin, einen Vorwiderstand wie Sie zu verwenden, aber typische Werte für diesen Widerstand liegen bei etwa 22 bis 50 Ohm, abhängig von der Impedanz der Übertragungsleitung, und der Widerstand muss am Quellenende (Treiberausgang) der Leitung platziert werden (normalerweise innerhalb von 0,2 Zoll, obwohl dies bei 62,5 kHz möglicherweise keinen Unterschied macht). Die Funktion dieses Widerstands besteht darin, die ansteigenden und abfallenden Flanken der Wellenform zu verlangsamen und ihre hochfrequenten Komponenten zu dämpfen. 220 Ohm scheinen mir zu viel Widerstand zu sein. Sie können auch eine Ferritperle (oder einen ähnlichen EMI-Filter) mit dem Widerstand verwenden, normalerweise wenn Ihre Leitung Teil eines Kabels ist.
Schließlich können Sie Ihren Treiber möglicherweise für eine langsamere Flankenrate programmieren (mehrere Nanosekunden statt ein oder zwei), obwohl dies immer noch eine ungewöhnliche Funktion ist. Dies ist tatsächlich die beste Lösung und reduziert obendrein die EMI erheblich.
Ich bin mir nicht ganz sicher, wie es gelingt, sich vom ersten Signal zum zweiten so drastisch zu ändern (ich denke, das ist wahrscheinlich das, was Kevin gedacht hat), aber das wahrscheinlichste Problem klingt wie eine lange Leitung und ein Klingeln. Sie können auf der ersten Spur ein Klingeln sehen (fast 2 V auf einer 3,3-V-Leitung), das vielleicht mehr von einer Geschichte erzählt, wenn Sie die Zeitbasis reduzieren. Dies kann dazu führen, dass einige seltsame Dinge passieren, wie z. B. der Rx-Pin, der mehrere Übergänge aufnimmt - möglicherweise sogar mit anderen Spuren koppelt und dort Probleme verursacht.
Der Widerstand dämpft das Klingeln und repariert Dinge. Die Taktrate ist nicht das Problem, sondern die Anstiegszeit des Signals.
Sie könnten die Leitungen kürzen (falls dies eine Option ist), aber es ist sowieso eine gute Praxis, einen kleinen Vorwiderstand zu haben.
Kevin Vermeer
Saad
Leon Heller
Saad
mjh2007
Joel B
Saad
Markierungen
Saad
Oli Glaser
Mike Desimone
Mike Desimone
Marillion-Regeln