mirror of
https://github.com/espressif/esp-idf
synced 2025-03-10 01:29:21 -04:00
spi_flash: fix the corruption of ROM after calling bootloader_execute_flash_command
The user register, especially dummy related ones, needs to be restored, otherwise the ROM function will not work. Introduced in dd40123129bc5670ae081c31d519907f0125e4db.
This commit is contained in:
parent
e00f6cbde9
commit
d4fd54f8ce
@ -549,6 +549,8 @@ IRAM_ATTR static uint32_t bootloader_flash_execute_command_common(
|
|||||||
assert(mosi_len <= 32);
|
assert(mosi_len <= 32);
|
||||||
assert(miso_len <= 32);
|
assert(miso_len <= 32);
|
||||||
uint32_t old_ctrl_reg = SPIFLASH.ctrl.val;
|
uint32_t old_ctrl_reg = SPIFLASH.ctrl.val;
|
||||||
|
uint32_t old_user_reg = SPIFLASH.user.val;
|
||||||
|
uint32_t old_user1_reg = SPIFLASH.user1.val;
|
||||||
#if CONFIG_IDF_TARGET_ESP32
|
#if CONFIG_IDF_TARGET_ESP32
|
||||||
SPIFLASH.ctrl.val = SPI_WP_REG_M; // keep WP high while idle, otherwise leave DIO mode
|
SPIFLASH.ctrl.val = SPI_WP_REG_M; // keep WP high while idle, otherwise leave DIO mode
|
||||||
#else
|
#else
|
||||||
@ -595,6 +597,8 @@ IRAM_ATTR static uint32_t bootloader_flash_execute_command_common(
|
|||||||
while (SPIFLASH.cmd.usr != 0) {
|
while (SPIFLASH.cmd.usr != 0) {
|
||||||
}
|
}
|
||||||
SPIFLASH.ctrl.val = old_ctrl_reg;
|
SPIFLASH.ctrl.val = old_ctrl_reg;
|
||||||
|
SPIFLASH.user.val = old_user_reg;
|
||||||
|
SPIFLASH.user1.val = old_user1_reg;
|
||||||
|
|
||||||
uint32_t ret = SPIFLASH.data_buf[0];
|
uint32_t ret = SPIFLASH.data_buf[0];
|
||||||
if (miso_len < 32) {
|
if (miso_len < 32) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user