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:
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)
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).
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:
Sección de control/comando/dirección
Sección de datos
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.
Poder y varios
¿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).
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.
Todos los accesos a datos de memoria - lecturas o escrituras - proceda de la siguiente manera:
La fila se activa mediante los comandos Activar-1 y Activar-2. Esos proporcionan la dirección de fila a la RAM.
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.
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.
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.
pjc50
usuario_1818839
Transeúnte
Polinomio
Transeúnte
Polinomio
mariscal de campo