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

20

Tengo dos módulos de RAM de 2GB sobrantes que eliminé de mi MacBook Pro cuando hice una actualización. Me preguntaba si se podrían utilizar, por ejemplo, con un Arduino. De todos modos, sería demasiado principiante para tratar de hacer esto de todos modos, pero tengo curiosidad por saber si es posible o si eso es demasiada memoria para que un microcontrolador pueda abordarlo.

johndeo
fuente
1
probablemente podría manipular algo para hacerlo, pero los circuitos de interfaz probablemente serían la parte más compleja del sistema resultante, y el resultado tendría poco valor práctico.
JustJeff
¡Gracias por las buenas respuestas! Muy interesante. Poco a poco voy aprendiendo sobre cómo encajan las piezas. Gracias.
johndeo
Las plataformas ARM9 y ARM11 alojan controladores DDR2, pero no se trata 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.
Hans
Lo que dijo Hans: cualquier micro lo suficientemente potente como para usar ese tipo de RAM tendrá un controlador DDR incorporado. No he examinado de cerca el funcionamiento interno del control DDR, pero el hecho de que necesita un hardware dedicado para hacerlo le dice algo ... módulos más antiguos, material de impresoras láser antiguas, etc. podrían ser más utilizables.
John U

Respuestas:

24

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

Pero jugaré un paso 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, no presente en una placa Arduino de vainilla o realmente, cualquier otro microcontrolador básico para aficionados.

Suponiendo que eso se haya solucionado, el chip funcionaría prácticamente como cualquier otra memoria externa para el Arduino. Esto realmente se hace todo el tiempo: las personas agregan 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 el Arduino. Su característica principal es la velocidad y el Arduino (y sí, otros microcontroladores aficionados) generalmente no rompen 25MHz en la velocidad del reloj. Son demasiado lentos para preocuparse por la velocidad. Y el tamaño de almacenamiento no es un gran problema ya que la interfaz con una tarjeta SD / MMC es claramente más fácil y proporciona tanto espacio para jugar.

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

AngryEE
fuente
Tengo que confesar que he pensado en conectar algunas viejas DIP DRAM a mi arduino, solo para las larvas. (pero eso sería factible, incluso en una placa de pruebas, con basura de la era 4164). De lo contrario, estoy totalmente de acuerdo.
JustJeff
1
Esa es una respuesta de calidad, utilizando suposiciones paso a paso y llegando a la condición final. ¡Buen trabajo!
LeanerRocky
2
No pase por alto los problemas de actualización. Otra razón por la que el flash "basado en comandos" es probablemente una mejor coincidencia cuando el mouse de un controlador está tratando de manejar un camión mack de memoria.
Chris Stratton
Puse un comentario arriba, con la pregunta, pero creo que realmente debería ponerlo aquí. Muchas gracias por la respuesta. El intercambio de pilas es un súper recurso, y todo se debe a que las personas se toman el tiempo para proporcionar respuestas de calidad.
johndeo
8

Yo diría que no, no sin pegar una fpga de buen tamaño (recuento de pines) en el medio, la fpga habla con la memoria y el microcontrolador habla con la fpga mediante un esquema de paginación.

viejo contador de tiempo
fuente
Mi pensamiento también. Y haga que el FPGA sea un controlador de actualización transparente. Pero realmente ... ¿no sería más simple y más barato emular un arduino en software en un pequeño sistema ARM?
Chris Stratton
1
Por divertido o educativo que sea, DDR no es simple, y no es algo para principiantes. Encuentre otra computadora portátil o placa base para guardar esta memoria y aprenda sobre DDR usando, por ejemplo, una placa de evaluación fpga que tenga un poco al costado o tal vez una beagleboard o algo así. El primer problema es el recuento de pines, el segundo son las señales, el tiempo, etc. Es difícil hacer que funcione cuando haces tu propio tablero. No es como una interfaz lcd o algo así que se puede conectar a un microcontrolador.
old_timer
7

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 una técnica 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 desde 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.

JustJeff
fuente
1
¿Puede un AVR ejecutar código desde RAM en cualquier circunstancia?
Nick T
@Nick T: no estaba sugiriendo indirectamente que existen tales escenarios en los que podría; Estaba diciendo directamente que en caso de que alguien estuviera pensando en conectarse a este tipo de RAM, sería un error pensar que podría usarlo así.
JustJeff
1
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 tampones 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.
Kevin Vermeer
@reemrevnivek - buen punto, hago +1 en tu comentario. Si mantiene algunas docenas de ajustes de configuración, EEPROM. Si desea mantener fotogramas de video, SRAM.
JustJeff
7

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

allanw
fuente
¡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!
Toybuilder
6

La respuesta corta es no.

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

akohlsmith
fuente
6

Necesitaría un controlador de bajo voltaje (SSTL) y alguna forma de controlar aproximadamente 100 canales (cada diferencial, por lo que unos 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 baja tasa de error de bits. Esto formará una importante tarea en segundo plano y usará 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 con algunos microcontroladores, por ejemplo, PIC24F / H / dsPIC33F, que admiten una interfaz de bus maestro paralelo, que permite acceder a algunos tipos de SRAM paralelas. Incluso hay soporte con C, ya que esta memoria externa se puede asignar a varias variables de código e incluso a bloques que combinan memorias internas y externas. La memoria externa requiere que escriba un código PMB. Sin embargo, solo podrá abordar hasta aproximadamente 1 MB con esto.

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

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: Atmega2560, por ejemplo (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.

JRobert
fuente