NodeMCU NO_OS SDK 开发——Flash接口

NodeMCU NO_OS SDK 开发——Flash接口

  • SPI Flash接口
  • 查询SPI Flash的ID
  • 擦除Flash扇区
  • 写入数据到 Flash
  • 从Flash读取数据
  • 从Flash读取数据示例
  • 使用带读写保护机制的方式,写入数据到 Flash
  • 注册用户自定义的 SPI Flash 读取接口函数
  • 使能 flash 擦写保护
  • 关闭 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)

你可能感兴趣的:(NodeMCU,单片机,嵌入式硬件)