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:
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.
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.
David Tweed
feier