Warum haben Mikrocontroller so wenig RAM?

Vielleicht ist dies eher ein Wahrnehmungsproblem, aber es scheint, als hätten sich Mikrocontroller in den letzten 20 Jahren sprunghaft weiterentwickelt, in fast jeder Hinsicht, höhere Taktraten, mehr Peripheriegeräte, einfacheres Debuggen, 32-Bit-Kerne usw.

Es ist immer noch üblich, RAM in den 10 KB (16/32 KB) zu sehen.

Es scheint nicht so, als könnte es direkt eine Frage der Kosten oder der Größe sein. Ist es ein Problem der Komplexität, wenn der RAM-Controller über einem bestimmten Schwellenwert liegt?

Oder ist es nur so, dass es im Allgemeinen nicht erforderlich ist?

Wenn ich bei einem bekannten Internetanbieter über eine Teilematrix schaue, sehe ich einen Cortex M4 mit 256 KB für weniger als 8 US-Dollar, und dann können Sie für ein paar Dollar mehr ein paar mehr finden, die kein ROM haben, aber es scheint ziemlich spärlich zu sein ...

Ich brauche nicht unbedingt einen Mikrocontroller mit einem MB flüchtigem Speicher, aber es scheint, als könnte jemand ...

Vielleicht gibt es einen eher technischen Grund, aber für mich scheint es eine Frage der Märkte zu sein. Sie verwenden Mikrocontroller, wenn Sie Anwendungen haben, die sie verwenden, wenn Sie etwas mehr Leistung benötigen, wechseln Sie normalerweise zu einem vollständigeren eingebetteten System.
10 s kB. Das ist riesig. Mein Go-to-Mikrocontroller für Prototyping-Zeug hat 68 Byte RAM: en.wikipedia.org/wiki/PIC16x84
Ich habe einmal einen 3D-Software-Rasterizer in 86B auf einem Arduino mit 2KB RAM geschrieben. Es hat mich verärgert, denn wenn ich nur 10 KB oder 50 KB gehabt hätte, hätte ich tatsächlich anfangen können, echte Modelle in den Speicher einzupassen und etwas Interessantes zu tun.¶ Ich hatte damals tatsächlich genau dieselbe Frage, und ich glaube nicht, dass die aktuellen Antworten sprechen Sie es gut genug an. Ja , SRAM ist teuer – aber CPUs haben Megabytes an Cache aus SRAM und sind dennoch recht billig. Es fühlt sich an wie eine faule Ausrede.
@slebetman gibt es einen Grund, warum Sie ein 20 Jahre altes Mikro mögen, wenn viel bessere Geräte weiter verbreitet und billiger sind?
it seems like somebody mightist der Haken hier, die meisten Leute nicht. Sie werden Netflix nicht gerade auf diesem Chip streamen, und die 64K sind normalerweise mehr als genug für alles, was Sie mit einem Mikrocontroller tun müssen . Wenn Sie höher hinaus wollen, besorgen Sie sich einen ausgewachsenen Comp, zB eine Himbeere.
@GraphicsResearch: Sobald Sie anfangen, Dinge wie 3D-Rendering zu machen, würde eine CPU wie ein AVR es aufgrund des genauen Problems, das Sie angegeben haben, nicht schneiden: Speicher. An diesem Punkt sollten Sie zu etwas wie ARM wechseln.
@markrages: Weit verbreitet? Das hängt von deiner Definition ab. Hier kann der PIC16F84 in jedem Elektronikgeschäft gekauft werden, das Sie betreten. Während so etwas wie ein ARM die Bestellung bei einem Lieferanten oder den Abschluss von Lieferverträgen erfordert. Außerdem gibt es den 16F84 in einer Form, die extrem billig ist, wenn Sie sich entscheiden, einen Lieferanten zu kontaktieren und nicht viele Pins benötigen - SIM-Karten. Sie sind billiger als gewöhnliche 16F84. Die Mehrheit der Satellitendecoder-SIM-Karten sind 16F84s
In früheren Tagen von MPUs war eine Halbweisheit: „Wenn du es nicht in 1K kannst, kannst du es nicht.“ Ich war skeptisch, bis Microchess in 1K auftauchte. Wer braucht mehr?
@imallett-CPUs sind im Vergleich zu MCUs alles andere als billig. Versuchen Sie, eine einzelne CPU im Preisbereich unter einem Dollar zu finden (dort befinden sich die meisten MCUs).
@DmitryGrigoryev Der Arduino Nano kostet 22 US -Dollar und bietet bis zu 2 KiB SRAM. der Raspberry Pi 3 kostet 35 $ und hat >2 MB SRAM. Das ist etwa 644⨯ besser als eine lineare Skalierung. Der Punkt ist, dass Speicher die Kostenskalierung von Prozessoren nicht vollständig erklärt, noch ist die Skalierung relevant, um zu erklären, warum Speicher für Mikrocontroller typischerweise im Bereich von 10–100 K bleiben.

Antworten (8)

Dafür gibt es mehrere Gründe.

Zunächst einmal nimmt der Speicher viel Siliziumfläche ein. Dies bedeutet, dass eine Erhöhung der RAM-Menge direkt die Siliziumfläche des Chips und damit die Kosten erhöht. Eine größere Siliziumfläche wirkt sich doppelt auf den Preis aus: Größere Chips bedeuten weniger Chips pro Wafer, insbesondere am Rand, und größere Chips bedeuten, dass bei jedem Chip mit größerer Wahrscheinlichkeit ein Defekt auftritt.

Zweitens ist die Frage des Prozesses. RAM-Arrays sollten auf andere Weise optimiert werden als Logik, und es ist nicht möglich, verschiedene Teile desselben Chips durch verschiedene Prozesse zu schicken – der gesamte Chip muss mit demselben Prozess hergestellt werden. Es gibt Halbleiter-Foundaries, die sich mehr oder weniger der Produktion von DRAM verschrieben haben. Keine CPUs oder andere Logik, nur direkter DRAM. DRAM erfordert flächeneffiziente Kondensatoren und Transistoren mit sehr geringem Leckstrom. Die Herstellung der Kondensatoren erfordert eine spezielle Verarbeitung. Die Herstellung von Transistoren mit geringem Leckstrom führt zu langsameren Transistoren, was ein guter Kompromiss für die DRAM-Ausleseelektronik ist, aber nicht so gut für den Aufbau einer Hochleistungslogik wäre. Das Produzieren von DRAM auf einem Mikrocontroller-Die würde bedeuten, dass Sie die Prozessoptimierung irgendwie abwägen müssten. Große RAM-Arrays entwickeln auch eher Fehler, einfach aufgrund ihrer großen Fläche, was die Ausbeute verringert und die Kosten erhöht. Das Testen großer RAM-Arrays ist auch zeitaufwändig, und daher erhöht das Einbeziehen großer Arrays die Testkosten. Darüber hinaus senken Skaleneffekte die Kosten für separate RAM-Chips stärker als für spezialisiertere Mikrocontroller.

Der Stromverbrauch ist ein weiterer Grund. Viele eingebettete Anwendungen sind leistungsbeschränkt, und daher sind viele Mikrocontroller so gebaut, dass sie in einen sehr energiesparenden Ruhezustand versetzt werden können. Um einen Ruhezustand mit sehr geringem Stromverbrauch zu ermöglichen, wird SRAM verwendet, da es in der Lage ist, seinen Inhalt bei extrem geringem Stromverbrauch aufrechtzuerhalten. Batteriegestütztes SRAM kann seinen Zustand über Jahre mit einer einzigen 3-V-Knopfbatterie halten. DRAM hingegen kann seinen Zustand nicht länger als einen Bruchteil einer Sekunde halten. Die Kondensatoren sind so klein, dass eine Handvoll Elektronen aus dem Substrat heraus und in das Substrat tunneln oder durch die Zellentransistoren lecken. Um dem entgegenzuwirken, muss DRAM kontinuierlich ausgelesen und zurückgeschrieben werden. Infolgedessen verbraucht DRAM im Leerlauf deutlich mehr Strom als SRAM.

Auf der anderen Seite sind SRAM-Bitzellen viel größer als DRAM-Bitzellen, wenn also viel Speicher benötigt wird, ist DRAM im Allgemeinen eine bessere Option. Aus diesem Grund ist es üblich, eine kleine Menge SRAM (kB bis MB) als On-Chip-Cache-Speicher in Verbindung mit einer größeren Menge Off-Chip-DRAM (MB bis GB) zu verwenden.

Es wurden einige sehr coole Designtechniken verwendet, um die in einem eingebetteten System verfügbare RAM-Menge kostengünstig zu erhöhen. Einige davon sind Multi-Chip-Pakete, die separate Chips für Prozessor und RAM enthalten. Andere Lösungen umfassen die Herstellung von Pads auf der Oberseite des CPU-Gehäuses, damit ein RAM-Chip darauf gestapelt werden kann. Diese Lösung ist sehr clever, da je nach benötigter Speichermenge verschiedene RAM-Chips auf die CPU gelötet werden können, ohne dass zusätzliches Routing auf Platinenebene erforderlich ist (Speicherbusse sind sehr breit und nehmen viel Platinenfläche ein). Beachten Sie, dass diese Systeme normalerweise nicht als Mikrocontroller betrachtet werden.

Viele sehr kleine eingebettete Systeme benötigen ohnehin nicht sehr viel RAM. Wenn Sie viel RAM benötigen, sollten Sie wahrscheinlich einen High-End-Prozessor verwenden, der über einen externen DRAM anstelle eines integrierten SRAM verfügt.

Ich habe echte RAM-ICs mit Beinen und allem gesehen, was auf Prozessoren (die BGA-Pakete sind) geklebt/platziert und in sie geroutet wurden! Die Dinge, die wir für den Vorstandsbereich tun!! Wie die Russen mit ihrer TRIZ-Designmethodik betonen, gehen Sie zu Z, wenn Ihnen der Platz in X und Y ausgeht :)
+1 Für die wichtige Unterscheidung zwischen SRAM und DRAM. SRAM ist sowohl schneller als auch energieeffizienter, insbesondere im Leerlauf, aber wie Sie bemerken, erheblich teurer und benötigt mehr Platz.
Ich glaube nicht, dass SRAM die teuerste Art von RAM ist. Als Direktzugriffsspeicher kann eine Kombination aus Flip-Flops und Multiplexern verwendet werden, die eine bessere Leistung als SRAM bietet, jedoch zu viel höheren Siliziumkosten. Solche Speicher werden normalerweise nicht viel größer als etwa 32 Wörter, aber ein solcher Speicher kann gleichzeitige Lese- und Schreibvorgänge auf eine Weise aufnehmen, wie es ein SRAM nicht kann.
Es stimmt, Registerdateien und vollständige Flip-Flops sind teurer als SRAM, aber sie werden nicht als Allzweck-Systemspeicher verwendet.
@alex.forencich: Nicht für Allzweckspeicher, aber angesichts der Tatsache, dass die Scenix-Mikrocontroller den PIC-Befehlssatz mit 100 MIPS mit einer sehr kurzen Pipeline ausführen könnten, wäre ich nicht überrascht, wenn der gesamte (kleine) RAM in diesen Chips implementiert wäre mit Flops.
Ich habe einen funktionierenden HTTP-Server auf einer MCU mit 160 KB SRAM und ohne externes DRAM gesehen. Es konnte nicht mit vielen parallelen Verbindungen umgehen, aber es funktionierte.

Speicher nimmt wahrscheinlich den meisten Siliziumplatz ein, und RAM, das sehr schnell zu verwenden ist, ist flüchtig - und verbraucht ständig Strom, um seinen Zustand beizubehalten. Wenn Sie nicht viel RAM benötigen, ist es für viele andere Anwendungen nicht nützlich. Wenn ein Embedded-System-Designer mehr RAM benötigt, erhält er lediglich einen externen RAM-Chip und verwendet periphere Speicherschnittstellen, die Mikrocontroller heutzutage häufig haben, um eine sehr einfache Plug-and-Play-Speichererweiterung zu ermöglichen. Das ist der Grund, warum Mikrocontroller im Allgemeinen immer noch einen vernünftig niedrigen Onboard-RAM haben, weil vernünftiger Anwendungscode und Anwendungsszenarien normalerweise nicht viel brauchen.

Wenn Sie anfangen, sich den größeren Architekturen zu nähern, die voll auf Betriebssystemen laufen müssen, wird RAM extrem wichtig, aber dies verlässt den Bereich der Mikrocontroller und gelangt in eingebettete Computer, eher wie die, die Sie in den Beaglebone- und Raspberri Pi-Boards sehen Tage. Und selbst in diesem Stadium sind die Prozessoren so komplex und so voll von Funktionen, dass sie keinen Platz für die Menge an RAM haben, die für ihre Aufgabe benötigt wird, so dass externer Speicher ziemlich erforderlich ist, damit sie überhaupt funktionieren.

BEARBEITEN:

Als persönliche Anekdote habe ich kürzlich eine kleine autonome Robotersteuertafel mit dem Ziel erstellt, sie für Computervision mit niedriger Auflösung wie Bewegungserkennung und Objektverfolgung und -verfolgung zu verwenden. Ich habe für diese Aufgabe einen ARM Cortex M3 mit niedriger Pinzahl gewählt, und als ich mir Atmels Auswahl an Prozessoren der SAM3-Serie angesehen habe, habe ich mich tatsächlich für den höchsten RAM entschieden, den ich finden konnte - weil ich in diesem Fall keinen externen RAM-IC kaufen wollte aufgrund von Platz auf der Platine und weil die Komplexität eines Hochgeschwindigkeits-RAM-Speicherbusses auf der Leiterplatte nicht erwünscht ist. In diesem Fall hätte ich mir für meine spezielle Anwendung sehr gewünscht, wenn möglich die Option auf viele 100 KB mehr RAM zu haben.

Guter Punkt, an den Stromverbrauch habe ich gar nicht gedacht...
"und RAM ist flüchtig, aber sehr schnell zu verwenden, verbraucht ständig Strom, um seinen Zustand beizubehalten" kaum. Die CMOS-Logik, einschließlich SRAM, verbraucht extrem wenig Strom, wenn sie den Zustand nicht ändert. Beachten Sie, dass die meisten Mikrocontroller ihren RAM-Inhalt selbst dann beibehalten, wenn sie sich in Abschaltmodi mit extrem niedrigem Verbrauch befinden.
@ChrisStratton: Ich habe eine Reihe von Mikrocontrollern verschiedener Hersteller mit Modi gesehen, die einen Teil ihres RAMs herunterfahren , um Strom zu sparen, obwohl die, die ich gesehen habe, etwas ärgerlicherweise das Einschalten des RAMs nicht zulassen ohne Systemreset. Nicht sicher, was der Zweck dieser letzteren Einschränkung ist; Wenn ich während bestimmter Vorgänge einen großen Teil des RAM für die temporäre Speicherung benötige, aber nicht anders, sehe ich nicht ein, warum ich es nicht bei Bedarf einschalten und bei Bedarf ausschalten sollte, aber ich habe so etwas nicht gesehen Merkmal.
@supercat Möglicherweise überschätzen Sie die Auswirkungen eines Systemresets. Ich habe an einem (für ein Hobbyprojekt unnötig eingeschränkten) Mikrocontroller gearbeitet, bei dem jeder Interrupt einen Systemreset verursachte. Sie mussten nur das Reset-Ursachenregister am Einstiegspunkt Ihres Programms überprüfen, keine große Sache. Das Zurücksetzen des Systems hat nicht alle Register und den Speicher gelöscht! Es war wirklich nur ein Zurücksetzen des Befehlszeigers. Offensichtlich variiert dies je nach Chip.
@ user253751: Einige Systeme bieten eine Möglichkeit, E/A-Pin-Zustände durch einen intern ausgelösten System-Reset zu halten, viele jedoch nicht. Ich kenne keine, die es Peripheriegeräten wie UARTs ermöglichen würde, durch einen System-Reset funktionsfähig zu bleiben. Darüber hinaus unterscheiden sich Systeme erheblich in der Geschwindigkeit, mit der sie aus einem System-Reset herauskommen können, und einige löschen einen Großteil ihres RAMs bei jedem Reset, vielleicht um die Möglichkeit zu vermeiden, dass RAM in einem metastabilen Zustand hochfährt, der die CPU stören könnte, wenn es wird gelesen, bevor es geschrieben wird.
@supercat Nun, Sie haben einen Punkt, ich ging davon aus, dass "Systemreset" das Zurücksetzen des CPU-Kerns mit einer Anweisung oder einem Register bedeutet, nicht den gesamten Chip. Ich nehme an, dann würde es als "CPU" -Reset und nicht als "System" -Reset bezeichnet werden, oder?
@ user253751: Auf vielen Mikrocontrollern kann sogar ein vollständiger System-Reset schnell durchgeführt werden, und einige können I/O-Pin-Zustände einfrieren, bevor sie einen System-Reset durchführen, und sie eingefroren halten, bis der Code den Zustand der Sicherungslogik wiederherstellt und wieder aktiviert seine Verbindung zur Außenwelt. Nicht alle Systeme bieten jedoch eine solche Flexibilität, und wenn ich mich richtig erinnere, haben die mir bekannten Systeme das Herunterfahren des RAM nicht erlaubt.

Neben den hervorragenden Punkten, die in den anderen Antworten angesprochen wurden, ist ein weiterer Grund für begrenzten Arbeitsspeicher die Architektur des Mikrocontrollers. Nehmen Sie zum Beispiel den Microchip PIC10LF320, der nur 448 Byte Programmspeicher (Flash) und 64 Byte RAM hat. Aber es kostet wahrscheinlich nur 25 ȼ (oder weniger) in großen Mengen. Die begrenzte Größe des PIC10-Befehlsworts (12 Bit) erlaubt es, nur 128 Byte RAM direkt zu adressieren.

Ich bin mir sicher, dass es andere Mikrocontroller gibt, die nur einen 8-Bit-Adressbus haben, der sie auf 256 Byte RAM begrenzt.

Aber die meisten Mikrocontroller der Mittelklasse (sogar solche mit 8-Bit-Datenpfaden) haben einen 16-Bit-Adressbus. Eine wichtige architektonische Überlegung für diese Chips ist, ob der Chip die Harvard- oder die Von-Neumann - Architektur verwendet.

Die meisten Mikrocontroller verwenden die Harvard-Architektur, die über separate 16-Bit-Adressräume für Programmspeicher, RAM und speicherabgebildete E/A-Adressen verfügt. Für diese kann der 16-Bit-Adressbus also auf bis zu 64 K (65.536) Byte RAM zugreifen. Es gibt immer noch eine 64K-Grenze, die von der Architektur festgelegt wird, und wenn man darüber hinausgehen möchte, muss eine Art Paging verwendet werden. Es ist viel üblicher, Paging für Programmspeicher statt für RAM-Speicher zu haben.

Mikrocontroller mit Von-Neumann-Architektur, wie z. B. die HCS08-Reihe von Freescale, haben nur einen Adressraum, der zwischen Programmspeicher, RAM und speicherabgebildeten E/A aufgeteilt ist. Um über eine angemessene Menge an Programmspeicherplatz zu verfügen, wird die RAM-Größe auf typischerweise 4 KB oder 8 KB begrenzt. Auch hier kann Paging verwendet werden, um den verfügbaren Programm- oder RAM-Speicherplatz zu erhöhen.

Sie müssen jedoch bedenken, dass der PIC-Kern so völlig codeineffektiv ist, dass er viel zusätzlichen Flash für nichts verbraucht. Und ein Grund, warum es nicht viel RAM benötigt, ist, dass es beispielsweise strenge Einschränkungen hinsichtlich der Tiefe des Aufrufstapels gibt.
@Lundin Einverstanden, Sie müssen den ursprünglichen PIC10 und PIC12 sehr sorgfältig in Assemblersprache programmieren . Die neueren PIC12F- und PIC16F-Geräte haben jetzt einen Hardware-Stack mit 16 Ebenen und 14 neue Befehle. Einige wurden nur für C hinzugefügt, sodass sie viel besser verwendbar sind.
@Lundin: Die PIC-Chips mit 12- und 14-Bit-Befehlslängen waren ziemlich anständig für die Codedichte, dachte ich. Der PIC18F ist der Ort, an dem die Codedichte bei Verwendung des HiTech-Compilers aufgrund der übermäßigen Bankumschaltung, die normalerweise erforderlich war, wirklich abnahm.

Nachdem ich nun schon seit einiger Zeit mit Mikrocontrollern und kleinen Systemen arbeite, möchte ich darauf hinweisen, dass oft sehr wenig RAM benötigt wird. Denken Sie daran, dass, obwohl eine MCU in der Lage sein mag, viel zu leisten, der Trend heutzutage dahin geht, viel mehr MCUs als je zuvor zu verwenden und mehr davon zu verwenden, um viele Aufgaben in größeren Systemen zu verteilen. Dies kombiniert mit der Tatsache, dass im Gegensatz zu aufgeblähten Entwicklungssystemen, die in Windows programmiert werden müssen, die MCU-Entwicklung oft sehr gut optimierte Compiler verwendet, meistens mit sehr effizientem C- und C++-Quellcode, manchmal mit wenig bis gar keinem Betriebssystem-Overhead. Während Sie kaum ein Windows-Programm schreiben könnten, um Ihren Namen auf einem beliebigen Gerät anzuzeigen, ohne mindestens Hunderte von Kilobyte einschließlich Betriebssystemressourcen zu verbrauchen,

Sicherlich gibt es Kosten- und Platzprobleme, wie andere darauf hingewiesen haben. Aber die Geschichte, die hier zur Hand ist, ist, dass das, was heutzutage von Neulingen als eine kleine Menge RAM angesehen wird, wirklich ein bisschen mehr ist als je zuvor, und währenddessen werden die Komponenten und Geräte, mit denen die MCU kommunizieren muss, selbst immer intelligenter. Ehrlich gesagt war meine größte Verwendung von RAM in vielen MCU-Anwendungen in letzter Zeit für Interrupt-gesteuerte Kommunikationspuffer, um die MCU für andere Aufgaben freizugeben, ohne Angst vor Datenverlust zu haben. Aber ob Sie es glauben oder nicht, für gewöhnliche Logik- und Rechenfunktionen sind MCUs ziemlich gut auf ihre begrenzten eingebauten RAM- und Flash-Ressourcen abgestimmt, und Sie können wirklich viel mit sehr wenig erreichen.

Denken Sie daran, dass einst berühmte Videospiele mit grober Grafik, aber komplexer Spiellogik wie „PAC Man“ und „Space Invaders“ normalerweise innerhalb von 8K ROMs auf Computern mit kaum 8 oder 16 KB RAM erstellt wurden!

Was ist mit SD-Karten? Benötigen SDHC-Karten nicht einen Puffer von 256 oder 512 Bytes (die Standard-/alten SD-Karten werden nicht mehr produziert)?
Die Version von Pac Man für das Atari 2600-Videocomputersystem war 4K-ROM, und das VCS selbst hatte 128 Byte RAM. Viele Arcade-Maschinen hatten jedoch im Vergleich zu Heimcomputern der damaligen Zeit einen ziemlich anständigen Teil von ROM und RAM. Ich denke, Defender hatte zum Beispiel 32 KB oder ROM und 64 KB RAM, obwohl 32 KB RAM aus Sicht der CPU "schreibgeschützt" waren (der Prozessor würde dort Daten ablegen, die die Anzeigehardware an den Monitor ausgeben würde). .
@PeterMortensen Viele SD-Karten haben eine Art integrierte CPU, um den Flash zu verwalten. Einige Karten haben einen vollen 32-Bit-ARM-Kern, an den wahrscheinlich 16 oder 32 KB RAM angeschlossen sind.
@alex.forencich: Ja, aber benötigt die SPI-Schnittstelle zum Betrieb einer SDHC-SD-Karte nicht einen Puffer auf der Host-Seite (Embedded System/Microcontroller) - im Gegensatz zu den älteren Karten? Dh Bitadressierung ist bei den neueren (SDHC) Karten nicht mehr möglich? Oder ist es nur vom Dateisystem abhängig (Bit-Adressierung noch möglich)? Benötigen die neueren Karten keine Blockübertragungen (und benötigen daher einen Puffer von 256 oder 512 Bytes)?
Ja, 512B, wenn ich mich erinnere. Sie könnten einfach einen ineffizienten SD-Kartentreiber schreiben, um die ersten X Bytes an Daten zu verwerfen -> kein "großer" Puffer erforderlich.

Abgesehen von den hervorragenden Punkten in Bezug auf Kosten und Herstellung gibt es überraschend wenig Nachfrage nach viel On-Chip-RAM.

Ich arbeite oft mit Mikrocontrollern mit Flash im zweistelligen kB-Bereich (16kB, 32kB) und RAMs im kB-Bereich (1kB, 2kB). Mir geht sehr oft der Flash aus und fast nie der RAM aus. Bei den meisten meiner Projekte komme ich ziemlich nah an das Flash-Limit, benötige aber meist deutlich weniger als 20% des Arbeitsspeichers.

Die meisten sehr kleinen Mikrocontroller haben zwei verschiedene Arten von Rollen:

  • Regulierung und Kontrolle: Sie müssen eine Maschine steuern. Selbst im Fall eines komplizierten Steuerungsalgorithmus, der mehrere 10 kB Codeplatz beanspruchen kann, wird sehr wenig RAM benötigt. Sie haben die Kontrolle über einen physikalischen Prozess und haben Variablen, die einige physikalische Einheiten enthalten, und vielleicht ein paar Variablen als Schleifenzähler. Keine Notwendigkeit für mehr.

  • Datenverarbeitung: Im seltenen Fall, dass Sie große Datenmengen gleichzeitig speichern müssen, können Sie externes RAM verwenden. So ziemlich alle modernen Mikrocontroller unterstützen sie nativ. Wenn Sie ein einfaches Programm mit viel Speicher benötigen, ist es sowohl billiger als auch kleiner, einen kleinen Mikrocontroller und externen RAM anstelle eines High-Level-Mikrocontrollers zu verwenden. Niemand produziert Controller mit wenigen Ports, kleinem Flash und großem RAM, weil es so wenig Nachfrage danach gibt.

Alle bereits genannten Gründe sind natürlich technisch gültig und zutreffend. Vergessen Sie jedoch nicht, dass Elektronik ein Geschäft ist und MCUs einer der wettbewerbsintensivsten Nischenmärkte innerhalb der Elektronikindustrie sind.

Ich wage zu sagen, dass die tatsächlichen Gründe für die Verknüpfung des Preises einer MCU mit der Menge an eingebettetem SRAM hauptsächlich Marketinggründe und keine Kostengründe sind:

  • Bei den meisten Designs ist die maximal erreichbare Taktfrequenz nicht der begrenzende Faktor. Stattdessen ist die Menge des verfügbaren SRAM. Verstehen Sie mich nicht falsch, die CPU-Frequenz ist enorm wichtig, aber innerhalb eines bestimmten Segments der MCU-Familie werden Ihnen normalerweise nicht verschiedene Gerätemodelle zu unterschiedlichen Preisen basierend auf der maximalen CPU-Frequenz angeboten. Außerdem ist die Speicherung von Flash-Programmen der andere wichtige einschränkende Faktor, aber ich werde mich nicht zu sehr auf Flash konzentrieren (die Frage richtet sich speziell an SRAM).

  • Die Menge an verfügbarem SRAM steht in direktem Zusammenhang mit der Komplexität, die Sie in Ihre MCU einbetten können, sei es mit Bibliotheken von Drittanbietern oder mit Ihrem eigenen eingeführten Code. Es ist also eine „natürliche“ Metrik, auf der Ihre MCU-Preise basieren. Es ist verständlich, dass ein technischer Kunde akzeptiert, dass eine MCU, die komplexere Aufgaben bewältigen kann (mehr SRAM, mehr Flash-Speicher), mehr kosten sollte. Der Preis spiegelt hier den zugrunde liegenden Wert (Lieferfähigkeit) der MCU wider. Flash-Speicher wird normalerweise in einer Menge angeboten, die proportional zum SRAM ist.

  • Im Gegenteil, wenn Sie sich den Desktop- und Mobil-CPU-Markt ansehen, können Sie normalerweise keine bestimmte MCU/CPU mit vielen verschiedenen SRAM-Größen beziehen. Stattdessen baut das Preisschema normalerweise auf den Ausführungs-/Leistungsfähigkeiten der MCU/CPU auf: Frequenz, Anzahl der Kerne, Energieeffizienz ...

Ich denke, das ist wahrscheinlich richtig, aber gibt es Beweise? Wie das Auskratzen von Spuren, um Chip a als Chip b zu verkaufen?
Ähm ... interessanter Gedanke. Ich habe keine Beweise für solche Praktiken. Es wirft jedoch eine interessante Frage nach den zugrunde liegenden Herstellungskosten auf. Wäre es teurer, die verschwendete Fläche des Siliziumchips (Wafer) zu verschwenden, falls ein Chip mit höherer SRAM-Größe auf eine kleinere SRAM-Größe ausgekratzt würde? Oder die erhöhten Herstellungs- und Lagerhaltungskosten, die mit der Herstellung von nicht einem einzigen Gerät, sondern zwei verbunden sind? Ich fürchte, die gesamte Elektronikindustrie ist sehr wählerisch, wenn es darum geht, offen über ihre Kosten zu sprechen. Wir werden es vielleicht nie erfahren.
Zum Beweis: Der MT6250 ist ein Multi-Die-Chip, der für Single-Chip-Feature-Phones verwendet wird, weniger als 2 US-Dollar kostet und viel komplexer als ein MCU ist und einen 8-MB-SRAM-Die enthält. Es wäre trivial, ihn mit ähnlichen zu bauen Technologie eine SRAM-reiche MCU.
Dies wäre eine gute Antwort auf "Warum ist der Preis der MCU an die Menge des eingebetteten SRAM gekoppelt?". Aber es scheint nicht die ursprüngliche Frage zu beantworten. Warum gibt es um jeden Preis so wenige Mikrocontroller mit mehr als 512 KB SRAM on-chip? Warum gibt es so viele Mikrocontroller mit "seltsamen" SRAM-Größen ohne Potenzen von 2, wenn Hersteller von dedizierten SRAM-Chips zu denken scheinen, dass es sich aufgrund der reduzierten Lagerhaltungskosten lohnt, nur dedizierte SRAM-Chips in Größen von 2-Potenzen zu produzieren?
@davidcary: Viele Mikrocontroller haben mehrere RAM-Bereiche, auf die gleichzeitig und unabhängig zugegriffen werden kann (z. B. von der CPU und von DMA). Diese Regionen gleich groß zu machen, würde keinen besonderen Layout-Vorteil gegenüber einer unterschiedlichen Anordnung bieten, und für viele Anwendungen würde die RAM-Menge, auf die hauptsächlich über Mittel wie DMA zugegriffen würde, sich von der Menge unterscheiden, auf die nur über die CPU zugegriffen würde.

Man muss also zuerst bedenken, dass 16 KB oder 32 KB eine enorme Menge an Speicher sind und die meisten heute verkauften Mikrocontroller nicht so viel RAM haben.

Viele Mikrocontroller-Programme benötigen 10 oder 50 Byte Speicher. Noch komplexere Dinge benötigen meistens Hunderte von Bytes.

Grundsätzlich gibt es drei Anwendungsfälle, in denen Sie RAM in der Größenordnung von KBytes benötigen: a) Wenn Ihr Mikrocontroller Grafiken erstellt b) wenn Sie den Mikrocontroller für große willkürliche Berechnungen verwenden c) wenn Sie mit PC-Schnittstellen kommunizieren

Zweitens beachten Sie bitte, dass Sie, wenn Sie über Mikrocontroller-RAM sprechen, über Level 0 / Level 1-Cache sprechen. Wenn Sie bedenken, dass ein Intel Haswell "nur" 64 KByte Level 1 Cache hat, werden Sie die RAM-Größe eines Mikrocontrollers überdenken.

Drittens können Sie eine beliebige Menge an externem RAM an einen Mikrocontroller anschließen, insbesondere sogar mehr, als Sie an eine CPU anschließen können.

Ich persönlich entwickle viele Mikrocontroller-Anwendungen und habe nie 1 KB Speicher oder noch mehr benötigt. Ich habe auch nie externen RAM verwendet.

Anders sieht es bei ROM (heute Flash) aus, da sich Ihr Programm und Ihre Daten im ROM befinden. Es gibt wirklich viele Anwendungen, bei denen Sie ein externes ROM an Ihren Mikrocontroller anschließen, weil Sie viele Daten haben.

Betrachten wir ein Beispiel: Analysieren wir eine Mikrocontroller-Anwendung und nehmen wir einen tragbaren MP3-Player mit Display und 4 Gigabyte Flash.

Für diese Anwendung benötigen Sie vielleicht 1 KB RAM. Das reicht, um die Arbeit zu erledigen. Sie könnten jedoch etwas mehr RAM für größere Puffer verwenden, um das Schreiben von USB auf Flash zu beschleunigen.

Sie sehen jetzt den Unterschied: Ein typischer PC hält alle Programme und Daten im RAM. Daher benötigt es viel RAM. Für Mikrocontroller ist dies alles in Flash/ROM.

Sie unterschätzen die RAM-Nutzung in vielen Anwendungen. Nicht um eine riesige Menge, aber vielleicht um den Faktor 10-100, je nach Instanz. MP3-Player müssen digitale Signalverarbeitung leisten.
Ich würde gerne wissen, warum einer von Ihnen diese Dinge sagt. Welche Arten von C-Befehlen benötigen RAM. Anstatt zu sagen „diese Anwendungen benötigen mehr RAM“, würde ich lieber „diese Operationen benötigen mehr RAM, weil …“

Beim Entwerfen einer MCU müssen Sie Bedingungen berücksichtigen, die auf PCs nicht so wichtig sind.

  1. Haltbarkeit

    Bei der Auswahl der Komponenten nimmt man nicht unbedingt die besten und/oder leistungsstärksten Teile, sondern diejenigen, die sich nach mehrjährigem Einsatz bewährt haben, über mehrere Jahre verfügbar und 24/7 einsatzfähig sind Jahre. Aufgrund dieses Umstands scheint ein Controller, der mehrere Jahre auf dem Markt ist und seinen Job gut macht, im Vergleich zum heutigen PC-Standard einen schlechten Arbeitsspeicher zu haben. Aber wie auch immer, es macht seinen Job gut, und es sollte keinen Bedarf für einen Austausch geben, wenn die Technik gut war.

  2. Raum

    Mikroprozessoreinheiten sind buchstäblich Mikros. Sie müssen den benötigten Platz auf das absolute Minimum reduzieren. Natürlich können Sie 256 MB auf dem gleichen Speicherplatz wie 10 Jahre alte 64-KB-Chips erhalten. Hier kommt #1 ins Spiel.

  3. Preis

    Nicht nur der Anschaffungspreis, sondern auch der Stromverbrauch. Sie möchten keine MCU entwerfen, die die Kontrolle über ein Einstiegssystem hat, das 1000 W benötigt, wenn Ihr Konkurrent im Geschäft eines hat, das nur 25 W benötigt. Und das ist natürlich ein günstigerer Anschaffungspreis (bei gleicher Qualität). immer besser.

das ist ein wirklich leistungsstarker Mikroprozessor!
Ich vermute, eine 1-kW-MCU würde nicht sehr lange in einem festen Zustand bleiben.
Alle drei Punkte sind heutzutage im PC-Design extrem wichtig.
@KyranF: Ja, teilen Sie beide Zahlen durch 100. Aber wenn überhaupt, hat er den relativen Leistungsunterschied zwischen Hochleistungsprozessor und Mikrocontrollern mit geringem Stromverbrauch für Batterieanwendungen unterschätzt.