Hintergrund zum Thema:
Ich habe derzeit einen SPI-Bus zwischen einem Atmel ATSAM3X8E und einem Spansion FL164K Flash-Speicherchip.
SPI war für mich in früheren Projekten immer super zuverlässig, aber dieses Design ist sehr temperamentvoll (das Routing ist alles andere als ideal). Einige Boards funktionieren gut, einige haben sehr gelegentliche Datenverluste in der SPI-Kommunikation, andere haben nahezu konstanten Datenverlust. Der Datenverlust, auf den ich mich beziehe, lässt sich am einfachsten reproduzieren, indem das Bereit-Flag während eines 50-sekündigen Löschvorgangs ständig abgefragt wird. Meistens ist die Besetzt-Antwort 0x03 (0b00000011), kommt aber gelegentlich als nicht beschäftigt zurück - 0x00 (0b00000000).
Glücklicherweise kann ich den Fehler auf der Bank reproduzieren, und glücklicherweise kann ich das Problem auch beseitigen. Leider ist das Anschließen einer passiven Sonde eines der Dinge, die das Problem beseitigen, sodass ich den Fehler nicht „sehen“ kann. Und ich nenne es nicht gerne repariert, wenn ich mir nicht sicher bin, was ich eigentlich repariere.
Informationen zum Schaltungsdesign:
Möglichkeiten, wie ich dem Problem bereits vorbeugen kann:
Grundsätzlich scheint also jede Möglichkeit, der Schaltung Kapazität oder Belastung hinzuzufügen, die Lesevorgänge zu 100% zuverlässig zu machen.
Wellenformen (aufgenommen mit einem Rigol DS1054Z mit der 100-MHz-Option und einem passiven 150-MHz-Tastkopf mit Erdungsfeder):
Hinweis: Für all diese ist offensichtlich eine Oszilloskopsonde angeschlossen (was das Problem verhindert). Die Wellenformen, die wir hier sehen, sind eigentlich nicht schlimm genug, um das Problem zu verursachen, geben aber hoffentlich eine Vorstellung davon, was schlimm genug sein könnte, um das Problem zu verursachen, wenn die Kapazität der Sonde entfernt wird.
Hinweis 2: Diese Aufnahmen wurden mit einer Taktrate von 5 MHz aufgenommen, aber das Problem scheint sich irgendwo zwischen 100 kHz und 20 MHz zu manifestieren.
Auf den ersten Blick sieht das Taktsignal gut aus (wenn auch sehr schnelle Anstiegszeit von ~8 ns).
Aber eine Nahaufnahme zeigt eine kleine Stufe auf halber Höhe
Und auf der schnellsten Zeitskala sehe ich das hier.
Zum Schluss die Fragen
Wie Sie sehen können, ist die Hochfrequenztheorie nicht mein Fachgebiet, daher schätze ich die Erfahrungen aller auf diesem Gebiet.
Schnelle Anstiegszeiten verursachen viel Übersprechen, da dies, wie Sie erwähnt haben, unabhängig von der Frequenz ist. Auf dem Bild ist schwer zu erkennen, was Spuren und was das Gitter ist. Parallele Routen oder das Stapeln von Routen auf mehreren Ebenen machen es noch schlimmer. Wie Sie es getan haben, kann ein Kondensator die Anstiegszeit verlangsamen, aber Sie müssen darauf achten, die Einstell-/Haltezeiten nicht zu verletzen.
Möglicherweise sehen Sie einige Reflexionen aufgrund einer Impedanz-Fehlanpassung. Ich habe gesehen, dass die Quellenterminierung auf SPI-Taktleitungen verwendet wird, um dies zu berücksichtigen. Sie möchten, dass der Ausgangswiderstand plus Ihr Quellwiderstand der Impedanz Ihrer Spur entspricht.
Ich bin mit der von Ihnen verwendeten MCU nicht vertraut, aber überprüfen Sie das Datenblatt, um festzustellen, ob Sie die Anstiegsgeschwindigkeit steuern können. Möglicherweise können Sie sie verlangsamen. Dies ist bei FPGAs üblich, mit denen ich besser vertraut bin, aber ich habe es bei einigen MCUs gesehen, mit denen ich gearbeitet habe.
Embed-Dead-Design
Embed-Dead-Design