Ist es möglich, Multi-Gigabyte-DRAM-Module mit einem Mikrocontroller zu verwenden?

Ich habe zwei übrig gebliebene 2-GB-RAM-Module, die ich bei einem Upgrade aus meinem MacBook Pro entfernt habe. Ich habe mich nur gefragt, ob diese beispielsweise mit einem Arduino verwendbar sind. Ich wäre sowieso zu viel Anfänger, um dies jetzt tatsächlich zu versuchen, aber ich bin gespannt, ob es überhaupt möglich ist oder ob das einfach viel zu viel Speicher ist, den ein Mikrocontroller adressieren kann.

Sie könnten wahrscheinlich etwas dazu manipulieren, aber die Schnittstellenschaltung wäre wahrscheinlich der komplexeste Teil des resultierenden Systems, und das Ergebnis hätte wenig praktischen Wert.
Danke für die tollen Antworten! Sehr interessant. Ich lerne allmählich, wie die Teile zusammenpassen. Danke.
ARM9- und ARM11-Plattformen hosten DDR2-Controller, aber dann sprechen Sie nicht von Mikrocontrollern, sondern von Mikroprozessoren. FPGA kann auch damit verbunden werden. Die ganze Aufgabe ist ziemlich komplex. Ein Arduino ist nur 8-Bit, daher kann es die massive Adressierung einfach nicht erledigen.
Was Hans gesagt hat - jedes Mikro, das stark genug ist, um diese Art von RAM zu nutzen, hat einen eingebauten DDR-Controller. Ich habe mir das Innenleben der DDR-Steuerung nicht genau angesehen, aber die Tatsache, dass Sie dafür dedizierte Hardware benötigen, sagt es Ihnen etwas ... ältere Module, Sachen von alten Laserdruckern usw. könnten besser verwendbar sein.

Antworten (7)

Ich werde nein sagen: Die grundlegendste Inkompatibilität besteht darin, dass es viel zu viele Pins an diesen Modulen gibt, um sie sogar physisch mit einem Arduino zu verbinden. Dito für ähnliche kleine Mikrocontroller. Ein ARM Cortex M3 kommt näher, aber nur wenige von ihnen haben tatsächlich den externen Bus, der notwendig ist, um RAM auf diese Weise zu verbinden (glaube ich).

Aber ich werde mitspielen und weiter gehen. Angenommen, Sie könnten den Chip irgendwie mit dem Arduino verbinden, ist ein weiteres grundlegendes elektrisches Kompatibilitätsproblem die erforderlichen Spannungen. Ich denke, diese RAM-Module verwenden etwas Seltsames wie 2,2 V - nicht vorhanden auf einem Vanilla-Arduino-Board oder wirklich jedem anderen einfachen Hobby-Mikrocontroller.

Angenommen, das wäre erledigt, dann würde der Chip so ziemlich wie jeder andere externe Speicher für den Arduino funktionieren. Dies wird wirklich ständig gemacht - die Leute fügen externes EEPROM hinzu, um wichtige Konstanten oder SD/MMC-Karten zum Speichern von Webserver-Protokollen und dergleichen zu speichern. In diesem Zusammenhang bieten die RAM-Module natürlich keinen wirklichen Nutzen für den Arduino. Sein Hauptmerkmal ist die Geschwindigkeit, und der Arduino (und ja, andere Hobby-Mikrocontroller) unterbrechen normalerweise nicht die Taktfrequenz von 25 MHz. Sie sind zu langsam, um sich um Geschwindigkeit zu kümmern. Und die Speichergröße ist kein großes Problem, da die Anbindung an eine SD/MMC-Karte deutlich einfacher ist und ebenso viel Platz zum Spielen bietet.

Also selbst wenn es möglich wäre, wäre es nicht wirklich ratsam.

Ich muss gestehen, ich habe darüber nachgedacht, ein altes DIP-DRAM mit meinem Arduino zu verbinden, nur für Larfs. (aber das wäre machbar, sogar auf einem Steckbrett, mit Müll aus der 4164-Ära). ansonsten stimme ich voll und ganz zu.
Das ist eine qualitativ hochwertige Antwort, die schrittweise Annahmen verwendet und zur Endbedingung gelangt. Gut gemacht!
Übersehen Sie nicht die Aktualisierungsprobleme. Ein weiterer Grund, warum "befehlsbasierter" Flash wahrscheinlich besser geeignet ist, wenn eine Maus eines Controllers versucht, einen Mack-Truck eines Speichers zu steuern.
Ich habe oben einen Kommentar mit der Frage eingefügt, aber ich denke, ich sollte ihn wirklich hier einfügen. Vielen Dank für die Antwort. Stack Exchange ist eine super Ressource, und das alles, weil sich die Leute Zeit nehmen, um qualitativ hochwertige Antworten zu geben.

Ich würde nein sagen, nicht ohne ein FPGA von guter Größe (Pin-Anzahl) dazwischen zu stecken, das FPGA spricht mit dem Speicher und der Mikrocontroller spricht mit dem FPGA unter Verwendung eines Paging-Schemas.

Auch mein Gedanke. Und lassen Sie das FPGA einen transparenten Refresh-Controller sein. Aber wirklich ... wäre es nicht einfacher und billiger, ein Arduino in Software auf einem kleinen ARM-System zu emulieren ?
Wie unterhaltsam oder lehrreich es auch sein mag, DDR ist nicht einfach und kein Anfängerzeug. Finden Sie einen anderen Laptop oder ein anderes Motherboard, um diesen Speicher einzubauen, und lernen Sie DDR kennen, indem Sie beispielsweise ein FPGA-Evaluierungsboard verwenden, das ein wenig an der Seite hat, oder vielleicht ein Beagleboard oder ähnliches. Das erste Problem ist die Anzahl der Pins, das zweite sind die Signale, das Timing usw. Es ist schwierig, es zum Laufen zu bringen, wenn Sie Ihre eigene Leiterplatte herstellen. Es ist nicht wie eine LCD-Schnittstelle oder ähnliches, die Sie mit einem Mikrocontroller verbinden können.

Sie könnten möglicherweise ein System von Latches verwenden, damit so etwas wie ein Arduino 32 Adressbits generieren kann, und Sie könnten wahrscheinlich ein Schema zum Generieren der Aktualisierungszyklen entwickeln, aber dies hätte fast keinen Sinn, außer aus technischen Gründen Übung.

Die Schnittstellenschaltung wäre wahrscheinlich der komplexeste Teil des resultierenden Systems, und das Ergebnis hätte wenig praktischen Wert; Das Arduino wäre nicht in der Lage, Code aus dem RAM auszuführen, der Speicher wäre flüchtig und würde wahrscheinlich auch mehr Strom verbrauchen als das Arduino. Wenn Sie Daten speichern möchten, ist ein SPI-EEPROM wahrscheinlich eine viel bessere Lösung.

Kann ein AVR unter allen Umständen Code aus dem RAM ausführen?
@Nick T - Ich habe nicht indirekt darauf hingewiesen, dass es solche Szenarien gibt, in denen dies der Fall sein könnte. Ich habe direkt gesagt, dass es ein Fehler wäre zu glauben, dass jemand, der daran denkt, diese Art von RAM anzuschließen, es so verwenden könnte.
Serial Flash oder SRAM sind normalerweise viel schneller als EEPROM. Wenn Sie viele nichtflüchtige Daten benötigen (der Anwendungsfall des Remote-Codes), ist Flash wahrscheinlich die bessere Wahl. Verwenden Sie für große Puffer SRAM; es ist viel schneller als EEPROM. Wenn Sie ein paar Konfigurationsbits haben, die unabhängig umgeschaltet werden müssen, ist das wirklich die einzige verbleibende Nische für EEPROMs.
@reemrevnivek – guter Punkt, ich gebe +1 für deinen Kommentar. Wenn Sie ein paar Dutzend Konfigurationseinstellungen aufbewahren, ist EEPROM. Wenn Sie Videoframes behalten möchten, SRAM.

Wenn Sie sich jemals die Datenblätter von DRAM-Chips ansehen, gibt es eine Mindesttaktrate von etwa 50 MHz+ für DDR2. Also nein, Sie können sie nicht mit einem Mikrocontroller verbinden (es sei denn, er verfügt über eine integrierte Hardwareunterstützung).

Ganz zu schweigen davon, dass Sie den Speicher auch ziemlich häufig auffrischen müssen! Der Arduino wäre damit beschäftigt, die gesamte Zeit damit zu verbringen, die Speichersteuerleitungen zu steuern!

Die kurze Antwort ist nein.

Der Arduino kann die DDR- oder DDR2-Speicherschnittstelle nicht ansteuern. Sie könnten einen DDR/DDR2-Controller mit einer SPI-Schnittstelle mit einem FPGA herstellen, aber das ist ein erhebliches Unterfangen.

Sie benötigen einen Niederspannungstreiber (SSTL) und eine Möglichkeit, etwa 100 Kanäle zu steuern (jedes Differential, also etwa 200 Pins. Denken Sie an BGA.)

Die meisten DRAMs müssen mit mindestens 1 kHz und wahrscheinlich mehr aufgefrischt werden, um eine niedrige Bitfehlerrate zu haben. Dies wird dann eine große Hintergrundaufgabe bilden und den größten Teil der Verarbeitungsleistung des Arduino verbrauchen, wenn es überhaupt möglich ist, den Speicher mit einer solchen Rate aufzufrischen.

Was Sie jedoch sehen können, ist, dass einige Mikrocontroller, z. B. PIC24F/H/dsPIC33F, eine parallele Master-Bus-Schnittstelle unterstützen, die den Zugriff auf einige Arten von parallelem SRAM ermöglicht. Es gibt sogar Unterstützung mit C, da dieser externe Speicher mehreren In-Code-Variablen und sogar Blöcken zugeordnet werden kann, die sowohl interne als auch externe Speicher kombinieren. Der externe Speicher erfordert, dass Sie einen PMB-Code schreiben. Sie können damit jedoch nur bis zu etwa 1 MB adressieren.

AFAIK DDR verwendet SSTL, nicht LVDS
@mazurnification, ja, du hast Recht (mein Fehler). Trotzdem ein Albtraum, den man von einem Arduino aus steuern kann.
Dann korrigieren Sie Ihre Antwort!
@reemrevnivek, okay. Korrigiert. Allerdings habe ich nur darauf hingewiesen, dass es unpraktisch ist. Egal welches Signalisierungsformat verwendet wird.

Nein, nicht ohne eine Art Paging-Schnittstelle zwischen dem Speicher und der MCU. Einige der AVR-MCUs haben tatsächlich eine eingebaute externe Speicherschnittstelle - Atmega2560 zum Beispiel (siehe Abschnitt 8 des ATmega640/1280/1281/2560/2561-Datenblatts). Aber der Adressraum wird in Kilobyte gemessen, nicht in Gigabyte.