移植指南

    移植的主要工作都在 FAL 这边,其他接口并不是强依赖,可以根据自己的情况进行对接。

    移植前建议先了解下 FAL 功能介绍,详见:

    FAL 底层将不同的 Flash 存储介质进行了统一封装,并提供了分区表机制,暴露给上层用户。

    FlashDB 的每个数据库就是基于 FAL 提供的分区机制,每个数据库都坐落在某个 FAL 的分区上,相当于一个分区对应一个数据库。

    下面将详细讲解 FAL 的移植流程,更多移植演示可以参考已经提供的 demo 。

    FAL 移植

    在定义 Flash 设备表前,需要先定义 Flash 设备。可以是片内 flash, 也可以是片外基于 SFUD 的 spi flash:

    • 定义片内 flash 设备可以参考
    • 定义片外 spi flash 设备可以参考 。
    • :读取操作。
    • static int write(long offset, const uint8_t *buf, size_t size) :写入操作。
    • static int erase(long offset, size_t size) :擦除操作。

    用户需要根据自己的 Flash 情况分别实现这些操作函数。在文件最底部定义了具体的 Flash 设备对象 ,如下示例定义了 stm32f2 片上 flash:stm32f2_onchip_flash

    • "stm32_onchip" : Flash 设备的名字。

    • 0x08000000: 对 Flash 操作的起始地址。

    • 1024*1024:Flash 的总大小(1MB)。

    • 128*1024:Flash 块/扇区大小(因为 STM32F2 各块大小不均匀,所以擦除粒度为最大块的大小:128K)。

    • 8 : 设置写粒度,单位 bit, 0 表示未生效(默认值为 0 ),该成员是 fal 版本大于 0.4.0 的新增成员。各个 flash 写入粒度不尽相同,可通过该成员进行设置,以下列举几种常见 Flash 写粒度:

      • nor flash: 1 bit
      • stm32f2/f4: 8 bit
      • stm32f1: 32 bit
      • stm32l4: 64 bit

    设备表示例:

    Flash 设备表中,有两个 Flash 对象,一个为 STM32F2 的片内 Flash ,一个为片外的 Nor Flash。

    分区表也定义在 fal_cfg.h 头文件中。Flash 分区基于 Flash 设备,每个 Flash 设备又可以有 N 个分区,这些分区的集合就是分区表。在配置分区表前,务必保证已定义好 Flash 设备设备表。fal_cfg.h 可以参考 示例文件 fal/samples/porting/fal_cfg.h 完成。

    分区表示例:

    上面这个分区表详细描述信息如下:

    用户需要修改的分区参数包括:分区名称、关联的 Flash 设备名、偏移地址(相对 Flash 设备内部)、大小,需要注意以下几点:

    • 分区名保证 不能重复
    • 关联的 Flash 设备 务必已经在 Flash 设备表中定义好 ,并且 名称一致 ,否则会出现无法找到 Flash 设备的错误;