¿Por qué los microcontroladores tienen tan poca memoria RAM?

Tal vez esto sea más un problema de percepción, pero parece que los microcontroladores han avanzado a pasos agigantados en los últimos 20 años, en casi todos los aspectos, mayor velocidad de reloj, más periféricos, depuración más fácil, núcleos de 32 bits, etc.

Todavía es común ver RAM en los 10 de KB (16/32 KB).

No parece que pueda ser una cuestión de costo o tamaño directamente. ¿Es un problema de complejidad con el controlador de RAM por encima de algún umbral?

¿O es solo que generalmente no se requiere?

Mirando una matriz de piezas en un popular proveedor de Internet, veo un Cortex M4 con 256 KB por menos de US $ 8, y luego por unos pocos dólares más puedes encontrar algunos más sin ROM, pero parece bastante escaso...

No necesito exactamente un microcontrolador con un MB de almacenamiento volátil, pero parece que alguien podría...

Quizás haya una razón más técnica, pero a mí me parece que puede ser una cuestión de mercados. Usas microcontroladores cuando tienes aplicaciones que los usan, cuando necesitas algo más de potencia por lo general pasas a un sistema embebido más completo.
10s de kB. Eso es enorme. Mi microcontrolador para usar en la creación de prototipos tiene 68 bytes de RAM: en.wikipedia.org/wiki/PIC16x84
Una vez escribí un rasterizador de software 3D en 86B en un Arduino con 2KB de RAM. Me molestó porque si hubiera tenido incluso 10 KB o 50 KB, podría haber comenzado a ajustar modelos reales en la memoria y hacer algo interesante.¶ De hecho, tenía exactamente la misma pregunta en ese momento, y no creo que las respuestas actuales abordarlo lo suficientemente bien. , la SRAM es costosa, pero las CPU tienen megabytes de caché hechos de SRAM y, sin embargo, siguen siendo bastante baratas. Se siente como una excusa poco convincente.
@slebetman, ¿alguna razón por la que le guste un micro de 20 años cuando los dispositivos mucho mejores están más disponibles y son más baratos?
it seems like somebody mightes el truco aquí, la mayoría de la gente no lo hace. No va a transmitir Netflix exactamente en ese chip, y los 64K suelen ser más que suficientes para todo lo que necesita hacer con un microcontrolador . Si quiere ir más alto, obtenga una composición completa, por ejemplo, una frambuesa.
@GraphicsResearch: una vez que comienza a hacer cosas como la representación en 3D, una CPU como un AVR no funcionaría debido al problema exacto que ha mencionado: la memoria. En ese momento deberías cambiar a algo como ARM.
@markrages: ¿Ampliamente disponible? Eso depende de tu definición. Aquí, el PIC16F84 se puede comprar en cualquier tienda de electrónica a la que entre. Mientras que algo como un ARM requiere realizar pedidos a un proveedor u obtener contratos de suministro. Además, el 16F84 existe en una forma que es extremadamente económica si decide ponerse en contacto con un proveedor y no necesita muchos pines: tarjetas SIM . Son más baratos que los 16F84 ordinarios. La mayoría de las tarjetas SIM decodificadoras de satélite son 16F84
En los primeros días de las MPU, una perogrullada era "Si no puedes hacerlo en 1K, no puedes hacerlo". Estaba escéptico hasta que apareció Microchess corriendo en 1K. ¿Quién necesita más?
Las CPU @imallett son cualquier cosa menos baratas en comparación con las MCU. Intente encontrar una sola CPU en el rango de precios de menos de un dólar (ahí es donde se encuentran la mayoría de las MCU).
@DmitryGrigoryev El Arduino Nano cuesta $ 22 y tiene hasta 2 KiB SRAM. el Raspberry Pi 3 cuesta $35 y tiene >2MiB de SRAM. Eso es como 644⨯ mejor que una escala lineal. El punto es que la memoria no explica completamente la escala de costos de los procesadores, ni la escala es relevante para explicar por qué las memorias de los microcontroladores generalmente permanecen en el rango de 10 a 100 K.

Respuestas (8)

Hay varias razones para esto.

En primer lugar, la memoria ocupa una gran cantidad de área de silicio. Esto significa que aumentar la cantidad de RAM aumenta directamente el área de silicio del chip y, por lo tanto, el costo. Un área de silicio más grande tiene un efecto de "doble golpe" en el precio: los chips más grandes significan menos chips por oblea, especialmente alrededor del borde, y los chips más grandes significan que es más probable que cada chip tenga un defecto.

En segundo lugar está el tema del proceso. Las matrices de RAM deben optimizarse de maneras diferentes a la lógica, y no es posible enviar diferentes partes del mismo chip a través de diferentes procesos: todo el chip debe fabricarse con el mismo proceso. Hay fundiciones de semiconductores que se dedican más o menos a producir DRAM. No CPU u otra lógica, solo DRAM directa. La DRAM requiere capacitores de área eficiente y transistores de muy baja fuga. La fabricación de los condensadores requiere un procesamiento especial. Hacer transistores de baja fuga da como resultado transistores más lentos, lo cual es una buena compensación para la electrónica de lectura DRAM, pero no sería tan bueno para construir una lógica de alto rendimiento. Producir DRAM en un troquel de microcontrolador significaría que tendría que compensar la optimización del proceso de alguna manera. Los arreglos de RAM grandes también tienen más probabilidades de desarrollar fallas simplemente debido a su gran área, lo que reduce el rendimiento y aumenta los costos. Probar arreglos de RAM grandes también requiere mucho tiempo y, por lo tanto, incluir arreglos grandes aumentará los costos de prueba. Además, las economías de escala reducen el costo de los chips RAM separados más que los microcontroladores más especializados.

El consumo de energía es otra razón. Muchas aplicaciones integradas tienen limitaciones de energía y, como resultado, muchos microcontroladores se construyen para que puedan ponerse en un estado de suspensión de muy bajo consumo. Para habilitar la suspensión de muy bajo consumo, se utiliza SRAM debido a su capacidad para mantener su contenido con un consumo de energía extremadamente bajo. La SRAM respaldada por batería puede mantener su estado durante años con una sola batería de botón de 3V. DRAM, por otro lado, no puede mantener su estado por más de una fracción de segundo. Los condensadores son tan pequeños que el puñado de electrones hace un túnel hacia el sustrato o se filtran a través de los transistores de la celda. Para combatir esto, DRAM debe leerse y escribirse continuamente. Como resultado, la DRAM consume significativamente más energía que la SRAM en reposo.

Por otro lado, las celdas de bits de SRAM son mucho más grandes que las celdas de bits de DRAM, por lo que si se requiere mucha memoria, DRAM es generalmente una mejor opción. Esta es la razón por la que es bastante común usar una pequeña cantidad de SRAM (kB a MB) como memoria caché en el chip junto con una mayor cantidad de DRAM fuera del chip (MB a GB).

Se han utilizado algunas técnicas de diseño muy interesantes para aumentar la cantidad de RAM disponible en un sistema integrado a bajo costo. Algunos de estos son paquetes de chips múltiples que contienen matrices separadas para el procesador y la RAM. Otras soluciones implican producir almohadillas en la parte superior del paquete de la CPU para que se pueda apilar un chip de RAM en la parte superior. Esta solución es muy inteligente ya que se pueden soldar diferentes chips de RAM en la parte superior de la CPU según la cantidad de memoria requerida, sin necesidad de enrutamiento adicional a nivel de placa (los buses de memoria son muy anchos y ocupan una gran cantidad de área de placa). Tenga en cuenta que estos sistemas generalmente no se consideran microcontroladores.

De todos modos, muchos sistemas integrados muy pequeños no requieren mucha RAM. Si necesita mucha RAM, entonces probablemente querrá usar un procesador de gama alta que tenga DRAM externa en lugar de SRAM integrada.

¡He visto circuitos integrados de RAM reales con patas y todo pegado/colocado encima de los procesadores (que son paquetes BGA) y enrutado hacia ellos! ¡Las cosas que hacemos por el espacio en la junta! Como señalan los rusos con su metodología de diseño TRIZ, si te quedas sin espacio en X e Y, ve a Z :)
+1 Por la importante distinción entre SRAM y DRAM. La SRAM es más rápida y más eficiente energéticamente, especialmente cuando está inactiva, pero, como observa, es considerablemente más costosa y requiere más espacio.
No creo que SRAM sea el tipo de RAM más caro. Se puede usar una combinación de flip flops y multiplexores como memoria de acceso aleatorio que ofrecerá un mejor rendimiento que SRAM, pero a un costo de silicio mucho mayor. Dichas memorias no suelen ser mucho más grandes que unas 32 palabras, pero dicha memoria puede acomodar lecturas y escrituras simultáneas de formas que una SRAM no puede.
Es cierto que los archivos de registro y los flip-flops completos son más caros que la SRAM, pero no se utilizan para la memoria del sistema de propósito general.
@alex.forencich: No para memoria de propósito general, pero dado que los microcontroladores Scenix podrían ejecutar el conjunto de instrucciones PIC a 100MIPS con una tubería muy corta, no me sorprendería si se implementara toda la RAM (pequeña) en esos chips con chanclas.
He visto un servidor HTTP en funcionamiento en una MCU con 160kB de SRAM y sin DRAM externa. No podía manejar muchas conexiones paralelas, pero funcionó.

La memoria probablemente ocupa la mayor parte del espacio de silicio, y la RAM, que es muy rápida de usar, es volátil y usa energía constantemente para mantener su estado. A menos que necesite mucha RAM, no es útil para muchas otras aplicaciones. Si un diseñador de sistemas integrados necesita más RAM, simplemente obtiene un chip de RAM externo y usa interfaces de memoria periférica que los microcontroladores suelen tener en estos días para una extensión de memoria plug and play muy fácil. Esa es la razón por la que veo que los microcontroladores en general todavía tienen una memoria RAM integrada razonablemente baja, porque el código de aplicación razonable y los escenarios de casos de uso normalmente no necesitan mucho.

Cuando comienza a adaptarse a las arquitecturas más grandes que necesitan ejecutar sistemas operativos completos, entonces la memoria RAM se vuelve extremadamente importante, sin embargo, sale del ámbito de los microcontroladores y se convierte en computadoras integradas más como las que ve en las placas Beaglebone y Raspberri Pi. dias. E incluso en esta etapa, los procesadores son tan complejos y están tan llenos de funciones que no tienen espacio para la cantidad de RAM necesaria para su tarea, por lo que prácticamente se requiere memoria externa para que funcionen.

EDITAR:

Como anécdota personal, recientemente hice un pequeño tablero de control de robot autónomo con el objetivo de usarlo para visión por computadora de baja resolución como detección de movimiento y rastreo y seguimiento de objetos. Elegí un ARM Cortex M3 de bajo conteo de pines para esta tarea y mientras observaba la selección de Atmel de sus procesadores de la serie SAM3, de hecho opté por la RAM más alta que pude encontrar, porque en este caso no quería comprar un IC de RAM externo. debido al espacio de la placa y al no querer la complejidad de un bus de memoria RAM de alta velocidad en la PCB. En este caso para mi aplicación en particular, me hubiera gustado mucho tener la opción de muchos 100's de KB más de RAM si es posible.

buen punto, ni siquiera pensé en el consumo de energía...
"y la RAM es volátil pero muy rápida de usar, usa energía constantemente para mantener su estado" apenas. La lógica CMOS, SRAM incluida, usa muy poca energía cuando no cambia de estado. Tenga en cuenta que la mayoría de los microcontroladores conservan su contenido de RAM incluso cuando se encuentran en modos de apagado de consumo extremadamente bajo.
@ChrisStratton: He visto una serie de microcontroladores, de un par de fabricantes diferentes, con modos que apagan parte de su RAM para ahorrar energía, aunque los que he visto son algo molestos y no permiten que se encienda la RAM. sin un reinicio del sistema. No estoy seguro de cuál es el propósito de esa última restricción; si necesito una gran cantidad de RAM para el almacenamiento temporal durante ciertas operaciones, pero no de otra manera, no veo por qué no debería poder encenderlo cuando sea necesario y apagarlo cuando no, pero no he visto tal rasgo.
@supercat Puede que esté exagerando el impacto de un reinicio del sistema. Trabajé en un microcontrolador (innecesariamente restringido, para un proyecto de pasatiempo) donde cada interrupción provocaba un reinicio del sistema. Solo tenía que verificar el registro de causa de reinicio en el punto de entrada a su programa, no es gran cosa. ¡ El reinicio del sistema no borró todos los registros y la memoria! En realidad, solo fue un reinicio del puntero de instrucciones. Obviamente esto varía según el chip.
@user253751: Algunos sistemas proporcionan un medio para mantener los estados de los pines de E/S a través de un restablecimiento del sistema activado internamente, pero muchos no lo hacen. No conozco ninguno que permita que los periféricos como los UART sigan funcionando a través de un reinicio del sistema. Además, los sistemas varían considerablemente en cuanto a la velocidad con la que pueden emerger de un reinicio del sistema, y ​​algunos borran gran parte de su RAM en cada reinicio, tal vez para evitar la posibilidad de que la RAM se encienda en un estado metaestable que podría interrumpir la CPU si se lee antes de escribir.
@supercat bueno, tienes razón, supuse que "reinicio del sistema" significaba reiniciar el núcleo de la CPU con alguna instrucción o registro, no todo el chip. Supongo que entonces se llamaría reinicio de "CPU" y no reinicio de "sistema", ¿no?
@user253751: En muchos microcontroladores, incluso un reinicio completo del sistema se puede realizar rápidamente, y algunos pueden congelar los estados de los pines de E/S antes de realizar un reinicio del sistema y mantenerlos congelados hasta que el código restablezca el estado de la lógica de respaldo y vuelva a habilitarlos. su conexión con el mundo exterior. No todos los sistemas ofrecen tal flexibilidad, sin embargo, y si no recuerdo mal, los sistemas que conozco que permitieron apagar la RAM no lo hicieron.

Además de los excelentes puntos mencionados en las otras respuestas, otra razón para la RAM limitada es la arquitectura del microcontrolador. Por ejemplo, tome el Microchip PIC10LF320, que tiene solo 448 bytes de memoria de programa (flash) y 64 bytes de RAM. Pero probablemente cueste solo 25 ȼ (o menos) en grandes cantidades. El tamaño limitado de la palabra de instrucción PIC10 (12 bits) le permite direccionar solo 128 bytes de RAM directamente.

Estoy seguro de que hay otros microcontroladores que solo tienen un bus de direcciones de 8 bits, lo que los limita a 256 bytes de RAM.

Pero la mayoría de los microcontroladores de gama media (incluso aquellos con rutas de datos de 8 bits) tienen un bus de direcciones de 16 bits. Una consideración arquitectónica importante para estos chips es si el chip utiliza la arquitectura Harvard o Von Neumann .

La mayoría de los microcontroladores utilizan la arquitectura Harvard, que tiene espacios de direcciones de 16 bits separados para la memoria del programa, la RAM y las direcciones de E/S asignadas a la memoria. Entonces, para estos, el bus de direcciones de 16 bits puede acceder hasta 64K (65,536) bytes de RAM. Todavía hay un límite de 64K establecido por la arquitectura, y si se quiere superar ese límite, se debe usar algún tipo de paginación. Es mucho más común tener paginación para espacio de programa en lugar de espacio de RAM.

Los microcontroladores que utilizan la arquitectura de Von Neumann, como la línea Freescale HCS08, tienen solo un espacio de direcciones dividido entre la memoria del programa, la RAM y la E/S asignada a la memoria. Para tener una cantidad razonable de espacio de programa, esto limita la cantidad de RAM a 4K u 8K normalmente. Una vez más, se puede usar la paginación para aumentar el programa disponible o el espacio RAM.

Sin embargo, debe tener en cuenta que el núcleo PIC es un código tan completamente ineficaz que consumirá una gran cantidad de flash adicional para nada. Y una de las razones por las que no necesita mucha RAM es porque tiene restricciones severas, por ejemplo, en la profundidad de la pila de llamadas.
@Lundin De acuerdo, prácticamente tienes que programar el PIC10 y el PIC12 originales en lenguaje ensamblador, con mucho cuidado . Los dispositivos PIC12F y PIC16F más nuevos ahora tienen una pila de hardware de 16 niveles y 14 instrucciones nuevas. algunos se agregaron solo para C, por lo que son mucho más útiles.
@Lundin: Pensé que los chips PIC con longitudes de instrucción de 12 y 14 bits eran bastante decentes para la densidad del código. El PIC18F es donde la densidad del código realmente tendía a caer cuando se usaba el compilador HiTech debido a la cantidad excesiva de cambios de banco que normalmente se requería.

Habiendo trabajado con microcontroladores y sistemas pequeños durante un buen tiempo, me gustaría señalar que muy a menudo se necesita muy poca memoria RAM. Recuerde que aunque una MCU puede ser capaz de lograr mucho, la tendencia en estos días es usar muchas más MCU que antes, y usar más de ellas para distribuir muchas tareas en sistemas más grandes. Esto se combina con el hecho de que, a diferencia de los sistemas de desarrollo inflados necesarios para programar en Windows, el desarrollo de MCU a menudo usa compiladores muy bien optimizados, la mayoría de las veces con código fuente C y C++ muy eficiente, a veces con poca o ninguna sobrecarga del sistema operativo. Si bien es difícil escribir un programa de Windows para mostrar su nombre en cualquier dispositivo sin consumir al menos cientos de kilobytes, incluidos los recursos del sistema operativo,

Por supuesto, hay problemas de costo y espacio como han señalado otros. Pero la historia en cuestión aquí es que lo que los recién llegados consideran una pequeña cantidad de RAM en estos días es realmente un poco más que nunca, y mientras tanto, los componentes y dispositivos con los que la MCU necesitará interactuar son cada vez más inteligentes. Honestamente, mi mayor uso de RAM en muchas aplicaciones de MCU últimamente ha sido para búferes de comunicación controlados por interrupciones, para liberar la MCU para otras tareas sin temor a perder datos. Pero créalo o no, para la lógica ordinaria y la funcionalidad computacional, las MCU se adaptan bastante bien a sus limitados recursos integrados de RAM y flash, y realmente puede hacer mucho con muy poco.

Tenga en cuenta que alguna vez, los videojuegos famosos con gráficos toscos pero una lógica de juego compleja como "PAC Man" y "Space Invaders" generalmente se realizaban dentro de 8K ROMS, en máquinas que apenas tenían 8 o 16 KB de RAM.

¿Qué pasa con las tarjetas SD? ¿Las tarjetas SDHC no requieren un búfer de 256 o 512 bytes (las tarjetas SD estándar/antiguas ya no se fabrican)?
La versión de Pac Man para Atari 2600 Video Computer System era 4K ROM y el VCS en sí tenía 128 bytes de RAM. Sin embargo, muchas máquinas recreativas tenían una parte bastante decente de ROM y RAM, en comparación con las computadoras domésticas de la época. Creo que Defender, por ejemplo, tenía 32K o ROM y 64K de RAM, aunque 32K de RAM eran de "solo escritura" desde el punto de vista de la CPU (el procesador colocaría datos allí que el hardware de la pantalla sincronizaría con el monitor) .
@PeterMortensen Muchas tarjetas SD tienen una CPU integrada de algún tipo para administrar el flash. Algunas tarjetas tienen un núcleo ARM completo de 32 bits que probablemente tenga 16 o 32 K de RAM adjuntos.
@alex.forencich: Sí, pero la interfaz SPI para operar una tarjeta SDHC SD, ¿no requiere un búfer en el lado del host (sistema integrado/microcontrolador), en contraste con las tarjetas más antiguas? Es decir, ¿ya no es posible el direccionamiento de bits para las tarjetas más nuevas (SDHC)? ¿O solo depende del sistema de archivos (todavía es posible el direccionamiento de bits)? ¿Las tarjetas más nuevas no requieren transferencias en bloque (y por lo tanto requieren un búfer de 256 o 512 bytes)?
Sí, 512B, si mal no recuerdo. Simplemente podría escribir un controlador de tarjeta SD ineficiente, para descartar los primeros X bytes de datos -> no se necesita un búfer "grande".

Además de los excelentes puntos sobre el costo y la fabricación, sorprendentemente hay poca demanda de una gran cantidad de RAM en el chip.

A menudo trabajo con microcontroladores con flash en decenas de kB (16kB, 32kB) y RAM en el rango de kB (1kB, 2kB). Muy a menudo me quedo sin flash y casi nunca me quedo sin RAM. En la mayoría de mis proyectos, me acerco bastante al límite de flash, pero normalmente necesito mucho menos del 20 % de RAM.

La mayoría de los microcontroladores muy pequeños tienen dos tipos diferentes de funciones:

  • regulación y control: tienen que controlar una pieza de maquinaria. Incluso en el caso de un algoritmo de controlador complicado, que puede ocupar decenas de kB de espacio de código, se requiere muy poca RAM. Usted tiene el control de un proceso físico y tiene variables que contienen algunas unidades físicas y tal vez algunas variables como contadores de bucle. No hay necesidad de más.

  • procesamiento de datos: en el raro caso de que necesite almacenar una gran cantidad de datos al mismo tiempo, puede usar RAM externa. Prácticamente todos los microcontroladores modernos tienen soporte nativo para ello. Si necesita un programa simple que use mucha memoria, será más barato y más pequeño usar un microcontrolador pequeño y RAM externa, en lugar de un microcontrolador de alto nivel. Nadie produce controladores con pocos puertos, flash pequeño y RAM grande, porque hay muy poca demanda de ellos.

Todas las razones ya mencionadas son, por supuesto, técnicamente válidas y precisas. Sin embargo, no olvide que la electrónica es un negocio y las MCU son uno de los nichos de mercado más competitivos dentro de la industria electrónica.

Me atrevo a decir que las razones reales para vincular el precio de una MCU con la cantidad de SRAM integrada son principalmente razones de marketing, no razones de costo:

  • En la mayoría de los diseños, la frecuencia de reloj máxima alcanzable no es el factor limitante. En cambio, la cantidad de SRAM disponible es. No me malinterpreten, la frecuencia de la CPU es muy importante, sin embargo, dentro de un determinado segmento de la familia de MCU , generalmente no se le ofrecen diferentes modelos de dispositivos a diferentes precios en función de la frecuencia máxima de la CPU. Además, el almacenamiento de programas Flash es el otro factor limitante clave; sin embargo, no me centraré demasiado en Flash (la pregunta está dirigida específicamente a SRAM).

  • La cantidad de SRAM disponible está directamente relacionada con el nivel de complejidad que podrá integrar en su MCU, ya sea con bibliotecas de terceros o con su propio código implementado. Por lo tanto, es una métrica "natural" para segmentar en base a sus precios de MCU. Es comprensible que un cliente técnico acepte que una MCU capaz de realizar tareas más complejas (más SRAM, más almacenamiento Flash) debería costar más. El precio, aquí, es un reflejo del valor subyacente (capacidades de entrega) de la MCU. El almacenamiento flash generalmente se ofrece en una cantidad proporcional a la SRAM.

  • Por el contrario, si toma el mercado de CPU de escritorio y móviles, por lo general no puede obtener una MCU/CPU específica con muchos tamaños de SRAM diferentes. En cambio, el esquema de precios generalmente se basa en las capacidades de ejecución/rendimiento de la MCU/CPU: frecuencia, número de núcleos, eficiencia energética...

Creo que esto es probablemente exacto, pero ¿hay evidencia? ¿Como borrar rastros para vender el chip a como chip b?
Uhm... pensamiento interesante. No tengo evidencia de tales prácticas. Sin embargo, trae una pregunta interesante sobre los costos de fabricación subyacentes. ¿Sería más costoso el desperdicio de bienes inmuebles del chip de silicio (oblea) en caso de que hubiera un chip de SRAM de mayor tamaño tachado a un tamaño de SRAM menor? ¿O los mayores costos de fabricación e inventario asociados con la fabricación no de un solo dispositivo sino de dos? Me temo que toda la industria electrónica es muy exigente a la hora de hablar abiertamente de sus costes. Puede que nunca lo sepamos.
Como evidencia: el MT6250 es un chip multi-die, que se usa para teléfonos con funciones de un solo chip, cuesta menos de $ 2 en volumen y es mucho más complejo que un mcu, e incluye un chip sram de 8 MB. Sería trivial para construir, usando similar tecnología un mcu rico en SRAM.
Esta sería una buena respuesta a "¿por qué el precio de la MCU está vinculado a la cantidad de SRAM integrada?". Pero no parece responder a la pregunta original. ¿Por qué hay tan pocos microcontroladores disponibles con más de 512 KB de SRAM en chip, a cualquier precio? ¿Por qué hay tantos microcontroladores con tamaños de SRAM "extraños" sin potencia de 2, cuando los fabricantes de chips SRAM dedicados parecen pensar que los costos de inventario reducidos hacen que valga la pena producir solo chips SRAM dedicados en tamaños de potencia de 2?
@davidcary: Muchos microcontroladores tienen múltiples regiones de RAM a las que se puede acceder de manera simultánea e independiente (por ejemplo, por la CPU y por DMA). Hacer que estas regiones tengan el mismo tamaño no ofrecería una ventaja de diseño particular en comparación con hacerlas diferentes, y para muchas aplicaciones, la cantidad de RAM a la que se accedería principalmente a través de medios como DMA sería diferente de la cantidad a la que se accedería solo a través de la CPU.

Entonces, primero debe considerar que 16 KB o 32 KB son una cantidad enorme de memoria y la mayoría de los microcontroladores que se venden hoy en día no tienen una cantidad tan grande de RAM.

Muchos programas de microcontroladores necesitan 10 o 50 bytes de memoria. Incluso las cosas más complejas necesitan principalmente cientos de bytes.

Básicamente, hay tres casos de uso en los que necesita RAM en el orden de KBytes: a) cuando su microcontrolador hace gráficos b) cuando usa el microcontrolador para grandes cálculos arbitrarios c) cuando interactúa con interfaces de PC

En segundo lugar, tenga en cuenta que si habla de RAM de microcontrolador, habla de caché de nivel 0 / nivel 1. Si considera que un Intel Haswell tiene "solo" 64 KByte de caché de nivel 1, reconsiderará el tamaño de RAM de un microcontrolador.

En tercer lugar, puede conectar cualquier cantidad de RAM externa a un microcontrolador, especialmente incluso más de lo que puede conectar a una CPU.

Personalmente estoy desarrollando muchas aplicaciones de microcontroladores y nunca necesité 1 KB de memoria ni más. Tampoco usé nunca RAM externa.

Las cosas son diferentes si llegamos a ROM (hoy Flash), ya que su programa y datos están en la ROM. Realmente hay muchas aplicaciones en las que adjunta una ROM externa a su microcontrolador, porque tiene muchos datos.

Examinemos un ejemplo: analicemos una aplicación de microcontrolador y tomemos un reproductor de MP3 portátil con pantalla y 4 Gigabytes de Flash.

Para esta aplicación necesitas quizás 1 KB de RAM. Eso es suficiente para hacer el trabajo. Sin embargo, podría usar un poco más de RAM para búferes más grandes para acelerar la escritura de USB a Flash.

Ahora ve la diferencia: una PC típica contiene todos los programas y datos en la RAM. Por lo tanto, necesita mucha RAM. Para el microcontrolador, todo esto está en Flash/ROM.

Subestimas el uso de RAM en muchas aplicaciones. No por una gran cantidad, pero tal vez por un factor de 10 a 100 dependiendo de la instancia. Los reproductores de MP3 tienen que hacer procesamiento de señal digital.
Me gustaría saber por qué alguno de ustedes está diciendo estas cosas. Qué tipos de comandos C requieren RAM. En lugar de decir "estas aplicaciones requieren más RAM", preferiría "estas operaciones requieren más RAM, porque..."

Al diseñar una MCU, debe enfrentar condiciones que no son tan importantes en las PC.

  1. Durabilidad

    Para elegir los componentes, no necesariamente se eligen las mejores y/o las de mayor rendimiento, sino aquellas que han demostrado funcionar correctamente después de varios años de uso, estarán disponibles durante varios años y son capaces de funcionar las 24 horas del día, los 7 días de la semana. años. Debido a esta circunstancia, si un controlador está en el mercado durante varios años, haciendo bien su trabajo, parece tener poca memoria RAM, en comparación con el estándar de PC actual. Pero de todos modos, hace bien su trabajo, y no debería haber necesidad de reemplazo, si la ingeniería fue buena.

  2. Espacio

    Las unidades de microprocesador son literalmente micros. Tienes que reducir el espacio necesario al mínimo absoluto. Por supuesto, puede obtener 256 MB en el mismo espacio que los chips de 64 KB de 10 años. Aquí es donde el #1 viene al punto.

  3. Precio

    No solo el precio de compra, sino también el consumo de energía. No desea diseñar una MCU que tenga control sobre un sistema de entrada, que necesita 1000 W, si su rival en el negocio tiene una que solo necesita 25 W. Y, por supuesto, el precio de compra más barato (con la misma calidad) es siempre mejor.

¡Ese es un microprocesador de muy alta potencia!
Supongo que una MCU de 1kW no permanecería en estado sólido por mucho tiempo.
Los tres puntos son extremadamente importantes en el diseño de PC hoy en día.
@KyranF: Sí, divida ambos números por 100. Pero en todo caso, subestimó la diferencia de potencia relativa entre el procesador de alto rendimiento y los microcontroladores de baja potencia para aplicaciones de batería.