1
6
7
8
9
10
11
12
13
14
15
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
39
47
48
51
57
58
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
78
79
80
81
82
83
84
85
88
89
90
96
97
98
99
104
105
106
107
108
109
110
111
114
118
119
120
121
122
123
/* ... */
#pragma once
#include <inttypes.h>
#include "esp_assert.h"
#ifdef __cplusplus
extern "C" {
#endif
/* ... */
typedef enum {
ESP_CHIP_ID_ESP32 = 0x0000,
ESP_CHIP_ID_ESP32S2 = 0x0002,
ESP_CHIP_ID_ESP32C3 = 0x0005,
ESP_CHIP_ID_ESP32S3 = 0x0009,
ESP_CHIP_ID_ESP32C2 = 0x000C,
ESP_CHIP_ID_ESP32C6 = 0x000D,
ESP_CHIP_ID_ESP32H2 = 0x0010,
ESP_CHIP_ID_ESP32P4 = 0x0012,
ESP_CHIP_ID_ESP32C5 = 0x0017,
ESP_CHIP_ID_INVALID = 0xFFFF
}{ ... } __attribute__((packed)) esp_chip_id_t;
ESP_STATIC_ASSERT(sizeof(esp_chip_id_t) == 2, "esp_chip_id_t should be 16 bit");
/* ... */
typedef enum {
ESP_IMAGE_SPI_MODE_QIO,
ESP_IMAGE_SPI_MODE_QOUT,
ESP_IMAGE_SPI_MODE_DIO,
ESP_IMAGE_SPI_MODE_DOUT,
ESP_IMAGE_SPI_MODE_FAST_READ,
ESP_IMAGE_SPI_MODE_SLOW_READ
}{ ... } esp_image_spi_mode_t;
/* ... */
typedef enum {
ESP_IMAGE_SPI_SPEED_DIV_2,
ESP_IMAGE_SPI_SPEED_DIV_3,
ESP_IMAGE_SPI_SPEED_DIV_4,
ESP_IMAGE_SPI_SPEED_DIV_1 = 0xF
}{ ... } esp_image_spi_freq_t;
/* ... */
typedef enum {
ESP_IMAGE_FLASH_SIZE_1MB = 0,
ESP_IMAGE_FLASH_SIZE_2MB,
ESP_IMAGE_FLASH_SIZE_4MB,
ESP_IMAGE_FLASH_SIZE_8MB,
ESP_IMAGE_FLASH_SIZE_16MB,
ESP_IMAGE_FLASH_SIZE_32MB,
ESP_IMAGE_FLASH_SIZE_64MB,
ESP_IMAGE_FLASH_SIZE_128MB,
ESP_IMAGE_FLASH_SIZE_MAX
}{ ... } esp_image_flash_size_t;
#define ESP_IMAGE_HEADER_MAGIC 0xE9
/* ... */
typedef struct {
uint8_t magic;
uint8_t segment_count;
uint8_t spi_mode;
uint8_t spi_speed: 4;
uint8_t spi_size: 4;
uint32_t entry_addr;
uint8_t wp_pin;
/* ... */
uint8_t spi_pin_drv[3];
esp_chip_id_t chip_id;
uint8_t min_chip_rev;
/* ... */
uint16_t min_chip_rev_full;
uint16_t max_chip_rev_full;
uint8_t reserved[4];
uint8_t hash_appended;
/* ... */
}{ ... } __attribute__((packed)) esp_image_header_t;
ESP_STATIC_ASSERT(sizeof(esp_image_header_t) == 24, "binary image header should be 24 bytes");
/* ... */
typedef struct {
uint32_t load_addr;
uint32_t data_len;
}{ ... } esp_image_segment_header_t;
#define ESP_IMAGE_MAX_SEGMENTS 16
#ifdef __cplusplus
}{...}
#endif