Skip to content

Commit 0a68207

Browse files
committed
feat: add S3 initial read support
1 parent 677594d commit 0a68207

File tree

16 files changed

+200
-1
lines changed

16 files changed

+200
-1
lines changed

include/esp-stub-lib/flash.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,19 @@ void stub_lib_flash_deinit(const void *state);
4848
stub_lib_err_t stub_lib_flash_get_info(stub_lib_flash_info_t *info);
4949

5050
void stub_lib_flash_info_print(const stub_lib_flash_info_t *info);
51+
52+
/**
53+
* @brief Read data from SPI flash into a buffer.
54+
*
55+
* @param addr Address to read from. Should be 4 bytes aligned.
56+
* @param buffer Destination buffer
57+
* @param size Number of bytes to read. Should be 4 bytes aligned.
58+
*
59+
* @return Result:
60+
* - STUB_LIB_OK if success
61+
* - STUB_LIB_ERR_FLASH_READ_UNALIGNED
62+
* - STUB_LIB_ERR_FLASH_READ_ROM_ERR
63+
*/
5164
stub_lib_err_t stub_lib_flash_read_buff(uint32_t addr, void *buffer, uint32_t size);
5265
stub_lib_err_t stub_lib_flash_write_buff(uint32_t addr, const void *buffer, uint32_t size, int encrypt);
5366
stub_lib_err_t stub_lib_flash_erase_area(uint32_t addr, uint32_t size);

include/private/stub_lib_err.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
X(STUB_LIB_FAIL, (STUB_LIB_ERR_END - 1), "Generic esp-stub-lib failure") \
1515
\
1616
X(STUB_LIB_ERR_FLASH_INIT_UNKNOWN_FLASH_ID, 0x1000, "Unknown flash size, unknown flash id") \
17+
X(STUB_LIB_ERR_FLASH_READ_UNALIGNED, 0x1001, "") \
18+
X(STUB_LIB_ERR_FLASH_READ_ROM_ERR, 0x1002, "") \
1719

1820
// Only numerical values, used in esp-stub-lib sources
1921

src/flash.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,8 @@ void stub_lib_flash_info_print(const stub_lib_flash_info_t *info)
6161
info->encrypted
6262
);
6363
}
64+
65+
stub_lib_err_t stub_lib_flash_read_buff(uint32_t addr, void *buffer, uint32_t size)
66+
{
67+
return stub_target_flash_read_buff(addr, buffer, size);
68+
}

src/target/common/include/private/rom_flash.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ typedef struct esp_rom_spiflash_chip {
1818
uint32_t status_mask;
1919
} esp_rom_spiflash_chip_t;
2020

21+
typedef enum {
22+
ESP_ROM_SPIFLASH_RESULT_OK,
23+
ESP_ROM_SPIFLASH_RESULT_ERR,
24+
ESP_ROM_SPIFLASH_RESULT_TIMEOUT
25+
} esp_rom_spiflash_result_t;
26+
2127
/**
2228
* @brief SPI Flash init
2329
*
@@ -65,3 +71,23 @@ extern void esp_rom_spi_flash_update_id(void);
6571
extern int esp_rom_spiflash_config_param(uint32_t flash_id, uint32_t chip_size,
6672
uint32_t block_size, uint32_t sector_size,
6773
uint32_t page_size, uint32_t status_mask);
74+
75+
/**
76+
* @brief Read data from Flash
77+
*
78+
* @param src_addr Address to read from. Should be 4 bytes aligned.
79+
* @param buffer Destination buffer
80+
* @param size Number of bytes to read. Should be 4 bytes aligned.
81+
*
82+
* @return Result
83+
* - ESP_ROM_SPIFLASH_RESULT_OK
84+
* - ESP_ROM_SPIFLASH_RESULT_ERR
85+
*/
86+
esp_rom_spiflash_result_t esp_rom_spiflash_read(uint32_t src_addr, uint32_t *dest, int32_t len);
87+
88+
/**
89+
* @brief Check if Flash is OPI.
90+
*
91+
* @return true if eFuse indicates an OPI flash is attached.
92+
*/
93+
bool ets_efuse_flash_octal_mode(void);

src/target/common/include/private/rom_flash_config.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,27 @@ typedef struct {
1414
uint8_t sig_matrix;
1515
} esp_rom_spiflash_legacy_data_t;
1616

17+
typedef struct {
18+
uint8_t pp_addr_bit_len;
19+
uint8_t se_addr_bit_len;
20+
uint8_t be_addr_bit_len;
21+
uint8_t rd_addr_bit_len;
22+
uint32_t read_sub_len;
23+
uint32_t write_sub_len;
24+
void* unlock;
25+
void* erase_sector;
26+
void* erase_block;
27+
void* read;
28+
void* write;
29+
void* encrypt_write;
30+
void* check_sus;
31+
void* wren;
32+
void* wait_idle;
33+
void* erase_area;
34+
} esp_rom_spiflash_legacy_funcs_t;
35+
1736
extern esp_rom_spiflash_legacy_data_t *rom_spiflash_legacy_data;
37+
extern esp_rom_spiflash_legacy_funcs_t *rom_spiflash_legacy_funcs;
1838

1939
#define g_rom_flashchip (rom_spiflash_legacy_data->chip)
2040
#define g_rom_spiflash_dummy_len_plus (rom_spiflash_legacy_data->dummy_len_plus)

src/target/common/include/target/flash.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
#include <stdint.h>
1010

11+
#include <stub_lib_err.h>
12+
1113
struct esp_rom_spiflash_chip;
1214

1315
/**
@@ -49,3 +51,19 @@ void stub_target_flash_update_config(uint32_t flash_id, uint32_t flash_size);
4951
* - 0 if flash_id is unknown
5052
*/
5153
uint32_t stub_target_flash_id_to_flash_size(uint32_t flash_id);
54+
55+
/**
56+
* @brief Read data.
57+
*
58+
* Check alignment, call a ROM function.
59+
*
60+
* @param addr Address to read from. Should be 4 bytes aligned.
61+
* @param buffer Destination buffer
62+
* @param size Number of bytes to read. Should be 4 bytes aligned.
63+
*
64+
* @return Result:
65+
* - STUB_LIB_OK if success
66+
* - STUB_LIB_ERR_FLASH_READ_UNALIGNED
67+
* - STUB_LIB_ERR_FLASH_READ_ROM_ERR
68+
*/
69+
stub_lib_err_t stub_target_flash_read_buff(uint32_t addr, void *buffer, uint32_t size);

src/target/esp32/src/flash.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,12 @@ uint32_t stub_target_flash_get_flash_id(void)
3434
// TODO: Implement
3535
return 0;
3636
}
37+
38+
stub_lib_err_t stub_target_flash_read_buff(uint32_t addr, void *buffer, uint32_t size)
39+
{
40+
(void)addr;
41+
(void)buffer;
42+
(void)size;
43+
// TODO: Implement
44+
return STUB_LIB_FAIL;
45+
}

src/target/esp32c2/src/flash.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,12 @@ uint32_t stub_target_flash_get_flash_id(void)
3232
esp_rom_spi_flash_update_id();
3333
return stub_target_flash_get_config()->flash_id;
3434
}
35+
36+
stub_lib_err_t stub_target_flash_read_buff(uint32_t addr, void *buffer, uint32_t size)
37+
{
38+
(void)addr;
39+
(void)buffer;
40+
(void)size;
41+
// TODO: Implement
42+
return STUB_LIB_FAIL;
43+
}

src/target/esp32c3/src/flash.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,12 @@ uint32_t stub_target_flash_get_flash_id(void)
3232
esp_rom_spi_flash_update_id();
3333
return stub_target_flash_get_config()->flash_id;
3434
}
35+
36+
stub_lib_err_t stub_target_flash_read_buff(uint32_t addr, void *buffer, uint32_t size)
37+
{
38+
(void)addr;
39+
(void)buffer;
40+
(void)size;
41+
// TODO: Implement
42+
return STUB_LIB_FAIL;
43+
}

src/target/esp32c5/src/flash.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,12 @@ uint32_t stub_target_flash_get_flash_id(void)
3232
esp_rom_spi_flash_update_id();
3333
return stub_target_flash_get_config()->flash_id;
3434
}
35+
36+
stub_lib_err_t stub_target_flash_read_buff(uint32_t addr, void *buffer, uint32_t size)
37+
{
38+
(void)addr;
39+
(void)buffer;
40+
(void)size;
41+
// TODO: Implement
42+
return STUB_LIB_FAIL;
43+
}

0 commit comments

Comments
 (0)