SDRAM-Struktur für Cortex-M7

Ich überlege, ein benutzerdefiniertes Board zu entwerfen, das auf einem Microchip / ATMEL SAM S70 oder STM32F7 / STM32H7 basiert. Das SAMS S70 scheint die günstigste Option zu sein und bietet ungefähr das Gleiche wie die ST-Konkurrenz.

Ich versuche jetzt herauszufinden, wie viel SDRAM ich an diese MCUs anschließen kann.

  1. Das Datenblatt des S70 gibt nicht an, welche Art von SDRAM (DDR2, DDR3) usw. es verarbeiten kann. Woher weiß ich, welche Speicherchips kompatibel sind?

  2. Beim Durchstöbern von digitec ist mir aufgefallen, dass fast alle (?) 1G-Speicherchips 8 Bänke haben, was mehr ist, als der SAM S70 verarbeiten kann (maximal 4 Bänke). Und alle Chips, die ich gefunden habe und die 1G auf 4 Bänken anbieten, sind nur DDR1. Ist die Datenmenge pro Bank irgendwie begrenzt?

  3. Außerdem bin ich mir nicht sicher, wie viele Daten der Speichercontroller des SAMS S70 pro Bank (Zeilen- / Spaltenadressen) und insgesamt adressieren kann. Wenn ich das Datenblatt richtig gelesen habe, ist die größte Adresse 13 Bit Zeilenadresse, 11 Bit Spaltenadresse + 1 Bit Byte-Offset + 2 Bit Bankadresse, dh insgesamt 27 Adressbits. Das wäre 1/8 von 1G, dh 128M?

  4. Wo spielt die Seitengröße dabei eine Rolle?

Ich weiß, dass dies viele Fragen sind, aber ich bin ziemlich überwältigt von der Menge an Speicherkonfigurationen und die begrenzten Informationen in den Datenblättern helfen nicht weiter.

Wenn sie ein Referenzdesign haben, zeigt es, welcher Speicher verwendet werden soll.

Antworten (2)

Der Speichertyp, den Sie benötigen, ist SDRAM . Es ist nicht dasselbe wie DDR-SDRAM. Ich glaube, ich habe noch kein Cortex-M-Gerät gesehen, das DDR-Speicher unterstützt. Sie würden sich normalerweise für die Cortex-A-Familie entscheiden, wenn Sie diese Art von Fähigkeit benötigen.

Sie können SDRAM-Chips leicht auf digikey oder jeder anderen Händlerseite finden.

An diesem Punkt ist der Rest Ihrer Frage wahrscheinlich irrelevant, aber lassen Sie mich Ihnen einige zusätzliche Punkte geben.

Beide Chips unterstützen 256 MB RAM. Wenn Sie sich den Digikey-Link oben ansehen, beträgt die größte Menge in einem einzelnen Chip 512 Mbits (64 MBytes). Hier kommt die Datenbusbreite ins Spiel. Sie können sehen, dass 512-MB-Chips in drei Konfigurationen erhältlich sind:

  • 16 MB x 32 Bit
  • 32 MB x 16 Bit
  • 64 MB x 8 Bit

Eine Möglichkeit, die Speicherkapazität zu erhöhen, wäre die Verwendung von zwei 512-MB-Geräten in einer 32-MB-x-16-Bit-Konfiguration und deren Verkabelung, wie in dieser Atmel-App-Notiz gezeigt , für insgesamt 128 MB RAM:

Geben Sie hier die Bildbeschreibung ein

Ich stimme Ihnen bezüglich der Unterstützung von SDRAM vollkommen zu, ich habe viel Zeit damit verbracht. Ich konnte keine Lösung außer FPGA finden.
Danke für die Antwort. Wenn ich richtig liege, gibt es wegen des begrenzten 16-Bit-Datenbusses keine Möglichkeit, die Speicherkapazität des SAM S70 über 256 MB hinaus zu erweitern, habe ich recht?
Eigentlich komme ich nicht ganz klar wie ich überhaupt 256MB anhängen kann. Für 8K-Zeilen, 2K-Spalten, 4 Bänke und 16-Bit-Datenpfad bekomme ich nur 128 MB?
@Xaser Der App-Hinweis, den ich verlinkt habe, behauptet, dass die MCU vier Bänke eines 32-Bit-breiten SDRAM verarbeiten kann. Das S70 sollte das auch können. Entweder das, oder die Spezifikation ist ein Copy-Paste-Fehler.
@Armandas ja, aber die MCU hat nur 16 physikalische Datenleitungen, dh 16 Bit breit? und die Inkonsistenz scheint im Datenblatt selbst zu liegen (meine Berechnung sagt 128 MB, aber das Datenblatt sagt 256 MB), seltsames Zeug.
@Xaser Dies hilft Ihnen zwar aus akademischer Sicht möglicherweise nicht, aber eine gute Dokumentation und Designunterstützung ist genauso wichtig (wenn nicht wichtiger) als die Spezifikationen des Chips. Wenn Sie Schwierigkeiten haben, herauszufinden, wie Sie das Atmel-Teil entwerfen sollen, sollten Sie sich vielleicht andere Hersteller ansehen. Alternativ können Sie versuchen, den Atmel-Support zu kontaktieren und zu sehen, ob sie das Problem klären können.

Datenblatt sagt auf der ersten Seite:

"-16-Bit Static Memory Controller (SMC) mit Unterstützung für SRAM, PSRAM, LCD-Modul, NOR und NAND-Flash mit On-the-Fly-Scrambling

̶ 16-Bit-SDRAM-Controller (SDRAMC) mit Schnittstelle zu bis zu 256 MB und mit On-the-Fly-Scrambling"

Nur um zu erwähnen: SAM S70 unterstützt nur 16 Bit (externe) Busbreite. Ich bevorzuge STM-MCUs, die auch 32bit zulassen. Es spielt eine Rolle für die Leistung: Wenn Sie Codeabrufe durchführen lassen oder 32-Bit (int, float) oder sogar Doppelwörter (64-Bit) verwenden, erhalten Sie nur die Hälfte des 1/2 potenziellen Durchsatzes. Es hängt davon ab, wofür und wie oft Sie den externen Speicher verwenden (temporäre Daten oder Hauptdaten und Code dort?). Überprüfen Sie auch, ob diese MCU Caches bereitstellt, zB ist es ein Cortex-M4/M7 mit Caches? Wenn dies der Fall ist, konfigurieren Sie die MPU ordnungsgemäß, um sie zu verwenden. Ich bevorzuge MCUs mit Caches, plus ITCM und DTCM, zB STM32F7 für Hochleistungs-Embedded-Systeme. Externe Speicher verwende ich oft nur als RAM-Disk oder für temporäre Puffer, nicht als Hauptspeicher.

Übrigens: Sie können auch prüfen, ob die Verwendung von SDIO (SD-Karte) möglicherweise auch ausreicht. Sie können dort GB Speicherplatz haben. Auch Code-Fetches werden oft unterstützt, es ist nur noch langsamer (zB 4bit Bus). Aber viel einfacher zu verbinden und eine Platine mit SD-Kartensteckplatz (oder gelötetem eMMC-Chip) zu erstellen.

Oder: Was ist mit SPI-Speicherchips, zB FRAMs?

Übrigens: Ein echter DDR-Speicher (oft nur auf Cortex-A-Anwendungsprozessoren zu finden, wie LP-DDR2 oder DDR3) ist sehr schwierig als PCB zu entwerfen: Sie benötigen eine passende Leiterbahnlänge auf allen Leitungen, eine Impedanzanpassung und auch eine Terminierung an der Ende. Kein einfaches Design wie bei Static-(S)RAM oder Static-(S)DRAM.