Flash-SPI-Kommunikation funktioniert nicht ohne Oszilloskop

Wir verwenden W25Q128JV Flash IC in Verbindung mit nRF52 SoC.

Flash-Datenblatt: https://www.winbond.com/resource-files/W25Q128JV%20RevH%2003102021%20Plus.pdf

Wir stehen vor folgendem Problem: SPI-Kommunikation funktioniert nicht. Wenn wir jedoch einen Logikanalysator (ähnlich wie dieser https://www.sparkfun.com/products/15033 ) an die DI-, DO- und CLK-Leitungen anschließen, funktioniert alles hervorragend. Daher bin ich mir sicher, dass es kein softwarebezogenes Problem ist.

Unten ist schematisch aus dem Datenblatt:

Geben Sie hier die Bildbeschreibung ein

In unserer Leiterplatte haben wir folgende Konfiguration:

  • R1: nicht verwendet
  • R2: 10kOhm
  • R3: 100 kOhm
  • C1: 0,1 uF

Wir dachten, dass das Problem darin besteht, dass R1 in unserem Design fehlt. Also haben wir R1 zu DO, DI, CS und CLK (50 Ohm) hinzugefügt. Es hat nicht geholfen.

Ich möchte auch darauf hinweisen, dass das Kommunikationsproblem auch dann gelöst wurde, wenn der Logikanalysator ausgeschaltet war.

Hat jemand eine Idee, was das Problem ist?

Was spricht dazu?
Ein Logikanalysator ist kein Oszilloskop. Sie sollten sich die Signale tatsächlich mit einem Oszilloskop ansehen, um zu sehen, was los ist.
Sind Sie sicher, dass das Gerät, mit dem Sie sprechen, ordnungsgemäß geerdet ist? Manchmal können Sie versehentlich eine Masseverbindung mit Laborgeräten herstellen, die nicht vorhanden ist, wenn das Gerät nicht vorhanden ist
Versuchen Sie, kleine Kappen (ein paar pf, sogar Keramikscheibenkappen reichen aus) zwischen Linien und gnd zu setzen und sehen Sie, was passiert. Sehen Sie, wie es mit dem Oszilloskop aussieht, selbst wenn Kabel die Dinge reparieren, wird ein schlechtes Signal immer noch aussehen ... na ja ... nicht perfekt. Verlegen Sie die Uhrleitung sehr nahe an Signalleitungen? Haben Sie eine lückenlose Massefläche? Es können viele verschiedene Dinge sein, es ist nur so, dass die Leads die Dinge gerade genug ändern, damit alles irgendwie funktioniert. Böses Problem, das ist sicher
Haben Sie den SPI-Modus überprüft? Normalerweise liest SPI an einer Kante und schreibt an der anderen, wodurch es einigermaßen tolerant gegenüber Rauschen und nicht übereinstimmenden Verzögerungen ist, aber wenn der SPI-Modus falsch ist, lesen und schreiben Sie möglicherweise an derselben Kante.

Antworten (3)

R2 auf SPI-Leitungen werden nicht benötigt, WP und HOLD sind eine andere Geschichte, normalerweise nicht von der MCU gesteuert.

Ein üblicher Wert für R1 ist 22 Ohm, R3 wird ebenfalls nicht benötigt.

Was noch verwirrender macht, Sie nennen MISOx die Signale, die Ein- oder Ausgänge sind. Sie haben nur ein MISO, MOSI, CLK pro SPI-Kanal, aber Sie könnten mehrere CSx haben, die WP, HOLD sind nicht Teil von SPI, also sollten Sie sie nicht MISOx nennen.

BEARBEITEN:

Die Widerstände R1 müssen nahe an der Signalquelle liegen

In der Nähe von MCU (MCU zu Flash):

  • KS -> KS
  • MOSI -> DI
  • CLK -> CLK

Near Flash (Flash auf MCU):

  • TUN -> MISO
Danke für die Hilfe. Es scheint, dass die MCU die Pull-Ups und Pull-Downs mit der Standard-Softwarekonfiguration mit Ausnahme des MISO-Pins selbst handhabt. Mit anderen Worten, wenn wir Pull-up auf MISO haben und nichts anderes auf anderen Linien, hat alles gut funktioniert. Dann haben wir die Software neu konfiguriert, um Pull-up auch für MISO zu verwenden, und jetzt funktioniert das Setup ohne Widerstände auf CLK-, MOSI-, MISO- und CS-Leitungen. Referenz: devzone.nordicsemi.com/f/nordic-qa/53634/…

Sie haben etwas Rauschen auf Ihren Signalen. Woher das Geräusch kommt, kann sich niemand vorstellen. Das Aufhängen der Logikanalysatorsonde an den Leitungen bietet jedoch eine ausreichende Filterung des Rauschens, damit die Dinge funktionieren können.

Vielleicht möchten Sie damit experimentieren, eine LA-Sonde auf jeweils ein Signal zu legen und sehen, ob Sie das Problem auf diese Weise eingrenzen können. Nur raten (ein SWAG), würde ich sagen, dass der CLK wahrscheinlich der Schuldige ist.

Beachten Sie, dass das Anbringen von 50-Ohm-Widerständen am Zielende dieser Signale, wie Sie es anscheinend getan haben, nicht helfen wird. Diese Reihenabschlusswiderstände müssen so nah wie möglich an der Quelle (Antriebsseite) des Signals liegen.

Das Verringern der Werte von R2 und R3 kann ebenfalls hilfreich sein, insbesondere wenn Vcc < 5 V ist.
Ich hatte einmal ein ähnliches Problem, bei dem das Übersprechen zwischen den Daten- und Taktleitungen einen winzigen zusätzlichen "Hook" in der Flanke des Taktsignals verursachte und den Status des Slaves zweimal statt nur einmal pro Taktzyklus vorrückte. Es hat eine ganze Weile gedauert, sie aufzuspüren!

Dies sieht aus wie ein häufiges EMI- oder elektromagnetisches Interferenzproblem zwischen verrauschten SMPS-Versorgungen und Ziel. Auch eine unsymmetrische Leitungsimpedanz kann dies aufgrund der niedrigen CMRR-Leistung und des Erdpfadrauschens verursachen.

Sie können HF-Störungen mit einer Kappe zur Masse an der Versorgung oder Masse 0 V mit einem Draht als ersten Schritt überbrücken. Ziehen Sie dann in Betracht, das Layout mit Abschirmung zu verbessern und die gemeinsame Erdungsimpedanz mit am Versorgungsende abgeschlossener Abschirmung zu verbessern.