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

13

Acabo de completar un proyecto usando el chip LPC2132, pero tuve problemas con el uso de toda la memoria RAM de 64 kb.

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?

Samoz
fuente
1
¿Qué tipo de memoria estamos hablando de SRAM, SDRAM, DDR, DDR2, DDR3?
Jay Atkinson
1
Ningún tipo en particular. Algo más grande que 64k ...
samoz

Respuestas:

10

No necesita una MMU para la memoria RAM externa, el factor determinante si necesita una es un problema completamente diferente de simplemente necesitar más espacio. Si ha estado codificando directamente al metal, en realidad puede facilitarle la vida al no tener una MMU. También me gustaría señalar que una MMU prácticamente nunca es un componente externo, sino más bien en el dado SoC.

Puede encontrar SoC ARM en muchas familias que permiten la memoria externa del ARM7 en adelante, por ejemplo, la serie NXP LPC2212 que 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 en las familias ARM, ya que puede encontrar casi todos en SoC con controladores de memoria externos.

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

Puede usar RAM y CI de flash separados. También hay paquetes llamados MCP (Multi Chip Package) que pueden incluir flash y ram en 1 paquete. La forma en que elija estos dispositivos depende de muchos factores, debe ser más específico acerca de su aplicación.

La facilidad de conexión depende de la velocidad que necesite. 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 tenga un tablero como este, 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 uno de los muchos tableros de desarrollo con memoria externa.

marca
fuente
Gracias por la respuesta Mark. 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.
samoz
44
una MMU se usa para asignar un espacio de direcciones virtuales a dispositivos físicos. Es utilizado por los sistemas operativos para aislar la memoria de diferentes procesos, para paginación, resolución de problemas de fragmentación de memoria, mapeo de memoria de dispositivos de hardware dinámico, 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 completo de Linux, aunque hay uClinux que se ha modificado para ejecutarse sin una MMU.
Mark
¿Está bien instalar un eeprom externo en modo SPI / IIC? Tengo muchas ganas de ampliar la memoria flash de mi MCU utilizando 24c64 IC.
0xakhil
Sería difícil; necesita una buena placa de pruebas, cables muy cortos (por ejemplo, 1 pulgada) y relojes muy lentos (evite cualquier cosa más allá de 2 MHz, diría). Usaría resistencias de 200 ohmios en lugar de cables por si acaso, para obtener tiempos de subida / caída 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 un mejor tablero.
Guillermo Prandi
5

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 otros.

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


fuente
advertencia, cualquier memoria externa que agregue a un STM32x no será tan rápida como la SRAM interna o el Flash interno. Como 6-9X más lento. Si necesita memoria rápida, asegúrese de que sea interna. Estoy haciendo un proyecto con 16 MB de PSRAM en un STM32 y es bastante lento si lo usa como memoria de uso general.
Mark Lakata
1
Puede hacer que el FSMC / PSRAM vaya más rápido, pero no puede asignarlo al espacio de memoria normal, es decir, a la memoria de almacenamiento dinámico. Tendrá que usar accesos DMA dedicados.
Mark Lakata
4

Recientemente tuve un requisito similar para un nuevo proyecto, y elegí el STMicro STM32F103ZET6 (ARM Cortex-M3 de 32 bits), con 512K de Flash interno y 64K 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 interconectaré con un Cypress SRAM de 2MB, sin ningún otro pegamento requerido (sin multiplexación).

tcrosley
fuente
¡Frio! ¿Estás usando una placa de desarrollo o hiciste la tuya?
samoz
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 puedo terminar obteniendo las placas con el paquete de 144 pines.
tcrosley
¿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
1
@XTL: buena captura, corrigí mi respuesta.
tcrosley
3

Tal vez un Atmel AT91SAM9G20 ?

Es un poco una 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, quizás 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 debo agregar que no trabajo para Atmel; solo estoy familiarizado con sus cosas).

pingswept
fuente