NodeMCU NO_OS SDK 开发——Flash接口
SPI Flash接口
SPI Flash 接口位于 /ESP8266_NONOS_SDK/include/spi_flash.h。
查询SPI Flash的ID
uint32 spi_flash_get_id (void)
- 返回 spi flash id
擦除Flash扇区
SpiFlashOpResult spi_flash_erase_sector (uint16 sec)
- uint16 sec:扇区号,从扇区 0 开始计数,每扇区 4 KB
- 返回 SpiFlashOpResult
typedef enum{
SPI_FLASH_RESULT_OK,
SPI_FLASH_RESULT_ERR,
SPI_FLASH_RESULT_TIMEOUT
} SpiFlashOpResult;
写入数据到 Flash
写入数据到 Flash。 Flash 读写必须 4 字节对齐。
SpiFlashOpResult spi_flash_write (
uint32 des_addr,
uint32 *src_addr,
uint32 size
)
- uint32 des_addr:写入 Flash 目的地址
- uint32 *src_addr:写入数据的指针
- uint32 size:数据长度,单位 byte,必须 4 字节对齐进行行读写
- 返回 见上文定义
从Flash读取数据
从 Flash 读取数据。 Flash 读写必须 4 字节对⻬齐。
SpiFlashOpResult spi_flash_read(
uint32 src_addr,
uint32 * des_addr,
uint32 size
)
- uint32 des_addr:写入 Flash 目的地址
- uint32 *des_addr: 存放读取到数据的指针
- uint32 size:数据长度,单位 byte,必须 4 字节对齐进行行读写
- 返回 见上文定义
从Flash读取数据示例
uint32 value;
uint8 *addr = (uint8 *)&value;
spi_flash_read(0x3E * SPI_FLASH_SEC_SIZE, (uint32 *)addr, 4);
os_printf("0x3E sec:%02x%02x%02x%02x\r\n", addr[0], addr[1], addr[2], addr[3]);
使用带读写保护机制的方式,写入数据到 Flash
bool system_param_save_with_protect (
uint16 start_sec,
void *param,
uint16 len
)
bool system_param_load (
uint16 start_sec,
uint16 offset,
void *param,
uint16 len
)
注册用户自定义的 SPI Flash 读取接口函数
仅支持在 SPI overlap 模式下使用,请用户参考
ESP8266_NONOS_SDK\driver_lib\driver\spi_overlap.c
void spi_flash_set_read_func (user_spi_flash_read read)
typedef SpiFlashOpResult (*user_spi_flash_read)(
SpiFlashChip *spi,
uint32 src_addr,
uint32 * des_addr,
uint32 size
)
使能 flash 擦写保护
使能后,将保护 flash 不会误操作擦写了正在运行行的应用程序。
bool spi_flash_erase_protect_enable(void)
关闭 flash 擦写保护功能
bool spi_flash_erase_protect_disable(void)