Expanda RAM y flashee en LPC2294

Tengo un proyecto en mente. Quiero comprar un microcontrolador LPC2294, SDRAM IC y flash IC (aún no se han definido esos IC). Lo que quiero hacer es conectar esos circuitos integrados al microcontrolador para expandir su memoria de programa y memoria de datos automáticamente (lo que significa que no quiero tener que crear un método para escribir en el flash o SDRAM, quiero que el microcontrolador para poder decir que tiene esos recursos, y usarlos como si fueran las memorias en chip del microcontrolador).

Sé cómo conectar esos componentes físicamente (ya que el sitio de NXP tiene un ejemplo de esto que fue muy fácil de entender).

Mi pregunta principal: ¿Solo es necesario conectarlo por hardware y poner LOW o HIGH en algunos pines en el arranque para que el microcontrolador reconozca esos recursos externos como propios, o también tendré que hacer algo más? Por ejemplo: ¿tendré que modificar los registros de memoria que apuntan a la memoria flash interna y la RAM y hacer que esos registros apunten a los componentes externos? ¿Cómo podría poner el programa en el flash externo?

¿Tendría que escribir un cargador de arranque y grabarlo manualmente en el flash externo o puedo simplemente usar el cargador de arranque interno y de alguna manera asignarlo a los dispositivos externos?

Si alguien pudiera explicarme esto se lo agradecería mucho. Y si hay algún código involucrado o cambios en los archivos de configuración, ¿podría darme un ejemplo de cómo funciona?

Respuestas (2)

Primero debe verificar si se refiere a SDRAM o SRAM. No creo que este microcontrolador sea compatible con SDRAM y sospecho que debería planear usar una SRAM externa.

Consulte la documentación del microcontrolador para ver ejemplos sobre cómo conectar el microcontrolador a la SRAM externa y al flash. También puede encontrar una placa de evaluación que contenga memorias externas y haga referencia al esquema de la placa de evaluación.

Deberá configurar el controlador de memoria externa del microcontrolador para que el microcontrolador pueda utilizar las memorias externas. Consulte la Guía del usuario del microcontrolador para obtener detalles sobre cómo configurar el controlador de memoria externa. Básicamente, cada memoria estará asociada con un pin de selección de chip y tendrá que configurar todos los ajustes asociados con las selecciones de chip que está utilizando. Por lo general, el controlador de memoria externa se configura con algunas instrucciones en el código de inicio de su aplicación. (Está configurado por el código de inicio para que las memorias externas estén accesibles más temprano que tarde). Es probable que tenga que proporcionar, o al menos personalizar, esta parte del código de inicio. Aqui otra vez,

Una vez que el controlador de memoria externa esté configurado correctamente, el microcontrolador debería poder leer y escribir en la SRAM externa sin ningún código de controlador adicional. El microcontrolador también debería poder leer desde el flash externo sin ningún código de controlador especial. Sin embargo, escribir en el flash externo requerirá un código de controlador especial que deberá incorporar en su programa. Consulte la hoja de datos de la pieza del flash para conocer los algoritmos de borrado y programación necesarios para reprogramar el flash. Una vez más, un ejemplo de placa de evaluación sería una buena referencia.

(Si no necesita reprogramar el flash externo en tiempo de ejecución, es posible que no necesite el código del controlador de flash. Por ejemplo, puede arreglárselas reprogramando el flash a través de JTAG con una aplicación especial de programación de flash en su PC .)

No estoy familiarizado con el gestor de arranque interno provisto con este microcontrolador. Sospecho que lee el código del UART y lo copia en la SRAM interna y luego lo ejecuta. Dudo que este cargador de arranque admita sus memorias externas automáticamente. Pero es posible que pueda obtener el código fuente del cargador de arranque interno y luego personalizarlo agregando soporte para sus memorias externas.

Gracias por su ayuda. Hice esta pregunta hace casi 3 años cuando estaba un poco (mucho) verde.

Intentaré responder sus preguntas en el orden que tenga más sentido para mí:

¿Tendría que escribir un cargador de arranque y grabarlo manualmente en el flash externo o puedo simplemente usar el cargador de arranque interno y de alguna manera asignarlo a los dispositivos externos?

Tendrá que escribir su propio gestor de arranque para esta parte. El cargador de arranque tendrá que leer el programa almacenado en la memoria flash (probablemente usando SPI) y cargarlo en su RAM externa. En esta nota de aplicación se proporciona una buena descripción: AN10835: cargador de arranque secundario LPC2000 para la actualización de código mediante IAP

¿Solo es necesario conectarlo a través de hardware y poner LOW o HIGH en algunos pines en el arranque para que el microcontrolador reconozca esos recursos externos como propios, o también tendré que hacer algo más?

Para usar SDRAM externa, deberá configurar e inicializar correctamente el controlador de memoria externa en el dispositivo. Esto incluye configurar los pines en esa parte para sus funciones alternativas. Para esto, recomiendo estudiar detenidamente los capítulos sobre configuración de pines y el controlador de memoria externa en el manual de usuario de LPC2294. Luego, sugeriría obtener una placa de evaluación que venga con un código de demostración para configurar el controlador de memoria externo y el código de inicialización para la SDRAM en la placa de evaluación. Una búsqueda rápida en Google resultó en esta placa de evaluación: LPC-L2294-1MB (www.olimex.com/Products/ARM/NXP/LPC-L2294-1MB/), que también tiene un código de cargador de arranque. Probablemente puedas encontrar otros.

Una vez que sienta que comprende lo que están haciendo el código de inicialización de EMC y SDRAM, puede pensar en seleccionar una SDRAM diferente para su aplicación. Debería poder leer la hoja de datos y averiguar qué modificaciones necesita hacer en el código de inicialización desde ese punto. Desafortunadamente, configurar el EMC para SDRAM externo por primera vez no es trivial en comparación con otras configuraciones de periféricos. Le sugiero que haga uso de los recursos y foros en LPCWare (www.lpcware.com) para ayudarlo en sus esfuerzos.

Lo que quiero hacer es conectar esos circuitos integrados al microcontrolador para expandir su memoria de programa y memoria de datos automáticamente (lo que significa que no quiero tener que crear un método para escribir en el flash o SDRAM, quiero que el microcontrolador para poder decir que tiene esos recursos, y usarlos como si fueran las memorias en chip del microcontrolador).

Como mencioné, para FLASH, probablemente esté atascado implementando un gestor de arranque personalizado como se describe en AppNote. En el caso de la SDRAM, habrá un rango de memoria que se extenderá desde alguna dirección base definida para la SDRAM externa. Efectivamente, el microcontrolador sabe usar el controlador de memoria externo cuando ejecuta instrucciones que acceden a esas direcciones, por lo que es bastante fluido durante el desarrollo de la aplicación una vez que está configurado. Para comprender mejor cómo funciona el controlador de memoria externa con la memoria dinámica, le sugiero que lea también la documentación técnica proporcionada por ARM: ARM PrimeCell™ MultiPort Memory Controller (PL176) Technical Reference Manual