Skip to content

Commit 4ed1b38

Browse files
authored
Merge pull request #75 from espressif/fix/esp8266_flash_config
fix(esp8266): Use custom flash config due to different ROM implementation
2 parents c256d8f + 3eb4aa1 commit 4ed1b38

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

src/target/common/src/flash.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ void __attribute__((weak)) stub_target_reset_default_spi_pins(void)
4545
#endif
4646
}
4747

48-
int stub_target_flash_update_config(uint32_t flash_id,
49-
uint32_t flash_size,
50-
uint32_t block_size,
51-
uint32_t sector_size,
52-
uint32_t page_size,
53-
uint32_t status_mask)
48+
int __attribute__((weak)) stub_target_flash_update_config(uint32_t flash_id,
49+
uint32_t flash_size,
50+
uint32_t block_size,
51+
uint32_t sector_size,
52+
uint32_t page_size,
53+
uint32_t status_mask)
5454
{
5555
int res = esp_rom_spiflash_config_param(flash_id, flash_size, block_size, sector_size, page_size, status_mask);
5656
if (res != ESP_ROM_SPIFLASH_RESULT_OK) {

src/target/esp8266/src/flash.c

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,17 @@
1616

1717
#include <soc/spi_mem_compat.h>
1818

19-
extern esp_rom_spiflash_chip_t g_rom_flashchip;
19+
// ESP8266 contains g_rom_flashchip, but it is in different order than esp_rom_spiflash_chip_t,
20+
// esp_rom_spiflash_config_param might take also different order of parameters but due to missing
21+
// possibility to check in ROM code custom implementation seems like okay solution preventing
22+
// possible future issues.
23+
static esp_rom_spiflash_chip_t g_rom_flashchip_custom = {
24+
.block_size = STUB_FLASH_BLOCK_SIZE,
25+
.sector_size = STUB_FLASH_SECTOR_SIZE,
26+
.page_size = STUB_FLASH_PAGE_SIZE,
27+
.status_mask = STUB_FLASH_STATUS_MASK,
28+
};
29+
2030
extern int esp_rom_spiflash_write(uint32_t flash_addr, const void *data, uint32_t size);
2131
extern void esp_rom_spiflash_attach(void);
2232
extern void esp_rom_spiflash_select_padsfunc(void);
@@ -31,7 +41,23 @@ void stub_target_reset_default_spi_pins(void)
3141

3242
esp_rom_spiflash_chip_t *stub_target_flash_get_config(void)
3343
{
34-
return &g_rom_flashchip;
44+
return &g_rom_flashchip_custom;
45+
}
46+
47+
int stub_target_flash_update_config(uint32_t flash_id,
48+
uint32_t flash_size,
49+
uint32_t block_size,
50+
uint32_t sector_size,
51+
uint32_t page_size,
52+
uint32_t status_mask)
53+
{
54+
g_rom_flashchip_custom.flash_id = flash_id;
55+
g_rom_flashchip_custom.chip_size = flash_size;
56+
g_rom_flashchip_custom.block_size = block_size;
57+
g_rom_flashchip_custom.sector_size = sector_size;
58+
g_rom_flashchip_custom.page_size = page_size;
59+
g_rom_flashchip_custom.status_mask = status_mask;
60+
return STUB_LIB_OK;
3561
}
3662

3763
void stub_target_flash_attach(uint32_t ishspi, bool legacy)

0 commit comments

Comments
 (0)