SPI-Signalintegritätsproblem

Ich habe eine benutzerdefinierte vierschichtige Leiterplatte (Signal, Masse, Leistung, Signal) mit einem STM32F4 (72 MHz), der über SPI mit einem Si4684-Empfänger und einem Si4711-FM-Sender verbunden ist.

Geben Sie hier die Bildbeschreibung ein

Es scheint, dass mein Design einige Probleme mit der Signalintegrität hat. Ich kann mit dem Si4711 kommunizieren, aber ich kann nur kurze Befehle mit dem Si4684 kommunizieren. Die Kommunikation mit Si4684 schlägt fehl (einige Bits sind falsch), wenn das Firmware-Image vom STM32 auf den Chip übertragen wird (Large Data Transfer).

Wenn ich meinen Logikanalysator an den MISO-Pin des Si4711 anschließe, dreht sich dieser um. Mit dem Si4711 ist keine Kommunikation möglich, aber die Kommunikation mit Si4684 funktioniert einwandfrei. Wenn ich den Logikanalysator an den MISO-Pin des Si4711 anschließe und den Befehl POWER_UP an den Si4711 sende, scheint der Chip keine Antwort zu erhalten. Das Sondieren am Si4711 MOSI-Pin zeigt deutlich, dass der Befehl korrekt empfangen wird.

Das Verhalten ist das gleiche, wenn ich den Takt mit 300 kHz oder 8 MHz betreibe. Leider habe ich kein Oszilloskop zur Verfügung, aber ich denke, das könnte ein Problem mit der Anstiegsgeschwindigkeit sein, da es unabhängig von der Uhr ist.

Was könnte der Grund dafür sein, dass ich den Logikanalysator an den MISO-Pin anschließen muss, damit der Si4684 funktioniert, und warum funktioniert der Si4711 dadurch nicht mehr?

Was ich bisher versucht habe: - Serienterminierung (50 Ohm, 100 Ohm) auf der CLK-Leitung - Anpassen der GPIO-Geschwindigkeit der SPI-Pins am STM32 (LOW, MEDIUM, HIGH). Ich glaube, dies legt die Anstiegsgeschwindigkeit des Stifts fest. - Verbinden des Logikanalysators mit den anderen SPI-Pins. - Doppelt überprüft, ob ich den richtigen SPI-Modus (0,0) eingestellt habe

Ich verstehe, dass ich ein neues Design erstellen muss, aber ich hätte gerne einen Beitrag dazu, warum dies geschieht.

Nachfolgend finden Sie das Layout und einen teilweisen Schaltplan. SCK-, MOSI- und MISO-Signale sind hervorgehoben.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

UPDATE: Ich habe den Si4711 stattdessen auf I²C verschoben, und jetzt gibt es keine Probleme mehr.

Sie benötigen Chip-Aktivierungssignale für diese SPI-Geräte. In der Frage haben Sie nichts darüber erwähnt.
Entschuldigung, ich habe die CS-Signale aus der Zeichnung herausgehalten. Aber ich habe individuelle CS-Leitungen für jeden Chip und ich habe bestätigt, dass sie sich korrekt verhalten.
Können wir das PCB-Layout sehen?
Wie hoch ist die Versorgungsspannung des STM32? Der Si4710 scheint mit 2,7 V bis 5,5 V kompatibel zu sein und der Si4684 ist ein 1,8-V-Chip.
FWIW Ich würde keine Probleme mit dem von Ihnen beschriebenen Layout bei den von Ihnen beschriebenen Geschwindigkeiten erwarten. Versuchen Sie, ein Oszilloskop zu bekommen, es ist wirklich ein unverzichtbares Werkzeug. Das Problem hängt möglicherweise nicht mit dem SPI zusammen. Wie ist die Leistungsintegrität und Entkopplung? Stimmen Sie zu, dass die Veröffentlichung eines vollständigen Schaltplans und eines PCB-Layouts hilfreich wäre.
Wenn Sie die falsche Kombination von Modi verwenden, so dass Sie ein bestimmtes Signal auf derselben Taktflanke und nicht auf entgegengesetzten Flanken ansteuern und abtasten , ist ein sehr unstabiler Betrieb zu erwarten, und parasitäres Laden von Sonden kann Probleme beheben / beschädigen.
@kva Layout und Schaltplan hinzugefügt
@pericynthion Ja, ich brauche wirklich ein Zielfernrohr. Ich habe jetzt das Layout und Teilschaltpläne hinzugefügt.
@ Foxrider83 Der STM32 läuft mit 3,3 V. Der Si4684 hat V IO mit 1,62 - 3,6 V angegeben, also denke ich, dass das in Ordnung sein sollte.
Sie können die Anstiegsgeschwindigkeit der stm32-Ausgangspins in der Firmware begrenzen, um zu sehen, ob das hilft. Wenn Sie nicht wissen, wie, sagen Sie bitte, welche Entwicklungsplattform Sie verwenden ...
@bitsmack Ich dachte, das wurde mit der GPIO_SPEED-Eigenschaft (LOW, MEDIUM, HIGH, VERY_HIGH) gemacht, aber wenn dies an einer anderen Stelle eingestellt werden kann, bin ich gespannt darauf, es zu lernen. Ich verwende openstm32 mit dem HAL-Treiber.
Danke, JohnDonut, aber das war die Einstellung, auf die ich mich bezog. Ich stimme dem früheren Kommentar zu, dass ich keine Probleme mit der Signalintegrität bei Ihrem Layout und Ihren Geschwindigkeiten vermuten würde ... Ich hoffe, jemand kommt mit einer Antwort, die Ihnen hilft.
Danke für den ganzen Input. Gestern habe ich alle möglichen Terminierungen ausprobiert und sogar versucht, den Si4711 auf einen anderen SPI-Bus (denselben Bus wie das Flash-IC) zu verschieben. Leider hat nichts geholfen. Also habe ich in der Nacht mein Board so modifiziert, dass der Si4711 stattdessen I2C betreibt. Meine Sorgen sind weg, alles funktioniert gut. Aber immer noch neugierig, warum der SPI so gescheitert ist.

Antworten (1)

Ich arbeitete an einem Sensorkopf (4-Kanal-IR-Kamera, CMOS-Mux unter dem mit IndiumPhosphid laminierten Sensor), der absolut nicht mit dem Steuersignal emittierenden FPGA zusammenarbeiten würde, bis ich alle digitalen Schnittstellendrähte (ca. 12 davon) durchtrennt und eingefügt hatte 1-kOhm-Widerstände, um die Flanken der Zeitsignale stark zu verlangsamen und so ein Unterschwingen (auf -5 Volt) und ein Überschwingen (auf +10 V) an der 0 V/5 V-Schnittstelle zu vermeiden.

Bei der Diagnose habe ich vor dem Einsetzen der Rs der 1-Kohm-Serie mit einem Echtzeit-TEK7904 (500-MHz-Oszilloskop, keine Abtastung durchgeführt) und einem P6201 (900-MHz-Sonde bei 1 pF, wenn der X10-Kopf aufgeschoben war) nachgesehen. Ich sah diese schrecklichen Überschwinger mit 500-Pikosekunden-Flanken 4" über 1 PCB, weitere 4" über die 2. PCB und dann durch einen 1"-Anschluss und nach unten in das Flüssigstickstoff-Dewar.

Wir haben also 4 + 4 Zoll in die Leiterplatte eingebettet, mit einer effektiven Länge von 8 Zoll (skaliert durch sqrt (Er)), sodass 4 + 4 zu 8 + 8 wird, wobei der Rückweg 16 + 16 Zoll ergibt, plus Stecker und Dewar.

Ihr SPI besteht nur aus 3 Drähten. Untersuchen Sie, wo genau die Reflexionen/Überschwinger am besten gedämpft werden.

Ich denke, dass es einen Konflikt zwischen diesen Geräten gibt, da er keine Chip-Select-Leitung implementiert hat, also versuchen beide Slaves zu kommunizieren und mit der Terminologie der C-Sprache ist es ein undefiniertes Verhalten :)
Ich habe einzelne Chip-Select-Leitungen und sie werden als ok bestätigt.
@PeterJ Während es im ursprünglichen "Distanz" -Diagramm keine Chipauswahlen gab, zeigt der seitdem hinzugefügte Schaltplan sie.