Code:
extern SpiFlashChip *flashchip;
Statistics: Posted by piersfinlayson — Fri Oct 14, 2016 4:40 am
Code:
PROVIDE ( flashchip = 0x3fffc714);
Code:
PROVIDE ( flashchip = 0x3fffc718);
Statistics: Posted by piersfinlayson — Thu Oct 13, 2016 4:11 am
Code:
#include "esp_common.h"
#include "c_types.h"
#include "spi_flash.h"
extern SpiFlashChip flashchip;
#define USER_FLASH_SIZE_BYTE (16*1024*1024)
SpiFlashOpResult user_flash_erase_sector(uint16 sector)
{
uint32 chipsize = flashchip.chip_size; // backup org chip size
flashchip.chip_size=USER_FLASH_SIZE_BYTE;
uint8 status=0;
status=spi_flash_erase_sector(sector);
flashchip.chip_size = chipsize; // restore chip size
return status;
}
SpiFlashOpResult user_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size)
{
uint32 chipsize = flashchip.chip_size; // backup org chip size
flashchip.chip_size=USER_FLASH_SIZE_BYTE;
uint8 status=0;
status=spi_flash_write(des_addr,src_addr,size);
flashchip.chip_size = chipsize; // restore chip size
return status;
}
SpiFlashOpResult user_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size)
{
uint32 chipsize = flashchip.chip_size; // backup org chip size
flashchip.chip_size=USER_FLASH_SIZE_BYTE;
uint8 status=0;
status=spi_flash_read(src_addr,des_addr,size);
flashchip.chip_size = chipsize; // restore chip size
return status;
}
//========================================================
SpiFlashOpResult IRAM_ATTR SPI_block_erase_t(SpiFlashChip * spi, uint32 addr)
{
Wait_SPI_Idle(spi);
// sector erase 4Kbytes erase is sector erase.
WRITE_PERI_REG(0x60000204, addr & 0xffffff);
WRITE_PERI_REG(0x60000200, BIT23);
while(READ_PERI_REG(0x60000200)!=0);
Wait_SPI_Idle(spi);
return SPI_FLASH_RESULT_OK;
}
SpiFlashOpResult IRAM_ATTR flash_erase_block(uint32 block_num)
{
//disable icache
Cache_Read_Disable();
//wait spi idle
Wait_SPI_Idle(&flashchip);
if (block_num>= ((flashchip.chip_size)/(flashchip.block_size)))
{ return SPI_FLASH_RESULT_ERR;
}
if ( SPI_FLASH_RESULT_OK != SPI_write_enable(&flashchip))
{ return SPI_FLASH_RESULT_ERR;
}
if (SPI_FLASH_RESULT_OK != SPI_block_erase_t(&flashchip, block_num*(flashchip.block_size)))
{ return SPI_FLASH_RESULT_ERR;
}
Wait_SPI_Idle(&flashchip);
//enable icache
Cache_Read_Enable_New();
return SPI_FLASH_RESULT_OK;
}
SpiFlashOpResult IRAM_ATTR
user_flash_erase_block(uint32 block_num)
{
uint32 chipsize = flashchip.chip_size; // backup org chip size
flashchip.chip_size=USER_FLASH_SIZE_BYTE;
uint8 status=0;
vPortEnterCritical();
status = flash_erase_block(block_num);
vPortExitCritical();
flashchip.chip_size = chipsize; // restore chip size
return status;
}
Code:
#include "esp_common.h"
SpiFlashOpResult user_flash_erase_sector(uint16 sector);
SpiFlashOpResult user_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size);
SpiFlashOpResult user_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size);
SpiFlashOpResult user_flash_erase_block(uint32 block_num);
Statistics: Posted by Guest — Wed Oct 12, 2016 6:16 pm
Statistics: Posted by piersfinlayson — Wed Oct 12, 2016 4:03 am