Как выполнить прошивку с интерфейса внешней флэш-памяти на микроконтроллер PIC?

У меня есть микроконтроллеры PIC18 и PIC24 с 256 КБ флэш-памяти.

Размер моего кода составляет 400 КБ, и его больше нельзя хранить во флэш-памяти этих микроконтроллеров. Поэтому я думаю об использовании внешней флэш-памяти для хранения программного кода.

Могу ли я сохранить свой исполняемый файл на внешней флэш-памяти и запустить его оттуда? Как мне это сделать?

Почему бы вам вместо этого не выбрать PIC с большей флэш-памятью? Должно быть проще.
Это весь код (инструкции) размером 400 КБ? Из большей части это постоянные данные, которые вы можете поместить только во внешнее хранилище (I2C/SPI eeprom, флэш-карту и т. д.).
@Alin: Я не хочу увеличивать стоимость своего проекта, и у меня уже есть много контроллеров с флэш-памятью 256 КБ.

Ответы (1)

Существуют модели PIC24 и dsPIC33 с флэш-памятью 512 КБ.

PIC18F8622 и 8722, а также некоторые другие PIC18F (например, 87J50, 97J60) имеют интерфейс внешней шины, туда можно поставить параллельную флэш-память (типа 29xx), а внешняя шина может адресовать до 2 МБ.

Из таблицы видно, что это можно использовать для хранения программного кода:

Шина внешней памяти (EMB) позволяет устройству получать доступ к устройствам внешней памяти (таким как Flash, EPROM, SRAM и т. д.) в качестве памяти программ или данных .

Использование других типов интерфейса для подключения к внешней флэш-памяти может быть проблематичным, поскольку вы не сможете запустить код непосредственно из флэш-памяти, вместо этого вам придется скопировать код в ОЗУ перед его запуском, но, поскольку эти микроконтроллеры имеют чрезвычайно ограниченные ресурсы оперативной памяти, это серьезно ограничило бы полезность такого решения (вам пришлось бы реализовать какую-то технику подкачки/наложения).

Вот инструмент выбора продукта Microchip, позволяющий искать модели с определенными функциями: http://www.microchip.com/maps/microcontroller.aspx

@Valko: Спасибо за ваше руководство. Таким образом, мы можем взаимодействовать с размером до 2 МБ (29xx), как вы сказали ранее. Я не знаю, как это работает для кодирования. Если у вас есть какой-либо пример, чем это лучше для меня.