Bootloader ATmega 2560 for OTA



  • Hi,

    I have been searching the web for a while now, but I am still confused about all the OTA stuff, which seems only to work on 328 devices for MySensors.

    For a sensor node I want to use an ATmega 2560 (can't use 328), which is supported by the current Optiboot v8 by westfw (https://forum.arduino.cc/index.php?topic=570160.0).

    Is it possible to use optiboot v8 with MySensors? The DualOptiboot project does not support the 2560, was not updated for a long time and looks deserted to me.

    I have been digging around in optiboot's and dualoptiboot's code for some time, but I am not sure where to begin yet (as I did not understand much of the bootloader magic)

    The current optiboot v8 also supports direct EEPROM writes via the dospm function. (see git optiboot\optiboot\examples\test_dospm). Does this help in any way to integrate it into MySensors?

    If you could point me in a promising direction I would be happy to contribute the results 🙂

    Martin



  • After some intensified research, I am pretty sure, that my desired OTA (MySensor sketch directly to MCU flash without requiring external flash (DualOptiBoot requires flash) and being transport-agnostic (not MYSBootloader uses RF24)) with a 2560 can be done with the optiboot-fork bootloader by MCUdude (for the ATMega 2560 the variant is called "MegaCore", see https://github.com/MCUdude/MegaCore/). The MegaCore provides some macros for the SPM (storage programable memory) functions, which are passed to the bootloader like __boot_page_fill_short, __boot_page_write_short and __boot_page_erase_short.

    The repository comes with precompiled bootloaders as .hex files and a nice Arduino GUI integration (see wiki).

    My next step is to integrate the example sketch SerialReadWrite.ino into MySensors/core/MyOTAFirmwareUpdate.[c|h].

    Currently I am still a bit confused about the used defines. As far as I understand the

    #define MCUBOOT_PRESENT represents the MySensors bootloader by Tekka,
    the #else or #ifndef MCUBOOT_PRESENT branches are for the DualOptiboot bootloader (which is somehow deprecated).

    It looks like several defines are declared in #include "generated_dts_board.h", but I cannot find the file. Also there must be some kind of #include towards the dualoptiboot or mysensors specific bootloader header files, right?


 

204
Online

8.7k
Users

9.5k
Topics

99.5k
Posts