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 ...
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.
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.
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.
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!
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 ...
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.
Beim Entwerfen einer MCU müssen Sie Bedingungen berücksichtigen, die auf PCs nicht so wichtig sind.
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.
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.
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.
Jarrod Christmann
Schlafmann
imallett
Markierungen
TC1
it seems like somebody might
ist 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.Schlafmann
Schlafmann
Benutzer2338816
Dmitri Grigorjew
imallett