Skip to content

Commit 79cc42a

Browse files
committed
Merge branch 'fix/cache_32m_map' into 'master'
fix(spi_flash): Fix the cache map 32M flash failed on esp32c5 See merge request espressif/esp-idf!42506
2 parents 7c1700b + 942f2dd commit 79cc42a

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

components/esp_rom/patches/esp_rom_spiflash.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -774,11 +774,19 @@ void esp_rom_opiflash_cache_mode_config(esp_rom_spiflash_read_mode_t mode, const
774774
// Patch for ROM function `esp_rom_opiflash_cache_mode_config`, because when dummy is 0,
775775
// `SPI_MEM_USR_DUMMY` should be 0. `esp_rom_opiflash_cache_mode_config` doesn't handle this
776776
// properly.
777-
if (cache->dummy_bit_len == 0) {
777+
uint16_t dummy_cyclelen = cache->dummy_bit_len;
778+
if (mode == ESP_ROM_SPIFLASH_DIO_MODE) {
779+
dummy_cyclelen -= 4; // wb_mode(8) / line_width(2)
780+
dummy_cyclelen += rom_spiflash_legacy_data->dummy_len_plus[0];
781+
} else if (mode == ESP_ROM_SPIFLASH_QIO_MODE) {
782+
dummy_cyclelen -= 2; // wb_mode(8) / line_width(4)
783+
dummy_cyclelen += rom_spiflash_legacy_data->dummy_len_plus[0];
784+
}
785+
if (dummy_cyclelen == 0) {
778786
REG_CLR_BIT(SPI_MEM_USER_REG(0), SPI_MEM_USR_DUMMY);
779787
} else {
780788
REG_SET_BIT(SPI_MEM_USER_REG(0), SPI_MEM_USR_DUMMY);
781-
REG_SET_FIELD(SPI_MEM_USER1_REG(0), SPI_MEM_USR_DUMMY_CYCLELEN, cache->dummy_bit_len - 1 + rom_spiflash_legacy_data->dummy_len_plus[0]);
789+
REG_SET_FIELD(SPI_MEM_USER1_REG(0), SPI_MEM_USR_DUMMY_CYCLELEN, dummy_cyclelen - 1);
782790
}
783791
REG_SET_FIELD(SPI_MEM_USER2_REG(0), SPI_MEM_USR_COMMAND_VALUE, cache->cmd);
784792
REG_SET_FIELD(SPI_MEM_USER2_REG(0), SPI_MEM_USR_COMMAND_BITLEN, cache->cmd_bit_len - 1);

0 commit comments

Comments
 (0)