¿Cuál es una buena opción para que un ARM interactúe con la memoria externa?

Acabo de completar un proyecto usando el chip LPC2132, pero tuve problemas al usar los 64kb de RAM.

Para mi próximo proyecto, me gustaría usar algo que pueda hacer referencia a un chip de memoria externo mucho más grande. ¿Qué tipo de ARM puede hacer esto y qué debo hacer para que los dos dispositivos hablen?

¿De qué tipo de memoria estamos hablando de SRAM, SDRAM, DDR, DDR2, DDR3?
De ningún tipo en particular. Algo más grande que 64k...

Respuestas (4)

No necesita una MMU para la memoria RAM externa, el factor determinante si necesita una es un problema completamente diferente a la simple necesidad de más espacio. Si ha estado codificando directamente hasta el metal, es posible que su vida sea más fácil al no tener una MMU. También me gustaría señalar que una MMU prácticamente nunca es un componente externo, sino que está en la matriz SoC.

Puede encontrar SoC ARM en muchas familias que permiten memoria externa desde ARM7 en adelante, por ejemplo, la serie NXP LPC2212 no dice que sea la mejor, solo el primer SoC ARM7 que apareció en Google con una interfaz de memoria externa, hay muchas opciones. .

Prestaría más atención a las características de los diversos núcleos de las familias ARM, ya que puede encontrar casi todos ellos en SoC con controladores de memoria externos.

Ahora, en cuanto al tipo de memoria que necesita y cómo hacer que funcione, eso depende del SoC que elija y de la memoria que admita el controlador de memoria externa. Por ejemplo, el ARM7 SoC i linked admite SRAM externa, así como flash y rom, y admite hasta 4 bancos de 16 MB, por lo que puede conectarle flash externo y SRAM al mismo tiempo.

Puede usar RAM y flash IC por separado. También hay paquetes llamados MCP (Multi Chip Package) que pueden incluir tanto flash como ram en 1 paquete. La forma en que elige estos dispositivos depende de muchos factores, necesitaría ser más específico acerca de su aplicación.

La facilidad de conexión depende de la velocidad que necesites. La mayoría de los controladores de memoria externa tienen frecuencias de reloj programables. Las velocidades de reloj de la interfaz de memoria podrían ser muy altas, al menos 10MHz y probablemente mucho más altas. En resumen, es muy probable que no esté probando algo como esto, debe diseñar una PCB y prestar especial atención a los problemas de integridad de la señal para estas líneas.

Su mejor opción es elegir un núcleo con el que quiera jugar y encontrar una de las muchas placas de desarrollo que existen con memoria externa.

Gracias por la respuesta Marcos. Estaba confundido si una MMU era necesaria o no. En cuanto a Sparkfun, en realidad tienen un LPC 2294 a la venta en este momento, que tiene un bus de memoria externo. Creo que iré con eso.
una MMU se utiliza para asignar un espacio de direcciones virtuales a dispositivos físicos. Los sistemas operativos lo utilizan para aislar la memoria de diferentes procesos, para paginar, resolver problemas de fragmentación de memoria, mapear dispositivos de hardware dinámicos de memoria, etc. Virtualiza el subsistema de memoria. En la mayoría de los casos, solo necesitaría una MMU si quisiera ejecutar un sistema operativo con un conjunto completo de funciones de multiprocesamiento. Por ejemplo, necesitaría una MMU para ejecutar el kernel de Linux completo, aunque hay uClinux que se ha modificado para ejecutarse sin una MMU.
¿Está bien incorporar una eeprom externa que funcione en modo SPI/IIC? Espero ampliar la memoria flash de mi MCU usando 24c64 IC.
Sería difícil; necesita una buena placa de prueba, cables muy cortos (por ejemplo, 1 pulgada) y relojes muy lentos (evite cualquier cosa más allá de 2 MHz, diría yo). Usaría resistencias de 200 ohmios en lugar de cables por si acaso, para obtener tiempos de subida/bajada más lentos. Recuerde que GND también debe ser corto entre chips. Esto no rompería ningún récord, pero le daría una prueba de concepto que puede traducir a una placa mejor.

La serie más grande de procesadores STM32 (núcleo Cortex-M3 de 32 bits) tiene un FSMC, que es un controlador de memoria estática flexible. Con esto, puede conectar Flash, RAM y otros periféricos de memoria como LCD y similares.

Puedo recomendar el STM32F103ZET6 como también dijo tcrosley, y puede obtener una placa de desarrollo que incluye flash y sram en eBay por $ 68 - http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=220619908411

advertencia, cualquier memoria externa que agregue a un STM32x no será tan rápida como la SRAM interna o la memoria flash interna. Como 6-9 veces más lento. Si necesita una memoria rápida, asegúrese de que sea interna. Estoy haciendo un proyecto con PSRAM de 16 MB en un STM32 y es bastante lento si lo usa como memoria de propósito general.
Puede hacer que FSMC/PSRAM vaya más rápido, pero no puede asignarlo simplemente al espacio de memoria normal, es decir, a la memoria de almacenamiento dinámico. Deberá utilizar accesos DMA dedicados.

Hace poco tuve un requisito similar para un nuevo proyecto y elegí el STMicro STM32F103ZET6 (ARM Cortex-M3 de 32 bits), con 512 K de Flash interno y 64 K de RAM interna por alrededor de $10 en cantidad. Tiene un controlador de memoria que puede direccionar hasta 64 MB de memoria externa (26 bits de dirección). Disponible en un paquete LQFP de 144 pines. (No me gusta usar BGA para prototipos). Lo conectaré con un Cypress SRAM de 2 MB, sin necesidad de ningún otro pegamento (sin multiplexación).

¡Fresco! ¿Estás usando una placa de desarrollo o hiciste la tuya propia?
Mi representante local de STMicro me dio un "IAR KickStart Kit para STM32" iar.com/website1/1.0.1.0/658/1/?item=prod_prod-s1/225 para jugar; sin embargo, el micro es solo un paquete de 64 pines, por lo que no tiene los pines FSMC, por lo que podría terminar comprando las placas con el paquete de 144 pines.
¿Me estoy perdiendo de algo? 26 bits pueden direccionar directamente 2^6 = 64 M ubicaciones. 512 MB con eso significaría palabras de 8 bytes. ¿Debería ser 512Mb?
@XTL: buena captura, corregí mi respuesta.

¿ Quizás un Atmel AT91SAM9G20 ?

Es un poco bestia (paquete BGA de 217 pines), pero es un gran chip por el precio. Si está buscando algo un poco más amigable para los humanos, tal vez pruebe el Atmel AT91M42800A . Creo que es la MCU más pequeña que tiene hardware de memoria externa, al menos de Atmel. Es un paquete LQFP de 144 pines.

Atmel tiene un selector paramétrico: http://www.atmel.com/dyn/products/param_table_v2.asp?family_id=605&OrderBy=part_no&Direction=ASC

(Supongo que debería agregar que no trabajo para Atmel; simplemente estoy familiarizado con sus cosas).