Interfaz con RAM desde una PC, por ejemplo, SDRAM / DDR, a un microcontrolador

Estoy buscando interconectar memorias SDRAM o DDR de factor de forma de PC estándar a un microcontrolador, pero no puedo encontrar ningún detalle definitivo sobre cómo funcionan en términos de cómo funciona el bus. Supongo que es similar a cómo funciona cualquier interfaz estándar SPI o I²C: envíe algunas instrucciones al dispositivo, luego lea algunos resultados hasta que se cumpla un estado de pin particular. Excepto en este caso, los buses de datos y direcciones son paralelos en lugar de seriales.

Tengo tres preguntas relacionadas con el tema:

  • ¿En qué interfaz se ejecuta la memoria de PC estándar, por ejemplo, SDRAM o DDR? Recuerdo haber leído algo sobre JEDEC como responsable de la especificación, pero no puedo encontrar ningún detalle específico. Me gustaría usar DDR (o DDR2) ya que ahora es más barato, pero me conformo con SDRAM.
  • ¿Se puede reducir la memoria de PC estándar a velocidades de reloj más "cómodas"? Las velocidades de bus estándar para estas cosas tienden a ser de alrededor de 133 MHz, pero espero ejecutarlas a menos de 1 MHz. Según tengo entendido, la SDRAM espera los bordes del reloj antes de responder a los comandos, por lo que una frecuencia de reloj baja debería permitir que un microcontrolador la pueda manejar.
  • ¿Cómo se llama la interfaz física? Intenté buscar en Farnell enchufes para tales dispositivos de memoria, pero solo encontré algunos elementos de montaje en superficie de paso realmente pequeño. Probablemente podría construir mi propia versión de orificio pasante si pasara el tiempo suficiente, pero preferiría comprar una prefabricada.
Dada la gran cantidad de conectores, no lo encontrará en el orificio pasante. Puede tener problemas con la actualización de DRAM: cada bit debe reescribirse a una frecuencia mínima particular para que no se pierda. Es mejor que encuentre un ARM con una interfaz DRAM.
Vaya a Micron.com y busque sus excelentes hojas de datos y notas técnicas. Las hojas de datos de DIMM brindan cierta información, pero la verdadera esencia está en las hojas de datos de los chips instalados en esos DIMM.
¿Qué tipo de mcu está usando que le dará más de 100 gpio para los pines de datos, dirección, paridad y control necesarios para SDram?
@Passerby Esperaba reducir los recuentos de pines necesarios alimentando los buses de direcciones y datos con registros de desplazamiento. Sin embargo, parece que un micro no será lo suficientemente rápido.
@Polynomial bueno, ¿cuáles son tus necesidades de memoria? En su lugar, podría recuperar un solo chip ram de un dimm. Especialmente memoria más antigua (antes de sdram pc100). Todavía obtenga uno o dos megas, de un solo chip de memoria.
@Passerby Necesito alrededor de medio concierto, desafortunadamente. De lo contrario, elegiría un IC DRAM grande en un bus SPI o I2C.
La unidad de almacenamiento de chips individuales está en bits, por lo que debe dividirla entre 8 para obtener el almacenamiento de bytes. Sería posible siempre que tenga el gpio para ello, y si pueden funcionar en un tiempo no óptimo, pero sincronizado correctamente.

Respuestas (5)

A menos que su microcontrolador tenga un soporte de bus directo para conectarse a RAM de tipo DDR/DDR2/DDR3 o su microcontrolador esté conectado a través de un FPGA que ha sido programado para proporcionar la interfaz de RAM, entonces es probable que jugar con DIMM no sea un ejercicio útil. Hay varias razones poderosas por las que este es el caso....

1) Los chips de memoria DDR pueden estar funcionando a voltajes más bajos que su microcontrolador.

2) La interfaz a la memoria DDR está multiplexada y requiere un reloj preciso mientras que las líneas multiplexadas cambian de estado en sincronía con dicho reloj.

3) Los módulos DIMM modernos están diseñados para funcionar con relojes de muy alta frecuencia de 800 MHz, 1066 MHz, 1333 MHz o 1600 MHz. La integridad de la señal es extremadamente importante al diseñar las conexiones del circuito al DIMM. No es un ejercicio trivial y, como resultado, los chips de memoria pueden ser extremadamente sensibles al ruido.

4) Las memorias DDR requieren una actualización constante para mantener válidos los datos de las celdas de memoria. Sin actualizar, el contenido de la memoria se desvanece con el tiempo de milisegundos a segundos.

5) La estructura de comando para operar las DDR RAM modernas es compleja. La parte más complicada es obtener la secuencia de inicialización correcta, que consta de unos 13 a 20 pasos individuales.

6) Los DIMM modernos están diseñados para enviar datos a computadoras modernas de tipo PC muy rápido. El DIMM típico tiene un ancho de ruta de datos de 64 bits. Los módulos DIMM de varios rangos también requieren varios relojes y señales de selección de chip para acceder a todos los chips de memoria en la tarjeta de memoria. Es poco probable que el pequeño microcontrolador típico pueda hacer un uso efectivo de este amplio formato de datos sin una cantidad excesiva de circuitos externos.

Tenga esto en cuenta también. Las empresas que fabrican procesadores estilo PC que utilizan módulos DIMM tienen controladores integrados para interactuar con los zócalos de memoria. Existe una especialidad de ingeniería para programadores que trabajan en el campo de la BIOS llamada MRC (código de referencia de memoria). Este es el módulo de código de programa que inicializa el controlador DDR y todos los DIMM adjuntos. Esta especialidad emplea a los mejores y algunos de los más experimentados programadores de BIOS que no hacen más que codificar MRC como un trabajo de tiempo completo.

Algunas SDRAM de velocidad de datos única (SDR) se pueden ejecutar a velocidades más lentas; verifique la especificación del período de reloj (máx.). Sin embargo, debe emitir comandos de actualización de forma regular, y si registra a 1 MHz, es posible que no tenga tiempo para nada más.

DDR SDRAM normalmente tiene una frecuencia de reloj mínima (sí, mínima) en las altas decenas de MHz... y la interfaz física sería muy difícil de implementar en un micro, ya que devuelve una señal de reloj/estroboscópica junto con los datos y tiene que encontrar la mitad de ese período de reloj para saber cuándo muestrear los datos.

Micron es una gran fuente de hojas de datos que documentan muy bien las interfaces.

En cuanto a los conectores físicos, se denominan SIMM y DIMM (módulo de memoria en línea simple y dual)

Esta es la primera respuesta sensata a una pregunta sobre DDR y MCU que leí aquí. DDR tiene una frecuencia de reloj mínima, ¡maldita sea! Esa es la restricción que impide el uso con MCU de baja frecuencia, no trivialidades como el conteo de pines o Vcc (ATtiny puede hacer 1.8V). En cuanto a la actualización, desearía que algunos de los profesionales describieran por qué la "actualización automática" que normalmente se encuentra en las hojas de datos DDR no funcionará aquí (o por qué la "actualización automática" no es realmente una actualización automática).
¿No sería el período de reloj mínimo la frecuencia de reloj máxima? También encontré micron.com/~/media/Documents/Products/Technical%20Note/DRAM/… que dice "A diferencia de DDR, no hay una frecuencia de reloj mínima para SDRAM, independientemente del grado de velocidad". Ese documento hizo que pareciera que solo necesita mirar los parámetros relacionados con la actualización.
Sí, el circuito básico todavía consta de un condensador. Si tiene carga, es "1"; de lo contrario, es "0". La carga en un capacitor decae con el tiempo y los capacitores son pequeños. El circuito y el tiempo para "refrescar" la carga es una sobrecarga.
@pfalcon Busque "máquina de estado ddr4". La actualización automática es un modo separado del inactivo. Estoy bastante seguro de que el chip ignorará los comandos de lectura cuando esté en modo de actualización automática porque solo se usa cuando la PC está en modo de suspensión y el controlador de memoria de la CPU está apagado.

Hay un tipo de DRAM que incluye un controlador de actualización integrado. Permite grandes densidades de memoria al tiempo que permite que una MCU sin controlador DRAM la trate como una SRAM. Varios proveedores lo llaman Pseudo SRAM, PSRAM o Cellular DRAM.

Un ejemplo de número de pieza de ejemplo sería...

Para usar SDRAM, debe tener un chip que contenga un controlador SDRAM, punto. Obtenga un microcontrolador que tenga uno o conecte un FPGA que tenga uno a su microcontrolador.

De cualquier manera, no es un proyecto para un principiante.

En los tiempos de la memoria de núcleo magnético, los controladores y receptores del núcleo debían ajustarse a la temperatura del núcleo, o el núcleo debía mantenerse a una temperatura de funcionamiento bastante estable. Esto se debió a que la memoria operaba cerca de los límites físicos impuestos por su diseño. Como contraejemplo, la RAM estática 6116 no funciona en ningún lugar cerca de donde la temperatura nominal del troquel afectaría tanto su funcionamiento que tuvo que medirla y ajustar su funcionamiento. Por desgracia, la SDRAM moderna vuelve a estar donde estaba la memoria de núcleo magnético: el rendimiento del silicio depende de la temperatura y también del diseño de la placa de circuito, y funciona con márgenes tan pequeños que varios procedimientos de ajuste ("entrenamiento") debe realizarse durante el funcionamiento normal de la memoria RAMpara mantener un funcionamiento adecuado. Hemos cerrado el círculo: mantener la SDRAM es más como tratar con un circuito analógico muy rápido :)

En general, las interfaces DRAM estándar son estándares JEDEC: puede registrar una cuenta de usuario gratuita en jedec.org y usarla para descargar esos estándares. Entonces, hablemos de algo concreto: LPDDR4 (velocidad de datos doble de baja potencia 4) estándar DRAM JESD209-4 (con fecha de agosto de 2014). Las DRAM antiguas se vuelven obsoletas con bastante rapidez, por lo que si desea diseñar algunas SDRAM, es mejor centrarse en la generación actual de chips. Dado que se puede acceder fácilmente al estándar, no lo cubriré con mucho detalle, solo expondré la naturaleza "alienígena" de las interfaces SDRAM (en comparación con los dispositivos RAM de uso común en los años 70/80).

asignación de pines

los buses de datos y direcciones son paralelos en lugar de seriales.

Los buses de datos y direcciones son paralelos, pero la interfaz no es algo que pueda conectarse directamente a un microcontrolador. En primer lugar, la lógica es HS_LLVCMOS (CMOS de alta velocidad y bajo voltaje) y el anillo de E/S (el silicio que controla los pines) funciona a 1,1 V nominal, 1,06 V mínimo, 1,17 V máximo. Por lo tanto, definitivamente necesita traductores de nivel lógico, ya que pocas MCU de baja velocidad pueden admitir tales niveles de forma nativa.

Además, la organización de bus "paralelo" está diseñada para tener sentido para la memoria de computadora de alta velocidad, y no es como el típico chip DRAM "lento" de la década de 1970 que tenía líneas /RAS y /CAS, una habilitación de chip (tal vez ), entradas de dirección de fila/columna, selección de lectura/escritura y líneas de E/S de datos.

Todas las familias de SDRAM tienen un bus diseñado para enviar comandos a la RAM, y muchos de esos comandos (de hecho, ¡la gran mayoría de ellos!) no tienen nada que ver con la lectura o escritura de datos. Hay varios registros de control de modo a los que puede acceder; no están "asignados en memoria", es decir, no están visibles en el espacio de direcciones de la memoria, pero se accede a ellos mediante comandos dedicados.

Cada uno de los chips LPDDR4 tiene uno o dos "canales" completamente independientes, es decir, se dividen efectivamente en uno o dos dispositivos SDRAM independientes, y cada uno tiene un bus de E/S paralelo síncrono. Las señales son:

  1. Sección de control/comando/dirección

    • CK_t/CK_c: entrada de reloj diferencial para las señales de dirección, comando y control (es decir, todas las señales que no sean DQ). Esta sección siempre es de velocidad de datos única, es decir, las señales son muestreadas por la RAM solo en el flanco ascendente del reloj.
    • CKE - habilitación del reloj, utilizada para inhibir el reloj internamente sin tener que apagarlo externamente
    • CS - selección de chip/selección de nibble de comando: el comando de deselección se activa cuando CS está bajo en el flanco ascendente del reloj, y luego el bus CA se ignora hasta el siguiente ciclo de reloj; de lo contrario, CS debe estar alto en el flanco ascendente del reloj y bajo en el flanco descendente del reloj
    • CA[5:0] - bus de entrada de comando/dirección - sí, solo proporciona 6 bits a la vez
    • ODT_CA - habilitación de terminación en matriz para el bus CA - se puede anular en el registro MR22
    • /RESET: se utiliza para llevar todos los canales del troquel al estado RESET
  2. Sección de datos

    • DQS1_t/DQS1_c - E/S de reloj diferencial para el byte de bus de datos superior (DQ[15:8])
    • DQS0_t/DQS0_c - E/S de reloj diferencial para el byte de bus de datos inferior (DQ[7:0])

    Durante el comando READ, el chip de memoria controla los relojes DQS. Durante el comando ESCRIBIR, el usuario maneja los relojes DQS. El bus de datos es de doble velocidad de datos, es decir, en cada ciclo de reloj, los nuevos valores DQ son cronometrados por los flancos ascendente y descendente del reloj.

    • DQ[15:0] - bus de E/S de datos de 16 bits
  3. Poder y varios

    • VDDQ, VDD1, VDD2 - Tensiones de alimentación de 1,1 V
    • ZQ - referencia de calibración, conectar a VDDQ a través de una resistencia de 240Ω ± 1%.

Velocidad de reloj

¿Se puede reducir la memoria de PC estándar a velocidades de reloj más "cómodas"?

Sí. En el estándar, la tabla 88 - Tiempos de CA del reloj - especifica el período de reloj promedio máximo tCK(avg) de 100 ns. Por lo tanto, para ejecutar la RAM, debe proporcionarle un reloj de 10 MHz como mínimo. Este reloj se puede apagar de acuerdo con el protocolo de parada de reloj de entrada (ibíd., sec. 4.37). Este reloj mínimo se aplica a todos los grados de velocidad de la memoria LPDDR4.

La especificación de fluctuación de fase tJIT(cc) (ibíd., tabla 88) es de 140ps como máximo para LPDDR4-1600 y se vuelve más ajustada para dispositivos más rápidos. Solo es crítico con velocidades de reloj rápidas, en su mayor parte: siempre que el período de reloj +/- jitter no exceda las especificaciones, todo estará bien, pero los dispositivos DDR2+ contienen bucles bloqueados por retardo (DLL) que deben sincronizarse con el período de reloj. Esos bucles no lograrán un buen bloqueo si la fluctuación del reloj es excesiva. Por lo tanto, es preferible utilizar un reloj derivado externamente y sincronizar el microcontrolador con él. Consulte el artículo de tres partes "Tratar con la fluctuación del reloj en los diseños de DRAM DDR2/DDR3 integrados" para obtener más información sobre los efectos de la fluctuación del reloj en las memorias DDR2+.

El reloj de 10 MHz no significa que la RAM tenga que estar "haciendo algo" todo el tiempo: en muchos de los ciclos de reloj, se puede dar el comando DESelect (CS = 0 en un flanco ascendente del reloj).

Actualizar

Los chips LPDDR4 con troqueles de 4 Gb, 6 Gb y 8 Gb (gigabits) tienen 8 bancos, y cada uno de los bancos debe actualizarse periódicamente. El requisito de frecuencia de actualización depende de la temperatura del troquel: cuanto mayor sea la temperatura, más rápida debe ser la frecuencia de actualización. La RAM te ayuda aquí: como usuario, debes leer periódicamente el registro MR4 para determinar la frecuencia de actualización que requiere la RAM a su temperatura de funcionamiento actual. La RAM tiene un sensor de temperatura incorporado. La frecuencia de actualización más rápida es de 0,9 us por banco. Los bancos se pueden actualizar individualmente: cuando se actualiza uno de los bancos, se pueden usar los demás. También hay un comando Actualizar todo, para actualizar todos los bancos al mismo tiempo.

Direccionamiento

Todos los accesos a datos de memoria - lecturas o escrituras - proceda de la siguiente manera:

  1. La fila se activa mediante los comandos Activar-1 y Activar-2. Esos proporcionan la dirección de fila a la RAM.

  2. Luego, se selecciona una columna dentro de la fila para leer o escribir mediante el comando Leer-1 o Escribir-1 seguido de los comandos Leer-2 o Escribir-2, también llamados CAS-2, ya que son idénticos para leer y escribir. CAS-2 debe enviarse no antes de tRCD (retardo de RAS a CAS) después de Activar-2, es decir, no antes de 18 ns o 4 ciclos de tCK, lo que ocurra más tarde.

  3. Hasta ahora, el reloj DQS ha estado inactivo. El reloj se activa después de que ha pasado la latencia de lectura o escritura, seguido del tiempo de preámbulo. Para las lecturas, la RAM suministra el reloj DQS; para escrituras, el usuario proporciona el reloj DQS. El preámbulo se puede configurar a través del registro MR1, y puede ser un preámbulo "estático" en el que DQS no alterna, o uno dinámico en el que DQS alterna un ciclo antes de que se intercambien los datos.

Todo lo demas

A medida que las frecuencias de reloj superan el mínimo y la temperatura de funcionamiento cambia, se deben realizar varias rutinas de entrenamiento.

Y el truco final: la secuencia de voltaje de suministro de encendido y apagado es fundamental. Solo se garantiza que la RAM sobreviva a 400 ciclos de apagado no planificados, es decir, se apague mientras el dispositivo estaba en medio de un comando activo , e incluso esos tienen que observar una reducción de suministro adecuada. Por lo tanto, si planea usar LPDDR4, debe detectar la pérdida de energía antes de que los voltajes de suministro se salgan de la regulación, la RAM debe llevarse a un estado inactivo (esto generalmente toma menos de 1us, por lo que no es gran cosa), y luego todas las entradas deben estar "estacionadas" en estados lógicos bajos válidos, y los reguladores deben reducir gradualmente los voltajes de manera controlada.


He estado ejecutando LPDDR3 (según el estándar JESD209-3) con un microcontrolador de 100 MHz bastante "lento" que no tiene un controlador DDR: uno de los dos núcleos auxiliares de baja complejidad en el microcontrolador realiza las funciones y el voltaje del controlador RAM seguimiento y activación/desactivación según norma.

No es lo más complejo de hacer, por lo que todas esas otras respuestas que imploran que está "fuera del alcance" de un principiante lo están exagerando un poco.

Incluso DDR4 es algo con lo que podría interactuar a fines de la década de 1970; seguro, no funcionaría ni cerca de su propia velocidad máxima, pero mantendría fácilmente el ritmo de todos y cada uno de los sistemas digitales de esa época, sin estados de espera y con casi sin gastos generales (funcionaría casi como lo haría SRAM). Todo lo que se necesitaría para que funcione sería un poco de lógica de pegamento discreta, y algunos cambiadores de nivel analógicos y controladores de fuente de alimentación.

Confío en que si le diera cualquiera de las especificaciones de DDR, hasta DDR4 incluida, a un ingeniero de DEC a fines de la década de 1970 o principios de la de 1980, podría crear una interfaz funcional en un par de meses como máximo. Y eso sería ejecutar la memoria completamente de acuerdo con el estándar JEDEC. Si todo lo que quisieras hacer fuera solo una prueba de concepto, probablemente no tomaría más de un par de semanas de trabajo. Cuando el sistema se inicia, se pueden escribir varias secuencias de comandos en la SRAM bipolar (en 1979, habría sido, por ejemplo, la SRAM de la familia Fairchild 13ns F10415A 1kbit ECL 10k), y luego "transmitirse" a la SDRAM usando una máquina de estado. Durante los ciclos de lectura y escritura, la dirección de fila y columna adecuada, así como los datos de escritura, se bloquearían en el bus de la computadora y se conducirían hacia la SDRAM en los momentos apropiados. y los resultados de la lectura se bloquearían de manera similar y se devolverían al bus de la computadora. Dado el rendimiento DDR4 de otro mundo (frente a lo que era habitual a finales de los 70), todas las latencias en la SDRAM serían de poca importancia, y la memoria sería esencialmente una DRAM de estado de espera cero para la gran mayoría de los sistemas. Incluso los sistemas más rápidos de esa época podían acceder a él en un solo ciclo de autobús, fácilmente.

En la práctica, una IP de controlador DDR4 (propiedad intelectual, un núcleo que compra y se coloca en su ASIC, o viene estándar en el SoC o FPGA que está usando) seguro que ahorra tiempo, pero no es demasiado difícil de implementar si no está ejecutando a toda la velocidad del chip RAM. La razón principal para favorecer SDRAM rápido sobre SDRAM lento es que el SDRAM rápido es barato y está ampliamente disponible, mientras que el SDRAM más antiguo se vuelve más caro y eventualmente solo está disponible en el mercado secundario a medida que pasa el tiempo.