40 votos

¿Por qué los microcontroladores tienen tan poca RAM?

Quizá 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, mayor facilidad de depuración, núcleos de 32 bits, etc.

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

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

¿O es que generalmente no se requiere?

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

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

47voto

silverbolt Puntos 18

Hay varias razones para ello.

En primer lugar, la memoria ocupa mucha superficie de silicio. Esto significa que aumentar la cantidad de RAM incrementa directamente el área de silicio del chip y, por tanto, el coste. Una mayor superficie de silicio tiene un efecto doble en el precio: los chips más grandes significan menos chips por oblea, especialmente en el borde, y los chips más grandes significan que cada chip tiene más probabilidades de tener un defecto.

La segunda es la cuestión del proceso. Las matrices de RAM deben optimizarse de forma diferente 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 se trata de CPUs u otro tipo de lógica, sino de DRAM. La DRAM requiere condensadores de área eficiente y transistores de muy baja fuga. La fabricación de los condensadores requiere un proceso especial. La fabricación de transistores de baja fuga da lugar a transistores más lentos, lo cual es una buena compensación para la electrónica de lectura de la DRAM, pero no sería tan buena para construir una lógica de alto rendimiento. Producir DRAM en una matriz de microcontrolador significaría que habría que compensar la optimización del proceso de alguna manera. Las matrices de RAM de gran tamaño también son más propensas a desarrollar fallos, simplemente debido a su gran superficie, lo que disminuye el rendimiento y aumenta los costes. Las pruebas de las grandes matrices de RAM también requieren mucho tiempo, por lo que la inclusión de grandes matrices aumentará los costes de las pruebas. Además, las economías de escala reducen el coste de los chips de RAM por separado más que el de los microcontroladores más especializados.

El consumo de energía es otra razón. Muchas aplicaciones embebidas tienen restricciones de energía, por lo que muchos microcontroladores se construyen de forma que puedan pasar a un estado de reposo de muy bajo consumo. Para permitir un estado de reposo de muy bajo consumo, se utiliza la 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 pila de botón de 3V. La DRAM, en cambio, no puede mantener su estado durante 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 filtra a través de los transistores de la celda. Para evitarlo, la DRAM debe leerse y escribirse continuamente. Por ello, la DRAM consume mucha más energía que la SRAM en reposo.

Por otro lado, las celdas de bits de la SRAM son mucho más grandes que las de la DRAM, por lo que si se necesita mucha memoria, la DRAM suele ser una mejor opción. Por ello, es bastante habitual utilizar una pequeña cantidad de SRAM (de kB a MB) como memoria caché en el chip, junto con una mayor cantidad de DRAM fuera del chip (de 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 coste. Algunas de ellas son paquetes de varios chips que contienen matrices separadas para el procesador y la RAM. Otras soluciones consisten en producir almohadillas en la parte superior del paquete de la CPU para poder apilar un chip de RAM encima. Esta solución es muy inteligente, ya que se pueden soldar diferentes chips de RAM encima de la CPU en función de la cantidad de memoria que se necesite, sin necesidad de un enrutamiento adicional a nivel de placa (los buses de memoria son muy amplios y ocupan mucha superficie de la placa). Tenga en cuenta que estos sistemas no suelen considerarse microcontroladores.

De todos modos, muchos sistemas embebidos muy pequeños no necesitan mucha RAM. Si necesitas mucha RAM, probablemente quieras utilizar un procesador de gama alta que tenga DRAM externa en lugar de SRAM integrada.

15voto

Lee Richardson Puntos 121

La memoria ocupa probablemente el mayor espacio de silicio, y la RAM, al ser muy rápida de usar, es volátil y consume energía constantemente para mantener su estado. A menos que necesites mucha RAM, no es útil para muchos otras aplicaciones. Si un diseñador de sistemas embebidos necesita más RAM, sólo tiene que conseguir un chip de RAM externo y utilizar las interfaces de memoria periférica que los microcontroladores suelen tener hoy en día para ampliar la memoria de forma muy sencilla. Esta es la razón por la que los microcontroladores, en general, siguen teniendo una cantidad razonablemente baja de RAM a bordo, porque el código de aplicación razonable y los escenarios de uso normalmente no necesitan mucha.

Cuando se empieza a llegar a las arquitecturas más grandes que necesitan ejecutar sistemas operativos completos, entonces la RAM se vuelve extremadamente importante, sin embargo, esto sale del ámbito de los microcontroladores y entra en los ordenadores integrados más como los que se ven en las placas Beaglebone y Raspberri Pi en estos días. E incluso en esta etapa, los procesadores son tan complejos y están tan llenos de características que no tienen espacio para la cantidad de RAM necesaria para su tarea, por lo que la memoria externa es bastante necesaria para que funcionen en absoluto.

EDITAR:

Como anécdota personal, hace poco hice una pequeña placa de control de un robot autónomo con el objetivo de utilizarla para la visión por ordenador de baja resolución, como la detección de movimiento y el seguimiento de objetos. Escogí un ARM Cortex M3 de bajo número de pines para esta tarea y mientras miraba la selección de Atmel de sus procesadores de la serie SAM3, efectivamente me decanté 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 no queriendo la complejidad de un bus de memoria RAM de alta velocidad en la PCB. En este caso para mi aplicación particular, me hubiera gustado mucho tener la opción de muchos 100's de KB más de RAM si fuera posible. Terminé teniendo sólo 48KB SRAM pero en futuros diseños conseguiré un paquete de mayor número de pines y haré uso del periférico de captura de datos en paralelo para encaminar los datos de los píxeles de la cámara de 8 bits directamente a un chip de RAM externo.

14voto

Matt McMinn Puntos 6067

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

Estoy seguro de que hay otros microcontroladores por ahí que sólo tienen un bus de direcciones de 8 bits, lo que les limita a 256 bytes de RAM.

Pero la mayoría de los microcontroladores de gama media (incluso los que tienen 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 Harvard o Von Neumann arquitectura.

La mayoría de los microcontroladores utilizan la arquitectura Harvard, que tiene espacios de direcciones de 16 bits separados para la memoria de programa, la RAM y las direcciones de E/S mapeadas en memoria. Así que 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 puesto por la arquitectura, y si uno quiere ir más allá de eso se debe usar algún tipo de paginación. Es mucho más común tener paginación para el espacio de programa que para el espacio de RAM.

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

7voto

Masi Puntos 22232

Después de haber trabajado con microcontroladores y pequeños sistemas durante un buen tiempo, me gustaría señalar que a menudo se necesita muy poca RAM. Recuerda que, aunque una MCU puede ser capaz de hacer mucho, la tendencia hoy en día es utilizar muchas más MCUs que antes, y utilizar 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 abultados sistemas de desarrollo necesarios para programar en Windows, el desarrollo de MCU suele utilizar compiladores muy bien optimizados, a menudo con código fuente C y C++ muy eficiente, a veces con poca o ninguna sobrecarga del sistema operativo. Mientras que difícilmente se podría 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, normalmente se puede lograr lo mismo en una pantalla LCD con una MCU en mucho menos de 256 bytes, ¡incluyendo la biblioteca y el soporte de bajo nivel de la BIOS!

Sin duda, hay problemas de costes y de espacio, como han señalado otros. Pero la historia que nos ocupa es que lo que hoy en día se considera una pequeña cantidad de RAM por parte de los recién llegados es en realidad bastante más que antes, y todo ello mientras los componentes y dispositivos con los que el MCU tendrá que interactuar son cada vez más inteligentes. Honestamente, mi mayor uso de la RAM en muchas aplicaciones del MCU últimamente ha sido para los buffers de comunicación controlados por interrupciones, para liberar al MCU para otras tareas sin temor a perder datos. Pero lo creas o no, para la lógica ordinaria y la funcionalidad computacional, los MCUs están bastante bien adaptados a sus limitados recursos de RAM y flash incorporados, y realmente puedes hacer un lote con muy poco.

Hay que tener en cuenta que, hace tiempo, los famosos videojuegos con gráficos rudimentarios pero con una lógica de juego compleja, como "PAC Man" y "Space Invaders", se hacían normalmente en ROMs de 8K, en máquinas que apenas tenían 8 o 16 KB de RAM.

4voto

avinash Puntos 26

Además de los excelentes puntos sobre el coste y la fabricación, es sorprendente la poca demanda de mucha RAM en el chip.

A menudo trabajo con microcontroladores con flash de decenas de kB (16kB, 32kB) y RAMs del orden de los 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 la flash, pero suelo necesitar mucho menos del 20% de la RAM.

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

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

  • procesamiento de datos: en el raro caso de que necesites almacenar una gran cantidad de datos al mismo tiempo, puedes utilizar una memoria RAM externa. Casi todos los microcontroladores modernos tienen soporte nativo para ello. Si necesitas un programa sencillo que utilice mucha memoria, será más barato y más pequeño utilizar un microcontrolador pequeño y una RAM externa, en lugar de un microcontrolador de alto nivel. Nadie produce controladores con pocos puertos, poca flash y mucha RAM, porque hay muy poca demanda de ellos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X