1.3)常用API接口
第二部分:SFUD
2.1)SFUD是一款开源的串行 SPI Flash 通用驱动库,具有支持SPI/QSPI接口,面向对象(同时支持多个flash对象),可灵活性裁剪,拓展性强的特性。且Fal硬件抽象层基于SFUD万能驱动库实现!!!
2.2)使能和配置如下
2.3)具体使用
#define LOG_TAG "flash"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
#include "ph_public.h"
static int rt_hw_spi_flash_init(void)
{
static struct rt_spi_device *spi_device = RT_NULL;
spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device));
if(spi_device == RT_NULL){
LOG_E("Failed to malloc the spi device!\r\n");
return -RT_ENOMEM;
}
static struct n32_spi_cs spi_cs;
spi_cs.GPIOx = GPIOA;
spi_cs.GPIO_Pin = GPIO_PIN_4;
if(rt_spi_bus_attach_device(spi_device,SPI_FLASH_DEVICE_NAME,SPI_BUS_NAME,(void*)&spi_cs) != RT_EOK){//在SPI总线上附加一个设备
LOG_E("Failed to attach the %s device!\r\n",SPI_BUS_NAME);
return -RT_ERROR;
}
return RT_EOK;
}
INIT_DEVICE_EXPORT(rt_hw_spi_flash_init);
static int rt_hw_spi_flash_with_sfud_init(void)
{
if (RT_NULL == rt_sfud_flash_probe(SPI_FLASH_CHIP, SPI_FLASH_DEVICE_NAME))
{
return RT_ERROR;
};
return RT_EOK;
}
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_with_sfud_init);
第三部分:FAL
3.1)FAL是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API (框架图如下所示),并具有以下特性:
3.1.1)支持静态可配置的分区表,并可关联多个 Flash 设备;
3.1.2)分区表支持自动装载 。避免在多固件项目,分区表被多次定义的问题;
3.1.3)代码精简,对操作系统无依赖 ,可运行于裸机平台,比如对资源有一定要求的 Bootloader;
3.1.4)统一的操作接口。保证了文件系统、OTA 等对 Flash 有一定依赖的组件,底层 Flash 驱动的可重用性;
3.1.5)自带基于 Finsh/MSH 的测试命令,可以通过 Shell 按字节寻址的方式操作(读写擦) Flash 或分区,方便开发者进行调试、测试;
3.2)使能和配置
3.3)主要工作:
3.1.1)定义flash设备,包括片内flash和片外的spi flash.
3.1.2)定义flash设备表,在fal_dfg.h记录。
3.1.3)定义flash分区表:
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "bootload", "n32_onchip", 0, 128*1024, 0}, \
{FAL_PART_MAGIC_WORD, "app", "n32_onchip", 128*1024, 384*1024, 0}, \
{FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 0, 256*1024, 0}, \
{FAL_PART_MAGIC_WORD, "factory", NOR_FLASH_DEV_NAME, 256*1024, 256*1024, 0}, \
{FAL_PART_MAGIC_WORD, "cmb_log", NOR_FLASH_DEV_NAME, 512*1024, 1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "kvdb_param", NOR_FLASH_DEV_NAME, 1536*1024, 1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "tsdb_data", NOR_FLASH_DEV_NAME, 2560*1024, 4096*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
第四部分:flashDB
4.1)FlashDB是一款可以运行在MCU上的轻量级的开源嵌入式数据库,专注于提供嵌入式产品的数据存储方案,有键值数据库和时序数据库两种,可以用来保存产品参数,也可以用来保存传感器的采集数据,比如温度和湿度。
4.2)使能和配置
4.3)具体使用