esp-idf/examples/storage/partition_api/partition_find/README.md

3.7 KiB

Finding Partitions Example

This example demonstrates how to use the partition API functions esp_partition_find and esp_partition_find_first to search the device partition table. These functions return the matching partitions given a set of constraints. By constraints we simply mean properties that returned results should match - notably partition type, subtype and label/name. In the case of esp_partition_find_first, the first matching instance is returned; for esp_partition_find, an iterator is returned iterating over matching instances.

Example Flow

The example uses a custom partition table. The first part uses esp_partition_find_first to search for partition instances using two constraints - type and subtype. However, the partition table contains partitions with same type/subtype combination. In order to differentiate these partitions, a third constraint - the label, is specified.

The second part shows how to iterate over partitions that match certain constraints, manually checking the properties of each iterated partition. The iterator is obtained using esp_partition_find and is released after its use to avoid memory leaks.

Output

I (310) example: Printing partition table csv file contents for reference...

# Name,   Type, SubType, Offset,  Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,        data, nvs,      0x9000,  0x6000,
phy_init,   data, phy,      0xf000,  0x1000,
factory,    app,  factory,  0x10000, 1M,
storage1,    data, fat,             , 0x40000,
storage2,    data, fat,             , 0x40000,

I (350) example: ----------------Find partitions---------------
I (350) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_DATA_NVS, label NULL (unspecified)...
I (370) example:        found partition 'nvs' at offset 0x9000 with size 0x6000
I (370) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_DATA_PHY, label NULL (unspecified)...
I (390) example:        found partition 'phy_init' at offset 0xf000 with size 0x1000
I (390) example: Find partition with type ESP_PARTITION_TYPE_APP, subtype ESP_PARTITION_SUBTYPE_APP_FACTORY, label NULL (unspecified)...
I (410) example:        found partition 'factory' at offset 0x10000 with size 0x100000
I (410) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_DATA_FAT, label NULL (unspecified)...
I (430) example:        found partition 'storage1' at offset 0x110000 with size 0x40000
I (440) example: Find second FAT partition by specifying the label
I (440) example: Find partition with type ESP_PARTITION_TYPE_DATA, subtype ESP_PARTITION_SUBTYPE_DATA_FAT, label storage2...
I (450) example:        found partition 'storage2' at offset 0x150000 with size 0x40000
I (460) example: ----------------Iterate through partitions---------------
I (470) example: Iterating through app partitions...
I (480) example:        found partition 'factory' at offset 0x10000 with size 0x100000
I (480) example: Iterating through data partitions...
I (490) example:        found partition 'nvs' at offset 0x9000 with size 0x6000
I (500) example:        found partition 'phy_init' at offset 0xf000 with size 0x1000
I (500) example:        found partition 'storage1' at offset 0x110000 with size 0x40000
I (510) example:        found partition 'storage2' at offset 0x150000 with size 0x40000
I (520) example: Example end

Others

Detailed functional description of partition API is provided in documentation.

See the README.md file in the upper level 'examples' directory for more information about examples.