Was ist falsch an dieser SPI-Implementierung?

Ich habe ein System mit RaspberryPi und STM32F407 entworfen, die über SPI-Schnittstellen miteinander kommunizieren.

In den letzten 3 Monaten waren die Tests in Ordnung, aber gestern waren ein RaspberryPi und 2 der SPI-Ports von STM32F407 durchgebrannt. Ich weiß nicht warum. Alles funktionierte, ich ging schlafen, morgens war alles ausgebrannt.

Hier die Umsetzungsskizze:

Topologieskizze

Echte Bilder der Module

Leiterplatten sind 15 cm lang. SPI-Leitungen sind parallel. Es werden keine Chip-Select-Leitungen verwendet. Kein Abschlusswiderstand verwendet. Die SPI-Frequenz beträgt 200 kHz. Netzteile sind ein 5-V-1-A-USB-Ladegerät für RaspberryPi, LM2576-3,3-V-Schaltkreise (von mir selbst implementiert), die 24 V in 3,3 V für MCUs umwandeln.

Ich habe meine Module ungefähr 10 Mal ohne Probleme im laufenden Betrieb angeschlossen (warum wäre Hot-Plugging mit SPI ein Problem?), obwohl SPI laut Wikipedia-Artikel nicht im laufenden Betrieb angeschlossen werden kann.

  1. Also, was könnte möglicherweise diesen Schaden verursacht haben? Stehende Wellen? Hot-Plugging? Oder vielleicht Netzteil? Wie kann ich die Wurzel dieses Problems finden?
  2. Muss ich optische Isolatoren (oder CMOS-Puffer?) für jede MCU-Einheit verwenden?
Was genau meinst du mit "ausgebrannt"? Gab es körperliche Schäden?
Es scheint so. Die MCU von RaspberryPi war zu heiß zum Anfassen.

Antworten (1)

Sie haben einen sehr langen SPI-Bus, der über mehrere Leiterplatten läuft. Dies wird nicht nur für SPI nicht empfohlen – es wurde ursprünglich für die Chip-zu-Chip-Kommunikation auf einer einzelnen Leiterplatte entwickelt – Sie haben es ohne elektrische Pufferung direkt mit Ihren CPUs verbunden.

Jeder induzierte Transient (der ESD beim Hot-Plugging beinhalten könnte) auf einer der Busleitungen könnte leicht jede Ihrer CPUs in einen "CMOS-Latchup" treiben, bei dem ein parasitärer SCR aktiviert wird, der Vdd im Wesentlichen gegen Masse kurzschließt. Physische Schäden durch den daraus resultierenden Temperaturanstieg können dauerhaft sein.

SPI ist besonders einfach zu puffern, da jede der Leitungen unidirektional ist. Sie sollten solche Puffer bei der nächsten Revision jeder Ihrer Leiterplatten einbeziehen.

Denken Sie, dass ein elektrischer Puffer (wie 4050 oder 74245 ) ausreicht oder eine optische Isolierung obligatorisch ist?
Nein, ich glaube nicht, dass Sie eine Optoisolierung benötigen. Jeder elektrische Puffer, der für ein angemessenes ESD-Niveau ausgelegt ist, sollte in Ordnung sein.
Ich habe bisher versucht, mit 4050 und MAX485 zu puffern, aber sie können das Taktsignal nicht erfolgreich übertragen. Ich werde morgen ein paar andere ICs ausprobieren. Wenn ich das richtig verstehe, muss ich keine Angst vor ESD haben, wenn ich einen Puffer mit ESD-Schutz verwende? Dann kann ich meine Module im laufenden Betrieb anschließen, richtig?
Sie werden sie nicht elektrisch beschädigen, aber es gibt andere Probleme mit Ihrem Hot-Plug-Schema. Da Sie die Chip-Selects nicht verwenden, die normalerweise die Byte-Ausrichtung der Daten auf dem SPI-Bus bereitstellen, könnten Sie ein Modul mitten in einer Transaktion anschließen, und es wäre für immer nicht synchron mit dem Rest System.
Ich habe 74HC244 zum Puffern verwendet und für die ersten Tests war es in Ordnung. Ich habe mein Modul mehrmals im laufenden Betrieb angeschlossen und es ist nichts durchgebrannt. Das Synchronisationsproblem wird meistens nicht beobachtet, wenn es auftrat, hat sich meine Software darum gekümmert. Aber dann sind interessanterweise die Puffer ausgebrannt. Ich habe sie ausgetauscht, mein Modul im laufenden Betrieb eingesteckt und dann sind alle Puffer wieder durchgebrannt. Ich habe keine Pufferchips mehr, also muss ich bis morgen auf weitere Tests warten.
Stellen Sie beim Hot-Plug sicher, dass zuerst Masse, dann Vcc und dann alle Datenleitungen verbunden werden?
Nein, es ist absolut willkürlich. Ich verwende DSUB-9-Anschlüsse, daher kann ich die Verbindungsreihenfolge nicht bestimmen. Aber ich glaube, ich verstehe. Sie meinen, wenn ich Datenleitungen vor VCC anschließe und eine Leitung logisch 1 ist, kann es zu einem CMOS-Latch-up kommen, oder? Wenn ja, kann ich TTL-Geräte auf der Busseite verwenden und sie auf den MCU-Seiten in CMOS-Pegel konvertieren. Ich denke, das könnte funktionieren.
Ich habe ein paar Artikel gelesen und bin zu dem Schluss gekommen, dass Hot Plugging eine andere Geschichte ist. Ich muss ohne Hot-Plugging-Funktion fortfahren und es später hinzufügen. Ich denke, das Stoppen der SPI-Kommunikation während des Einsetzens des Moduls reicht aus, um ein CMOS-Latchup zu verhindern.