Создание избыточности прошивки на Arduino Nano
Существует ли устоявшаяся система, которая при загрузке новой версии приложения во Flash автоматически переключается на нее, но сохраняет старую на случай, если из-за каких-то проблем нам придется вернуться к ней?
Я прошу о такой системе в целом, но также и о той, которая работает с CAN-трансивером.
@Andrew's Quest, 👍0
1 ответ
Лучший ответ:
Более мощные микроконтроллеры с большой флэш-памятью имеют разделы или банки флэш-памяти, где они могут переключаться между различными версиями прошивки. У них есть регистр для установки начального адреса, так что приложение, скомпилированное для определенного начального адреса, может работать по различным реальным адресам во флэш-памяти.
Arduino Nano не может запустить двоичный файл, скомпилированный для начального адреса 0, в любом другом месте флэш-памяти.
InternalStorageAVR в моей библиотеке ArduinoOTA может хранить загруженное OTA обновление в верхней половине флэш-памяти классического AVR. Но программа не может там работать. Загрузчик должен скопировать его по адресу 0 и запустить оттуда. Поэтому предыдущая версия теряется. В большой флэш-памяти Arduino Mega, возможно, он мог бы хранить копию предыдущей версии, но не в Nano. Любая логика для этого сделала бы скетч больше, чем треть флэш-памяти.
РЕДАКТИРОВАТЬ:
Если загрузчик выполняет передачу обновленного двоичного кода, то он может сначала скопировать старый скетч в верхнюю половину флэш-памяти, а затем записать новый скетч с адреса 0. При сбросе сторожевого таймера загрузчик может скопировать старый скетч обратно.
Optiboot можно модифицировать для этого. В качестве отправной точки, вот моя функция copy_flash_pages
для Optiboot.
- Создать систему горячей замены прошивки на Arduino Nano?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как создать шестнадцатеричный файл для прошивки arduino?
- Проблема с памятью Arduino со старыми чипами дисплея HP HDSP-2000
- привязка samd21, изменить базовый адрес с дефолтного
- Стирание 1 байта внешней Flash памяти (winbond)
- SPIMemory не всегда правильно пишет
- Расширить пространство программы, избавившись от загрузчика на NANO