¿Cómo ejecutar el firmware desde la interfaz de memoria flash externa al microcontrolador PIC?

Tengo microcontroladores PIC18 y PIC24 con 256KiB de memoria flash.

El tamaño de mi código es de 400 kB y ya no se puede almacenar en la memoria flash de esas MCU. Así que estoy pensando en usar una memoria flash externa para guardar el código del programa.

¿Puedo almacenar mi archivo ejecutable en la memoria flash externa y ejecutarlo desde allí? ¿Cómo puedo hacer eso?

¿Por qué no elige un PIC con una memoria Flash más grande? Debería ser más simple.
¿Es ese 400KiB todo el código (instrucciones)? Una gran parte de ellos son datos constantes que puede colocar solo en almacenamiento externo (eeprom I2C/SPI, tarjeta flash, etc.).
@Alin: No quiero aumentar el costo de mi proyecto y ya tengo muchos controladores con memoria flash de 256 Kb.

Respuestas (1)

Hay modelos PIC24 y dsPIC33 con flash de 512 KB.

PIC18F8622 y 8722, y algunos otros PIC18F (87J50, 97J60, por ejemplo) tienen una interfaz de bus externa, puede colocar un flash paralelo (tipo 29xx) allí y el bus externo puede direccionar hasta 2 MB.

En la hoja de datos, podemos ver que esto se puede usar para almacenar el código del programa:

El bus de memoria externa (EMB) permite que el dispositivo acceda a dispositivos de memoria externa (como Flash, EPROM, SRAM, etc.) como memoria de programa o de datos .

El uso de otros tipos de interfaz para conectarse a un flash externo puede ser problemático, ya que no podría ejecutar el código directamente desde el flash; en cambio, tendría que copiar el código en la RAM antes de ejecutarlo, pero dado que estos microcontroladores tienen recursos de RAM extremadamente limitados, esto limitaría severamente la utilidad de dicha solución (tendría que implementar algún tipo de técnica de paginación/superposición).

Aquí está la herramienta de selección de productos de Microchip, que le permite buscar modelos con ciertas funciones: http://www.microchip.com/maps/microcontroller.aspx

@Valko: Gracias por su orientación. Entonces, podemos interactuar con un tamaño de hasta 2 MB (29xx) como dijo anteriormente. No sé cómo funcionan estas cosas para codificar. Si tiene algún ejemplo, es mejor para mí.