*
* @param esp_rom_spiflash_read_mode_t mode : QIO/QOUT/DIO/DOUT/FastRD/SlowRD.
*
- * @param uint8_t legacy: In legacy mode, more SPI command is used in line.
- *
- * @return ESP_ROM_SPIFLASH_RESULT_OK : config OK.
- * ESP_ROM_SPIFLASH_RESULT_ERR : config error.
- * ESP_ROM_SPIFLASH_RESULT_TIMEOUT : config timeout.
- */
-esp_rom_spiflash_result_t esp_rom_spiflash_config_readmode(esp_rom_spiflash_read_mode_t mode, bool legacy);
-
-/**
- * @brief Config SPI Flash read mode when Flash is running in some mode.
- * Please do not call this function in SDK.
- *
- * @param esp_rom_spiflash_read_mode_t mode : QIO/QOUT/DIO/DOUT/FastRD/SlowRD.
+ * This function does not try to set the QIO Enable bit in the status register, caller is responsible for this.
*
* @return ESP_ROM_SPIFLASH_RESULT_OK : config OK.
* ESP_ROM_SPIFLASH_RESULT_ERR : config error.
* ESP_ROM_SPIFLASH_RESULT_TIMEOUT : config timeout.
*/
-esp_rom_spiflash_result_t esp_rom_spiflash_master_config_readmode(esp_rom_spiflash_read_mode_t mode);
+esp_rom_spiflash_result_t esp_rom_spiflash_config_readmode(esp_rom_spiflash_read_mode_t mode);
/**
* @brief Config SPI Flash clock divisor.
static esp_rom_spiflash_result_t esp_rom_spiflash_enable_write(esp_rom_spiflash_chip_t *spi);
-static esp_rom_spiflash_result_t esp_rom_spiflash_enable_qmode(esp_rom_spiflash_chip_t *spi);
-static esp_rom_spiflash_result_t esp_rom_spiflash_disable_qmode(esp_rom_spiflash_chip_t *spi);
-
//only support spi1
static esp_rom_spiflash_result_t esp_rom_spiflash_erase_chip_internal(esp_rom_spiflash_chip_t *spi)
return ESP_ROM_SPIFLASH_RESULT_OK;
}
-static esp_rom_spiflash_result_t esp_rom_spiflash_enable_qmode(esp_rom_spiflash_chip_t *spi)
-{
- uint32_t flash_status;
- uint32_t status;
- //read QE bit, not write if QE
- if (ESP_ROM_SPIFLASH_RESULT_OK != esp_rom_spiflash_read_statushigh(spi, &status)) {
- return ESP_ROM_SPIFLASH_RESULT_ERR;
- }
- if (status & ESP_ROM_SPIFLASH_QE) {
- return ESP_ROM_SPIFLASH_RESULT_OK;
- }
-
- //enable 2 byte status writing
- SET_PERI_REG_MASK(PERIPHS_SPI_FLASH_CTRL, ESP_ROM_SPIFLASH_TWO_BYTE_STATUS_EN);
-
- if ( ESP_ROM_SPIFLASH_RESULT_OK != esp_rom_spiflash_enable_write(spi)) {
- return ESP_ROM_SPIFLASH_RESULT_ERR;
- }
-
- esp_rom_spiflash_read_status(spi, &flash_status);
-
- if ( ESP_ROM_SPIFLASH_RESULT_OK != esp_rom_spiflash_write_status(spi, flash_status | ESP_ROM_SPIFLASH_QE)) {
- return ESP_ROM_SPIFLASH_RESULT_ERR;
- }
-
- return ESP_ROM_SPIFLASH_RESULT_OK;
-}
-
-static esp_rom_spiflash_result_t esp_rom_spiflash_disable_qmode(esp_rom_spiflash_chip_t *spi)
-{
- uint32_t flash_status;
- uint32_t status;
-
- //read QE bit, not write if not QE
- if (ESP_ROM_SPIFLASH_RESULT_OK != esp_rom_spiflash_read_statushigh(spi, &status)) {
- return ESP_ROM_SPIFLASH_RESULT_ERR;
- }
- //ets_printf("status %08x, line:%u\n", status, __LINE__);
-
- if (!(status & ESP_ROM_SPIFLASH_QE)) {
- return ESP_ROM_SPIFLASH_RESULT_OK;
- }
-
- //enable 2 byte status writing
- SET_PERI_REG_MASK(PERIPHS_SPI_FLASH_CTRL, ESP_ROM_SPIFLASH_TWO_BYTE_STATUS_EN);
-
- if ( ESP_ROM_SPIFLASH_RESULT_OK != esp_rom_spiflash_enable_write(spi)) {
- return ESP_ROM_SPIFLASH_RESULT_ERR;
- }
-
- esp_rom_spiflash_read_status(spi, &flash_status);
- //keep low 8 bit
- if ( ESP_ROM_SPIFLASH_RESULT_OK != esp_rom_spiflash_write_status(spi, flash_status & 0xff)) {
- return ESP_ROM_SPIFLASH_RESULT_ERR;
- }
-
- return ESP_ROM_SPIFLASH_RESULT_OK;
-}
-
static void spi_cache_mode_switch(uint32_t modebit)
{
if ((modebit & SPI_FREAD_QIO) && (modebit & SPI_FASTRD_MODE)) {
}
-esp_rom_spiflash_result_t esp_rom_spiflash_config_readmode(esp_rom_spiflash_read_mode_t mode, bool legacy)
+esp_rom_spiflash_result_t esp_rom_spiflash_config_readmode(esp_rom_spiflash_read_mode_t mode)
{
uint32_t modebit;
default : modebit = 0;
}
- if ((ESP_ROM_SPIFLASH_QIO_MODE == mode) || (ESP_ROM_SPIFLASH_QOUT_MODE == mode)) {
- esp_rom_spiflash_enable_qmode(&g_rom_spiflash_chip);
- } else {
- //do not need disable QMode in faster boot
- if (legacy) {
- esp_rom_spiflash_disable_qmode(&g_rom_spiflash_chip);
- }
- }
-
SET_PERI_REG_MASK(PERIPHS_SPI_FLASH_CTRL, modebit);
SET_PERI_REG_MASK(SPI_CTRL_REG(0), modebit);
spi_cache_mode_switch(modebit);
uint32_t sector_num_per_block;
//set read mode to Fastmode ,not QDIO mode for erase
- esp_rom_spiflash_config_readmode(ESP_ROM_SPIFLASH_SLOWRD_MODE, true);
+ //
+ // TODO: this is probably a bug as it doesn't re-enable QIO mode, not serious as this
+ // function is not used in IDF.
+ esp_rom_spiflash_config_readmode(ESP_ROM_SPIFLASH_SLOWRD_MODE);
//check if area is oversize of flash
if ((start_addr + area_len) > g_rom_spiflash_chip.chip_size) {