Скажите пожалуйста! Можно ли записывать программу написанную на PIC32 не на внутреннюю Flash, а на внешнюю EEPROM подключенную по SPI.
В дальнейшем прошивка записанная на EEPROM может изменятся, с помощью внешней программы по какому нибудь интерфейсу.
Заранее спасибо!
Redguy
Apr 10 2015, 04:11
И теоретически и практически такое возможно. Причем это выполнимо не только для PIC32, а для микроконтроллеров в целом. Но эта задача не настолько проста, и сколько тут всплывет подводных камней даже предположить сложно.
Я бы пошел следующим путем. Накатал какую-то минимальную программу, которая будет по SPI читать основной код, подгружать его в оперативку или во внутреннюю flash и запускать его на выполнение, при этом возможно использовал бы DMA. Тут возникает много моментов: насколько большой должен быть выполняемый код, будут ли в нем пересечения с обслуживающей программой по ресурсам, как регулярно надо запускать обслуживающую программу, нужно ли на неё постоянно переключаться для какого-либо монитора ситуации (по принципу работы операционки) и т.д.
По сути bootloader на этот вариант похож - по определенным командам/условиям запускается, загружает что надо, запускает загруженное и самоустраняется. Реально у меня до такой ситуации и доходило: максимум - загрузка нового образа рабочей программы на внешнюю Flash, ее контроль на целостность и замена текущей программы на новый образ с последующим запуском и инициирование загрузки новой прошивки по команде полученной через USART.
Василий Иванов
Jun 2 2015, 08:02
В PIC32 внутри есть Program Flash и Boot Flash. Если поизвращаться с линкером, то в Boot Flash можно освободить достаточно много места для бутлоадера, который будет перекидывать образ прошивки с внешней ЕЕпром во внутреннюю память Program Flash. Это удобно тем, что вся Program Flash только под прошивку и не приходится бояться что кто-то попортит загрузчик. А загрузочную область можно защитить фьюзами от записи резактирования и даже вызовов из прошивки.