¿Es posible utilizar módulos DRAM de varios gigabytes con un microcontrolador?

Tengo dos módulos de RAM de 2 GB sobrantes que quité de mi MacBook Pro cuando realicé una actualización. Me preguntaba si se podían usar con, por ejemplo, un Arduino. Sería demasiado principiante para tratar de hacer esto ahora de todos modos, pero tengo curiosidad si es posible, o si eso es demasiada memoria para que un microcontrolador la aborde.

probablemente podría manipular algo para hacerlo, pero el circuito de interfaz probablemente sería la parte más compleja del sistema resultante, y habría poco valor práctico en el resultado.
¡Gracias por las buenas respuestas! Muy interesante. Poco a poco estoy aprendiendo cómo encajan las piezas. Gracias.
Las plataformas ARM9 y ARM11 albergan controladores DDR2, pero no estamos hablando de microcontroladores sino de microprocesadores. FPGA también puede interactuar con él. Toda la tarea es bastante compleja. Un arduino es solo de 8 bits, por lo que simplemente no puede hacer el trabajo de direccionamiento masivo en la mano.
Lo que dijo Hans: cualquier micro lo suficientemente potente como para hacer uso de ese tipo de RAM tendrá un controlador DDR incorporado. algo... módulos más antiguos, cosas de impresoras láser antiguas, etc. podrían ser más utilizables.

Respuestas (7)

Voy a decir que no: la incompatibilidad más básica es que hay demasiados pines en esos módulos, incluso para poder conectarlos físicamente a un Arduino. Lo mismo ocurre con microcontroladores pequeños similares. Un ARM Cortex M3 se está acercando, pero pocos de ellos tienen el bus externo necesario para conectar la RAM de esa manera (creo).

Pero seguiré el juego e iré más allá. Suponiendo que pueda conectar el chip al Arduino de alguna manera, otro problema básico de compatibilidad eléctrica son los voltajes requeridos. Creo que estos módulos de RAM usan algo extraño como 2.2V, que no está presente en una placa Arduino vainilla o, en realidad, en cualquier otro microcontrolador básico para aficionados.

Suponiendo que se solucionó, el chip funcionaría como cualquier otra memoria externa del Arduino. Esto realmente se hace todo el tiempo: la gente agrega EEPROM externa para almacenar constantes importantes o tarjetas SD/MMC para el almacenamiento de registros del servidor web y demás. Por supuesto, dentro de este contexto, los módulos RAM no presentan ningún beneficio real para Arduino. Su característica principal es la velocidad y el Arduino (y sí, otros microcontroladores aficionados) normalmente no superan los 25 MHz en la velocidad del reloj. Son demasiado lentos para preocuparse por la velocidad. Y el tamaño del almacenamiento no es un gran problema, ya que la interfaz con una tarjeta SD/MMC es claramente más fácil y proporciona mucho espacio para jugar.

Entonces, incluso si fuera posible, realmente no sería aconsejable.

Tengo que confesar que he pensado en interconectar alguna vieja DIP DRAM con mi arduino, solo para larfs. (pero, eso sería factible, incluso en una placa de prueba, con chatarra de la era 4164). por lo demás, estoy totalmente de acuerdo.
Esa es una respuesta de calidad, utilizando suposiciones paso a paso y llegando a la condición final. ¡Buen trabajo!
No pase por alto los problemas de actualización. Otra razón por la que el flash "basado en comandos" es probablemente una mejor combinación cuando el mouse de un controlador está tratando de conducir un camión mack de una memoria.
Puse un comentario arriba, con la pregunta, pero creo que realmente debería ponerlo aquí. Muchas gracias por la respuesta. Stack Exchange es un excelente recurso, y todo se debe a que las personas se toman el tiempo para brindar respuestas de calidad.

Diría que no, no sin colocar un fpga de buen tamaño (recuento de pines) en el medio, el fpga habla con la memoria y el microcontrolador habla con el fpga usando un esquema de paginación.

Mi pensamiento también. Y haga que el FPGA sea un controlador de actualización transparente. Pero realmente... ¿no sería más sencillo y económico emular un arduino en software en un pequeño sistema ARM?
Por divertido o educativo que pueda ser DDR no es simple, y no es algo para principiantes. Encuentre otra computadora portátil o placa base para colocar esta memoria y aprenda sobre DDR usando, por ejemplo, una placa de evaluación fpga que tenga un poco en el costado o tal vez una beagleboard o algo así. El primer problema es el conteo de pines, el segundo son las señales, el tiempo, etc. Es difícil hacer que funcione cuando haces tu propia placa de circuito impreso. No es como una interfaz LCD o algo por el estilo que se puede conectar a un microcontrolador.

Posiblemente podría usar un sistema de pestillos para permitir que algo como un arduino genere 32 bits de dirección, y probablemente podría idear algún esquema para generar los ciclos de actualización, pero casi no tendría sentido hacerlo, excepto como un técnico ejercicio.

El circuito de interfaz probablemente sería la parte más compleja del sistema resultante, y el resultado tendría poco valor práctico; el arduino no podría ejecutar código fuera de la RAM, el almacenamiento sería volátil y probablemente también consumiría más energía que el arduino. Si desea almacenar datos, una EEPROM SPI es probablemente una solución mucho mejor.

¿Puede un AVR ejecutar código desde la RAM en cualquier circunstancia?
@Nick T: no estaba sugiriendo indirectamente que haya tales escenarios en los que podría; Directamente decía que en caso de que alguien estuviera pensando en conectarse a este tipo de RAM, sería un error pensar que podría usarla así.
Serial Flash o SRAM suelen ser mucho más rápidos que EEPROM. Si necesita muchos datos no volátiles (el caso de uso del código remoto), Flash es probablemente la mejor opción. Para búferes grandes, use SRAM; es mucho más rápido que EEPROM. Si tiene algunos bits de configuración que deben alternarse de forma independiente, ese es realmente el único nicho que queda para las EEPROM.
@reemrevnivek: buen punto, hago +1 en tu comentario. Si mantiene unas pocas docenas de ajustes de configuración, EEPROM. Si desea conservar fotogramas de vídeo, SRAM.

Si alguna vez mira las hojas de datos del chip DRAM, hay una velocidad de reloj mínima de algo así como 50MHz+ para DDR2. Entonces no, no podrá interactuar con ellos con un microcontrolador (a menos que tenga soporte de hardware incorporado).

¡Sin mencionar que también necesita actualizar la memoria con bastante frecuencia! ¡El Arduino estaría ocupado pasando todo su tiempo manejando las líneas de control de memoria!

La respuesta corta es no.

El Arduino no puede controlar la interfaz de memoria DDR o DDR2. Podría hacer un controlador DDR/DDR2 con una interfaz SPI con un FPGA, pero eso es una tarea importante.

Necesitaría un controlador de bajo voltaje (SSTL) y alguna forma de controlar alrededor de 100 canales (cada diferencial, por lo tanto, alrededor de 200 pines. Piense en BGA).

La mayoría de las DRAM deben actualizarse al menos a 1 kHz y probablemente más para tener una tasa de error de bit baja. Esto formará una tarea principal en segundo plano y consumirá la mayor parte del poder de procesamiento del Arduino, si es posible actualizar la memoria a esa velocidad.

Sin embargo, lo que puede ver es que con algunos microcontroladores, por ejemplo, PIC24F/H/dsPIC33F, admiten una interfaz de bus maestro paralelo, que permite acceder a algunos tipos de SRAM paralelos. Incluso hay soporte con C, ya que esta memoria externa se puede asignar a varias variables de código e incluso bloques que combinan memorias internas y externas. La memoria externa requiere que escriba algún código PMB. Sin embargo, solo podrá abordar hasta aproximadamente 1 MB con esto.

AFAIK DDR usa SSTL no LVDS
@mazurnification, Sí, tienes razón (mi error). Aún así, una pesadilla para controlar desde un Arduino.
¡Entonces corrige tu respuesta!
@reemrevnivek, está bien. Corregido. Sin embargo, simplemente estaba señalando que no era práctico. No importa qué formato de señalización se utilice.

No, no sin una interfaz de paginación de algún tipo entre la memoria y la MCU. De hecho, algunas de las MCU AVR tienen una interfaz de memoria externa incorporada, por ejemplo, Atmega2560 (consulte la sección 8 de la hoja de datos ATmega640/1280/1281/2560/2561). Pero el espacio de direcciones se mide en Kilobytes, no en Gigabytes.