由于f415的扇区每2k是一块扇区,所以在此处.blk_size = n * 1024, //Flash 块/扇区大小(因为 STM32F2 各块大小不均匀,所以擦除粒度为最大块的大小:128K)
这个代码中,需要m==2,同理,需要查看你的单片机每个扇区的大小是多少,如果一个扇区的大小是4k,则此处需要填写的是
由于f415的扇区每2k是一块扇区,所以在此处.blk_size = 4 * 1024, //Flash 块/扇区大小(因为 STM32F2 各块大小不均匀,所以擦除粒度为最大块的大小:128K),
不匹配的话就会出现写入次数大于2次导致数据库数据错乱,数据库数据损坏的情况。
/*
"winbond_25q32" : Flash 设备的名字。
0x08703000: 对 Flash 操作的起始地址。
10111024:Flash 的总大小(1MB)。
1281024:Flash 块/扇区大小(因为 STM32F2 各块大小不均匀,所以擦除粒度为最大块的大小:128K)。
{init, read, write, erase} :Flash 的操作函数。 如果没有 init 初始化过程,第一个操作函数位置可以置空。
8 : 设置写粒度,单位 bit, 0 表示未生效(默认值为 0 ),该成员是 fal 版本大于 0.4.0 的新增成员。各个 flash 写入粒度不尽相同,可通过该成员进行设置,以下列举几种常见 Flash 写粒度:
nor flash: 1 bit
stm32f2/f4: 8 bit
stm32f1: 32 bit
stm32l4: 64 bit
*/
//1.定义 flash 设备
/*
外部flash规划
核心区域
256K
0~200K
200~256 存储
0x8400000-0x847FFFF 512K为引导程序使用
0x8480000-0x867FFFF 2048K(2M) 为程序存储区域
0x8680000-0x87FFFFF 1536K 为配置存储
/
const struct fal_flash_dev Winbond_25Q32_flash =
{
.name = "winbond_25q32",//Flash 设备的名字。
.addr = 0x08000000+204800, //对 Flash 操作的起始地址
.len = 56 1024, //Flash 的总大小(1MB)
.blk_size = 2 * 1024, //Flash 块/扇区大小(因为 STM32F2 各块大小不均匀,所以擦除粒度为最大块的大小:128K)
.ops = {init, read, write, erase},
.write_gran = 32
};