Skip to content

uf2ota library

uf2ota library allows to write a LibreTiny UF2 file to the flash, while parsing all the necessary tags. It manages the target partitions, compatibility checks, and works on top of the FAL provided by FlashDB.

Usage example

uint8_t target     = 1;          // target OTA scheme - 1 or 2
uint32_t family    = F_RTL8710B; // chip's UF2 family ID
uf2_ota_t *ctx     = uf2_ctx_init(target, family);
uf2_info_t *info   = uf2_info_init(); // optional, for getting firmware info
uf2_block_t *block = (uf2_block_t *)malloc(UF2_BLOCK_SIZE);
uf2_err_t err;

// ... // read the first header block (512 bytes) into *block

// check the block for validity
err = uf2_check_block(ctx, block);
if (err > UF2_ERR_IGNORE)
    // handle the error
    return;

// parse the header block
// note: if you don't need info, you can skip this step and call uf2_write() directly
err = uf2_parse_header(ctx, block, info);
if (err)
    // handle the error
    return;

while (/* have input data */) {

    // ... // read the next block into *block

    // check the block for validity
    err = uf2_check_block(ctx, block);
    if (err == UF2_ERR_IGNORE)
        // skip this block
        continue;
    if (err)
        // handle the error
        return;

    // write the block to flash
    err = uf2_write(ctx, block);
    if (err > UF2_ERR_IGNORE)
        // handle the error
        return;
}

// finish the update process

// ... // activate your new OTA partition

// cleanup
free(ctx);
free(block);
uf2_info_free(info);