Speicherbeschränkungen des Mikrocontrollers [duplizieren]

Ich kann wirklich nicht verstehen, warum der Mikrocontroller-Speicher sowohl für Flash als auch für RAM nicht mit dieser Geschwindigkeit zunimmt, wenn unser PC-Speicher in Gigabytes zunimmt. Welchen Grenzen stehen wir bei beiden Gedächtnisarten gegenüber?

Antworten (3)

Mehrere Gründe. Erstens werden Mikrocontroller im Allgemeinen nicht mit den gleichen hochmodernen Prozessen wie DRAM und Flash für Ihren Computer gebaut, sodass sie den technologischen Fortschritt nicht in gleichem Maße nutzen. Diese Bleed-Edge-Prozesse haben Nachteile, einschließlich I/O-Pin-Spannungstoleranz (die Obergrenze für Bleed-Edge-Prozesse könnte 1,8 oder 1,2 Volt betragen, im Gegensatz zu 5 oder 3,3 Volt für viele Mikrocontroller), spezielle Core-Versorgungsspannungen (1,0 oder sogar 0,9 Volt), höherer Leckstrom usw. Zweitens sind Mikrocontroller im Allgemeinen auf einem Stück Silizium aufgebaut, sodass der Prozess nicht gleichzeitig für Logik, DRAM und Flash optimiert werden kann. Mikrocontroller verwenden im Allgemeinen auch SRAM anstelle von DRAM, das viel mehr Platz beansprucht, aber weniger Strom verbraucht und keine Aktualisierung erfordert. Ebenfalls, Der in Mikrocontrollern verwendete Flash ist normalerweise der robustere und weniger dichte NOR-Flash. Diese Art von Flash-Speicher kann ohne Nachbearbeitung direkt ausgelesen werden. Es unterstützt auch mehr Lese- und Schreibzyklen. Die meisten SSDs, Flash-Laufwerke usw. verwenden NAND-Flash. Diese Art von Flash-Speicher ist nicht so robust wie NOR-Flash, insbesondere wenn kapazitätsvervielfachende Tricks wie Multilevel-Zellen verwendet werden. Der Flash-Rohspeicher ist tatsächlich ziemlich oft fehleranfällig und die Zellen haben keine besonders lange Lebensdauer, so dass viel zusätzliche Verarbeitung erforderlich ist, um die Fehler zu korrigieren und Wear-Leveling durchzuführen. Dies erfordert viel zusätzliche Logik und verbraucht mehr Strom. usw. NAND-Flash verwenden. Diese Art von Flash-Speicher ist nicht so robust wie NOR-Flash, insbesondere wenn kapazitätsvervielfachende Tricks wie Multilevel-Zellen verwendet werden. Der Flash-Rohspeicher ist tatsächlich ziemlich oft fehleranfällig und die Zellen haben keine besonders lange Lebensdauer, so dass viel zusätzliche Verarbeitung erforderlich ist, um die Fehler zu korrigieren und Wear-Leveling durchzuführen. Dies erfordert viel zusätzliche Logik und verbraucht mehr Strom. usw. NAND-Flash verwenden. Diese Art von Flash-Speicher ist nicht so robust wie NOR-Flash, insbesondere wenn kapazitätsvervielfachende Tricks wie Multilevel-Zellen verwendet werden. Der Flash-Rohspeicher ist tatsächlich ziemlich oft fehleranfällig und die Zellen haben keine besonders lange Lebensdauer, so dass viel zusätzliche Verarbeitung erforderlich ist, um die Fehler zu korrigieren und Wear-Leveling durchzuführen. Dies erfordert viel zusätzliche Logik und verbraucht mehr Strom.

Siehe auch: Warum haben Mikrocontroller so wenig RAM?

und: Präzise Unterschiede zwischen DRAM- und CMOS-Prozessen

Meiner Meinung nach verbraucht SRAM mehr Strom als DRAM, da der Leckstrom von Transistoren größer ist als die Selbstentladung von Kondensatoren. Ich stimme Ihrer Antwort immer noch positiv zu, insbesondere dem Hinweis auf "Warum hat die MCU so wenig RAM?"
Leerlauf-SRAM verbraucht weniger Strom als Leerlauf-DRAM, da Leerlauf-DRAM aufgefrischt werden muss, was viel Strom verbraucht. Es ist jedoch möglich, dass SRAM unter hoher Last mehr Strom verbraucht als DRAM.
Außerdem wird SRAM-Leckage zu einem großen Problem für sehr feine Prozesse, bei denen die Transistoren sehr klein sind. Bei den Prozessen, die für die meisten Mikrocontroller verwendet werden, ist die Leckage viel geringer.
Habe etwas recherchiert: Sie haben Recht, SRAM mit Low-Power-MOS sind ziemlich effizient und MCU sind oft Low-Power. Ich fand 160 µA für 64-Mbit-SRAM im Standby, 1 mA für 128-Mbit-SDRAM mit geringem Stromverbrauch bei Selbstaktualisierung (R1WV6416RBG vs. MT48LC8M16A2P)

Mikrocontroller haben mit wenigen Ausnahmen ihren gesamten Speicher – sowohl Programm-Flash als auch RAM – auf demselben Chip wie die CPU. Sie tun dies, um die Pins auf dem Chip für On-Board-Peripherie wie GPIO-Ports, UARTs, SPI- und I2C-Busse, USB, PWM und andere freizugeben. Dadurch können Systeme mit nur einem Mikrocontroller und wenigen anderen Teilen gebaut werden. Mikrocontroller sind im Vergleich zu Mikroprozessoren sehr billig, die Low-End-PICs beginnen beispielsweise bei etwa dreißig Cent.

Um externen Speicher zu unterstützen, sind ein Adressbus und ein Datenbus erforderlich, und für einen 32-Bit-Mikrocontroller werden genau dort 64 Pins plus Steuerleitungen benötigt. Sogar frühe Mikroprozessoren hatten nicht genügend Pins, um damit umzugehen, zum Beispiel hatte ein 68000 in einem 64-Pin-DIP Adressleitungen A1 bis A23 und Datenleitungen D0-D16. Adress- und Datenleitungen können auch gemultiplext werden, indem zuerst die Adresse zwischengespeichert und gehalten wird, während der Speicherzugriff durchgeführt wird.

Frühe Mikroprozessoren, die auf den ersten PCs verwendet wurden und typischerweise in 40-Pin-DIP- Gehäusen untergebracht waren, hatten, wenn überhaupt, nur sehr wenige integrierte Peripheriegeräte und konnten es sich daher leisten, ihre Pins für Adress- und Datenleitungen zu verwenden. Aber das ist kein Problem mehr, da Mikroprozessoren jetzt viel mehr Pins haben als Mikrocontroller. Mikrocontroller können zwischen acht und über hundert Pins haben, während einige Mikroprozessoren, wie eine Variante des Intel i7 , über 2000 Pins haben . Dieser Prozessor kostet bei Newegg 584 US-Dollar, weit entfernt von 30 Cent. Hinweis: Das beinhaltet keine Speicherkosten (siehe unten).

Mikroprozessoren haben normalerweise keinen Speicher in den Chip eingebaut (außer Caches). Stattdessen verfügen sie in der Regel über viele (GB) externes dynamisches RAM, das normalerweise in DIMM -Steckplätze eingesteckt ist . Sie haben auch normalerweise keinen internen Nur-Lese-Speicher, der auch extern ist. Das externe ROM wird nur für den anfänglichen Boot-Code verwendet, der einen Second-Level-Boot von jedem verwendeten Gerät liest (normalerweise eine Festplatte, kann aber auch eine CD, DVD oder ein USB-Stick sein).

Natürlich würde ein 32-Bit-Mikrocontroller keinen 32-Bit-Datenbus benötigen; SRAMs, die schnell genug sind, um 32 Bit in 5 ns (200 MHz sind schnell für einen Mikrocontroller) über eine 8-Bit-Schnittstelle bereitzustellen, sind nicht gerade undenkbar. In ähnlicher Weise kann der Adressbus durch Pin-Wiederverwendung kleiner als 32 Bit (oder die maximale Adressgröße) sein. Dies erhöht natürlich die Komplexität an beiden Enden der Schnittstelle.
@PaulA.Clayton Einverstanden, das war die ganze Idee hinter dem 8088 und dem 68008. Ich habe meinem zweiten Absatz auch einige zusätzliche Informationen hinzugefügt.

Der Hauptgrund sind natürlich die Kosten. Selbst langsamer Standalone-RAM kostet mehrere Dollar pro Gigabyte und wird in einem ziemlich großen Paket geliefert. Die von Alex in seiner Antwort beschriebenen Prozessbeschränkungen sind sehr real und würden die Kosten für On-Chip-DRAM für einen Mikrocontroller massiv erhöhen. Selbst wenn die Kosten gleich wären, sind mehrere Dollar eine große Preiserhöhung für eine MCU. Für diese Art von Upgrade benötigen Sie einen zwingenden Grund, und die eingebettete Steuerung gibt Ihnen selten einen.

Aber lassen Sie mich diese Frage umdrehen – warum um alles in der Welt benötigt ein PC Milliarden von Bytes Speicherplatz? Der Navigationscomputer von Apollo 11 hatte 4 kB RAM und 72 kB ROM. Vor zwanzig Jahren konnten Sie die meisten Aufgaben mit 4 MB RAM erledigen. Vor fünfzehn Jahren reichte ein Computer mit 64 MB RAM für Bürozwecke, Surfen im Internet, Musikhören usw. Angemessene Textmengen passen in Dutzende von Kilobyte, komprimierte Bilder in guter Qualität liegen unter einem Megabyte und 1920 x 1080 Standbilder sind es unter zehn Megabyte, und wir haben immer noch hauptsächlich mit der gleichen Art von Daten zu tun. Was hat sich geändert, um den tausendfachen Speicherplatz zu rechtfertigen?

Multimedia – Displays mit höherer Auflösung mit mehr Farben, HD-Video und hochwertigem Sound, die sich alle auf intensive Decodierungsalgorithmen verlassen, um sich an Bandbreitenbeschränkungen anzupassen. Benutzerschnittstellen gingen mit auf die Reise. Betriebssysteme begannen, immer mehr Arbeit zu leisten. Spiele verbrauchen so viel Hardware wie möglich. Und darunter Schicht für Schicht von Software-Frameworks, um die High-Level-Programmierung einfacher und zuverlässiger zu machen. Trotz alledem stagnieren die PC-Verkäufe, Nutzer haben immer weniger Anlass, ihre Hardware aufzurüsten.

Aber all das Zeug ist optional. Entferne die Grafik, die Benutzeroberfläche und das Betriebssystem, und selbst eine 16-MHz-CPU wird zu einer leistungsstarken Rechenmaschine. Eine MCU überwacht und reagiert hauptsächlich auf Ereignisse in Echtzeit, sodass nicht viel Speicher benötigt wird, um den Zustand zu definieren. Sie programmieren auf Bare Metal (oder vielleicht einem minimalen RTOS), sodass der Software-Overhead minimal ist. Es gibt aufgabenspezifische Hardware, die die meisten Hochgeschwindigkeitsaufgaben wie Timing und Kommunikation erledigt, was die CPU- und RAM-Anforderungen weiter reduziert. Jetzt haben Sie ein System, in dem Sie ziemlich viel Arbeit in ein paar Kilobyte Programm- und Datenraum erledigen können.

Wenn Sie mehr Speicherplatz benötigen , können Sie Off-Chip-RAM oder Flash hinzufügen oder sogar Daten an einen Remote-PC senden. Aber für die meisten MCU-Anwendungen würde zusätzliche Kapazität auf dem Chip ungenutzt bleiben. Warum also dafür bezahlen? Ihre Endkunden werden nicht beeindruckt sein, wie viel RAM in einem Motorcontroller oder einem Stromversorgungsmodul steckt.

Ein Beispiel für diese Art von Design auf einem PC finden Sie unter MemTest86, das auf einem Disc-Image mit nur 10 Megabyte enthalten ist und Linux enthält!

"1920x1080 Standbilder sind unter einem Megabyte" ... Wirklich? Sie müssen vielleicht nach erheblicher (wahrscheinlich verlustbehafteter) Komprimierung meinen?
JPEGs sind, ja. Ich werde klären.