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's de KB (16/32 KB).
No parece que pueda ser un problema 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?
Al mirar una matriz de piezas en un proveedor de Internet popular, veo un Cortex M4 con 256 KB por menos de US $ 8, y luego por unos pocos dólares más, puede encontrar algunos más que no tienen ROM, pero parece bastante escaso ...
No necesito exactamente un microcontrolador con un MB de almacenamiento volátil, pero parece que alguien podría ...
fuente
it seems like somebody might
es la trampa aquí, la mayoría de la gente no. No vas a transmitir Netflix exactamente en ese chip, y el 64K suele ser más que suficiente para todo lo que necesitas hacer con un microcontrolador . Si desea ir más alto, obtenga una composición completa, por ejemplo, una frambuesa.Respuestas:
Hay varias razones para esto.
En primer lugar, la memoria ocupa mucho á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: las virutas más grandes significan menos virutas por oblea, especialmente alrededor del borde, y las virutas más grandes significan que cada viruta tiene más probabilidades de tener un defecto.
El segundo es el tema del proceso. Las matrices de RAM deben optimizarse de manera 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 límites de semiconductores que están más o menos dedicados a producir DRAM. No CPUs u otra lógica, solo DRAM. DRAM requiere condensadores de área eficiente y transistores de muy baja fuga. Hacer los condensadores requiere un procesamiento especial. La fabricación de 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 buena para construir una lógica de alto rendimiento. La producción de DRAM en un troquel de microcontrolador significaría que de alguna manera necesitaría cambiar la optimización del proceso. Las matrices de RAM grandes también tienen más probabilidades de desarrollar fallas simplemente debido a su gran área, disminuyendo el rendimiento y aumentando los costos. Probar grandes matrices de RAM también lleva mucho tiempo, por lo que incluir grandes matrices aumentará los costos de las pruebas. 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 están construidos para que puedan ponerse en un estado de reposo de muy baja potencia. Para habilitar la suspensión de muy baja potencia, SRAM se utiliza 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 sin 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 se canaliza hacia el sustrato o se filtra a través de los transistores de la celda. Para combatir esto, la DRAM debe leerse y escribirse continuamente. Como resultado, DRAM consume significativamente más energía que SRAM en inactivo.
Por otro lado, las celdas de bits SRAM son mucho más grandes que las celdas de bits DRAM, por lo que si se requiere mucha memoria, DRAM generalmente es una mejor opción. Es por esto que es bastante común usar una pequeña cantidad de SRAM (kB a MB) como memoria caché en chip junto con una mayor cantidad de DRAM fuera de 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 múltiples chips que contienen troqueles separados para el procesador y la RAM. Otras soluciones implican la producción de pads en la parte superior del paquete de la CPU para que se pueda apilar un chip 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 dependiendo de la cantidad de memoria requerida, sin necesidad de enrutamiento adicional a nivel de placa (los buses de memoria son muy amplios y ocupan mucho área de placa). Tenga en cuenta que estos sistemas generalmente no se consideran microcontroladores.
Muchos sistemas integrados muy pequeños no requieren mucha RAM de todos modos. Si necesita una gran cantidad de RAM, es probable que desee utilizar un procesador de gama alta que tenga DRAM externa en lugar de SRAM integrada.
fuente
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 embebidos necesita más RAM, simplemente obtiene un chip 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 por qué los microcontroladores en general aún tienen una RAM interna baja razonable, porque el código de aplicación razonable y los escenarios de casos de uso normalmente no necesitan mucho.
Cuando comienzas a llegar a las arquitecturas más grandes que necesitan ejecutarse por completo en los sistemas operativos, entonces la RAM se vuelve extremadamente importante, sin embargo, esto sale del ámbito de los microcontroladores y en las computadoras integradas más como las que ves en las placas Beaglebone y Raspberri Pi. dias. 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 puedan operar.
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 seguimiento y seguimiento de objetos. Elegí un ARM Cortex M3 de bajo recuento de clavijas para esta tarea y mientras miraba la selección de Atmel de sus procesadores de la serie SAM3, de hecho, busqué la RAM más alta que pude encontrar, porque en este caso no quería comprar un RAM IC externo debido al espacio de la placa y 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 tener la opción de muchos cientos de KB más de RAM si es posible.
fuente
Además de los excelentes puntos presentados 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 solo cuesta 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, limitándolos a 256 bytes de RAM.
Pero la mayoría de los microcontroladores de rango medio (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 usa 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 a hasta 64K (65,536) bytes de RAM. Todavía hay un límite de 64 K establecido por la arquitectura, y si uno quiere ir más allá, se debe usar algún tipo de paginación. Es mucho más común tener paginación para el espacio del programa en lugar de espacio RAM.
Los microcontroladores que utilizan la arquitectura Von Neumann, como la línea Freescale HCS08, tienen solo un espacio de direcciones dividido entre la memoria del programa, la RAM y las E / S asignadas a la memoria. Para tener una cantidad razonable de espacio en el programa, esto limita la cantidad de RAM a típicamente 4K u 8K. Una vez más, uno puede usar la paginación para aumentar el programa disponible o el espacio RAM.
fuente
Después de haber trabajado con microcontroladores y sistemas pequeños durante un buen tiempo, me gustaría señalar que a menudo se necesita muy poca RAM. Recuerde que aunque una MCU sea capaz de lograr mucho, la tendencia en estos días es usar muchas más MCU que nunca 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 hinchados necesarios para programar en Windows, el desarrollo de MCU a menudo utiliza 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. Si bien apenas 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,
Sin duda, hay problemas de costo y espacio como otros han señalado. Pero la historia en este momento es que lo que los recién llegados consideran una pequeña cantidad de RAM en estos días es realmente mucho más que nunca antes, 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 MCU últimamente ha sido para memorias intermedias de comunicación controladas por interrupción, para liberar el 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 crudos pero lógica de juego compleja como "PAC Man" y "Space Invaders" generalmente se realizaban en ROM de 8K, en máquinas que apenas tenían 8 o 16 KB de RAM!
fuente
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 generalmente necesito mucho menos del 20% de la RAM.
La mayoría de los microcontroladores muy pequeños tienen dos tipos diferentes de roles:
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. Casi 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.
fuente
Todas las razones ya mencionadas son, por supuesto, técnicamente válidas y precisas. Sin embargo, no olvides 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 a la cantidad de SRAM incorporada 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 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 del programa Flash es el otro factor limitante clave, sin embargo, no me enfocaré 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á incrustar en su MCU, ya sea con bibliotecas de terceros o con su propio código implementado. Por lo tanto, es una medida "natural" segmentar en base a los precios de su 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, no puede obtener una MCU / CPU específica con muchos tamaños diferentes de SRAM. 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 ...
fuente
Entonces, primero debe considerar que 16 KB o 32 KB son una enorme cantidad de memoria y la mayoría de los microcontroladores vendidos hoy en día no tienen cantidades tan grandes de RAM.
Muchos programas de microcontroladores necesitan 10 o 50 bytes de memoria. Incluso las cosas más complejas se necesitan principalmente en los 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. También nunca usé RAM externa.
Las cosas son diferentes si llegamos a ROM (hoy Flash), ya que su programa y sus datos están en la ROM. Realmente hay muchas aplicaciones en las que conecta 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 más RAM para memorias intermedias 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.
fuente
Al diseñar una MCU, debe enfrentar condiciones que no son tan importantes en las PC.
Durabilidad
Para elegir los componentes, no es necesario que tome las mejores y / o las piezas de mayor rendimiento, pero las 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 24/7 años. Debido a esta circunstancia, si un controlador está en el mercado durante varios años, haciendo bien su trabajo, parece tener poca RAM, en comparación con el estándar de PC actual. Pero de todos modos, hace su trabajo bien, y no debería haber necesidad de reemplazo, si la ingeniería estaba bien.
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 # 1 llega al punto.
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 necesite 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) siempre mejor.
fuente