Activity Forums Questions & Troubleshooting Software & Firmware OTA firmware upload Reply To: OTA firmware upload

  • Lukas

    Member
    May 18, 2021 at 9:39 am

    Hi,

    we have invested noticeable amout of time to let this running without any positive result.

    In general there are two mainstream solutions for the Arduino OTA remote update:

    1/ Data transfer done in sketch context:

    User
    sketch includes library (e.g. by jandrassy) which broadcasts “here I am ready
    for OTA” and listens on a port for incoming binary;
    When the
    new binary is coming (e.g. from Arduino IDE in the local network) is
    stores the data into unused part of the program flash memory (“second
    partition”);
    And resets
    the board;
    Special
    bootloader based on Optiboot then copies binary from second partition to
    the first one and resets the board;
    The new
    sketch starts;<div>

    2/ Data transfer done in bootloader context:

    User
    sketch is commanded to reset the board (via Ethernet or Serial line, or
    button … );
    Special
    bootloader based on Ariadne creates TFTP server and waits for new binary;
    If it is
    coming it flashes it directly to the flash memory and restarts the board;

    But there are also other options:

    Use
    solution 1, but implement a periodical check of some http server;
    In a case
    of a new FW available it downloads it to the second partition and resets
    the device …

    Nevertheless – all solutions need a special bootloader and until now we were not able to run such a bootloader on CONTROLLINO.

    In general – each existing OTA solution for Arduino boards requires local Ethernet access – so if you need to do it remotely, there is necessary to have some kind of a gateway. Reuse existing solutions for CONTROLLINO is very complicated and up to now we have failed to let it running. Theoretically it is possible to directly access some remote server from CONTROLLINO, but without any sufficient security.

    Any hint from your side?

    </div>