SDRAM-Problem – LPC1788

Ich habe ein NXP LPC1788-Entwicklungsboard verwendet , auf dem ich meine Anwendung entwickelt habe (.NET Microframework Cortex-M3-Port). Alles war schön und gut auf diesem Board, ich hatte keine Probleme mit RAM oder Ähnlichem, und so war ich bereit, mit der Entwicklung meines Produktionsboards zu beginnen.

Ich habe ein neues Board mit dem gleichen RAM und Prozessor erstellt, und ich habe die Binärdatei vom Entwicklungsboard genommen und auf das neue Board gelegt, und ich bekomme Probleme, wenn ich vom SDRAM aus laufe. Nicht das Übliche, wo es keine Verbindung gibt, noch gibt es einen sporadischen Fehler ... Ich kann einen Speichertest durchführen (den gesamten SDRAM-Block in 32 Bit, 16 Bit, 8 Bit schreiben und die richtigen Daten mehrmals zurücklesen).

Wenn ich jedoch versuche, meine Anwendung auszuführen, bekomme ich wirklich seltsame Probleme mit dem RAM, der entweder überschrieben oder überhaupt nicht geschrieben wird. Dies ist nur der Fall, wenn die Anwendung ausgeführt wird, die auf dem Entwicklungsboard perfekt ist. Es ist nicht intermittierend, es macht jedes Mal das Gleiche. Aus diesem Grund gehe ich davon aus, dass es nicht mein Routing ist, das mir Probleme bereitet (weil meine Speicherprüfung bestanden wird).

Gibt es eine seltsame Funktion des LPC1788 EMC (ARM PrimeCell™ MultiPort Memory Controller), die mir nicht bekannt ist und die Pufferungsprobleme oder Read-Ahead-Probleme verursachen könnte? Wenn jemand mit Erfahrung damit mich in die richtige Richtung weisen oder mir helfen könnte, einen besseren Gedächtnistest zu schreiben, um diese seltsamen Bedingungen zu testen, wäre das sehr hilfreich ...

Ich habe ein Bild des Routings angehängt, das zwar nicht optimal ist (ich habe nur 4 Layer, 2 Signal, 2 Power Plane), aber das RAM funktioniert und ich vom Gerät lesen kann.

Geben Sie hier die Bildbeschreibung ein

Antworten (3)

Lange, parallele Spuren. Kein Signalabschluss. Keine Entkopplungskappen am RAM. Signalspuren, die von der oberen zur unteren Schicht verlaufen, ohne dass eine Kappe in der Nähe ist. Spuren mit langen, nicht abgeschlossenen Stummeln. Einige Signale gehen durch 5 Vias. Und möglicherweise nicht genügend Durchkontaktierungen an den Power / Gnd-Pins des BGA (aber auf Ihrem Bild schwer zu erkennen).

All dies kann zu Speicherproblemen führen, und einige bei jeder Geschwindigkeit. Untersuchen Sie Ihre Uhren am Zielort sorgfältig mit einem Hochgeschwindigkeits-Oskop (350 MHz oder mehr) und zeigen Sie uns, was Sie sehen. Wahrscheinlich haben Sie ein Problem mit der Signalintegrität.

Danke David. Ich habe versucht, dieses Design auf 4 Schichten zu quetschen, aber der Versuch, die Kosten zu senken, hat seine Nachteile. Ich werde in einem Redesign Folgendes tun: 6 Schichten (kürzere Leiterbahnen), 22-Ohm-Terminierung auf Datenleitungen, RAM-Entkopplungskappen hinzufügen, Anzahl der Durchkontaktierungen auf den Leitungen reduzieren. Ich bin mir nicht sicher, ob ich Abschlusswiderstände auf den Adressleitungen und Steuersignalen benötige oder nicht, da ich diese nicht auf dem Datenblatt gesehen habe. Warum sollte ich auch eine Kappe in der Nähe von Signalspur-Durchkontaktierungen wünschen? Ich bin ein „einheimischer“ Ingenieur und habe daher kein Signalintegritätstraining!
@James Der Schlüsselbegriff, den Sie vermissen, ist "Signal Return Path". Ein Signal geht nicht nur in eine Richtung, es muss auch zurück; normalerweise über die Stromversorgungs- oder Masseebene. Die Verwaltung dieses Rückwegs ist der Schlüssel zur Signalintegrität und EMI (sowohl unbeabsichtigte HF-Übertragung als auch HF-Empfang). Dies ist ein riesiges Thema, aber hier ist etwas leichte Lektüre: ti.com/lit/an/scaa082/scaa082.pdf

Riecht nach einem datenabhängigen Problem. Möglicherweise haben Sie eine unglückliche Kopplung zwischen einigen der Daten- und/oder Adressleitungen, sodass das richtige Muster irgendwo einen Fehler verursacht.

Versuchen Sie, die Uhr zu verlangsamen. Wie sich das Symptom ändert oder nicht, kann einige Hinweise geben. Wenn zwischen einigen der Adress- und Datenleitungen ein Übersprechen auftritt, sollte das Problem dadurch behoben werden, da die Übertragungen durchgeführt werden, nachdem sich alles schließlich beruhigt hat. Wenn das Problem darin besteht, dass Rauschen auf die Taktleitung gelangt, ändert dies wahrscheinlich nichts.

Betrachten Sie einige der Signale mit einem Oszilloskop und sehen Sie, wie sauber sie aussehen. Haben Sie Widerstände in Reihe mit den Leitungen geschaltet, um die Leiterbahnimpedanz besser anzupassen und das Klingeln zu reduzieren? Stellen Sie sicher, dass Sie auch die Taktleitung überprüfen, nicht nur ein paar Datenleitungen. Überprüfen Sie auch, ob Sie wirklich die Setup- und Hold-Zeiten haben, die der Chip benötigt.

Denken Sie daran, dass ein scheinbar korrekter Betrieb kein Beweis für einen korrekten Betrieb ist, sondern nur für Glück.

Hallo Olin, es scheint nur wirklich seltsam, dass das gleiche Problem jedes Mal auf die gleiche Weise auftritt. Ich habe die Übertragungsleitungen nicht impedanzangepasst. Ich habe den Chip auf 12 MHz und die SDRAM-EMC-Schnittstelle auf 6 MHz getaktet, und genau das gleiche Problem besteht weiterhin. Es ist wirklich seltsam, dass der normale Datenzugriff kein Problem darstellt, aber das Ausführen der Anwendung zu Fehlern führt. Ich kann die Schaltung einfach auf 6 Ebenen neu entwerfen, die Impendanz jeder Leitung anpassen und auf das Beste hoffen!

Welche Gedächtnistests führen Sie durch? Füllen Sie es zusätzlich zu den Klassikern mit 0 und F und A und 5 und laufenden Einsen und all dem und der Adresse, um einen Adressbittest durchzuführen. Mein Favorit ist ein Pseudozufallstest. nimm ein lfsr (sehr einfach zu codieren, deterministisch und wiederholbar und ist "zufällig genug"), setze es, fülle den Speicher mit Zufallszahlen (überspringe keine oder höre kurz auf, beginne bis zum Ende einen Durchgang, einen Samen am Anfang, versichere / wähle das lfsr wiederholt sich nicht innerhalb des Bereichs, in dem Sie es verwenden), Seed es und lesen Sie es zurück. Seed it, Speicher mit den invertierten Werten aus dem Randomizer füllen, Seed it check. Ändere den Seed und wiederhole. Ich neige dazu, einen solchen Test eine Weile laufen zu lassen. Es findet Adressbitprobleme und Datenleitungsprobleme und viele der normalen Probleme sehr schnell schneller als die herkömmlichen Tests.

Was passiert, wenn Sie die Uhr(en) verlangsamen und langsamer laufen, ändert sich das?

Wenn es sich nicht um Hardware handelt, dann konzentrieren Sie sich auf Software. Was ist der Unterschied zwischen dem Entwicklungsboard und Ihrem Board? Zerlegen Sie die Anwendung in Teile und sehen Sie, ob etwas davon läuft oder fehlschlägt, egal wie sehr Sie es kürzen.

Ahh, sdram, funktioniert deine Aktualisierung? Wenn Sie einen oben beschriebenen Randomizer-Test durchführen, fügen Sie einen Test hinzu, der den Speicher füllt, viele Sekunden oder Minuten wartet und dann zurückliest. Langsam ist genauso schwer zu überholen wie schnell.
Danke schön. Ich werde diese Tests so erstellen, wie Sie es vorschlagen, und sehen, ob ich das Problem herausfinden kann ... Ich werde auch Ihren Vorschlag ausprobieren, ein paar Minuten zu warten, bevor Sie die Daten zurücklesen, um die Aktualisierung zu überprüfen, eine sehr gute Idee. Daran hatte ich nicht gedacht!
Gleicher Deal mit Eeprom und Flash, aber Sie müssen länger warten. Hatte ein Eeprom, das ein oder zwei Wochen brauchte, um den Zustand zu verblassen / zu ändern.