- 网站
1.EasyFlash 的Github开源网址,下载源码(源码比公司的新)
- 移植流程
1.新建一个具有串口打印功能的工程
2.把EasyFlash的相关程序加到项目工程中,初始化easyflash_init函数
3. 配置ef_cfg.h
#define EF_ENV_VER_NUM
#define EF_ERASE_MIN_SIZE
#define EF_WRITE_GRAN
#define EF_START_ADDR //根据芯片手册上的FLASH容量划分
#define ENV_AREA_SIZE
4.配置ef_port.c
1.实现ef_port_erase函数
2.实现ef_port_write函数
3.实现ef_port_env_lock函数
4.实现ef_port_env_unlock函数
5.设置环境变量ENV
static const ef_env default_env_set[] = {
{"startup_cnt",0}
};
6.编译,完成移植。
- 以HC32F030F8TA为例详细的讲解测试程序。
1. 配置ef_cfg.h
#define EF_ENV_VER_NUM 0
#define EF_ERASE_MIN_SIZE 512
#define EF_WRITE_GRAN 32
#define EF_START_ADDR 0xF000//根据芯片手册上的FLASH容量换分
#define ENV_AREA_SIZE 2048
讲解:
#define EF_ERASE_MIN_SIZE 512
芯片擦除的最小字节数,根据HC32F030用户手册描述最小的擦除字节数为512
#define EF_WRITE_GRAN 32
此程序只实现对STM32F4和F1的支持,所以要在F1/F4的基础上修改,实现ef_port.c里的擦、写功能(打印功能可以自己选择实现,擦和写必须实现)。
#define EF_START_ADDR 0xF000
把最后一个页用来FLASH的擦写区域
#define ENV_AREA_SIZE 2048
根据自己的环境变量的多少来改大小
2. 实现ef_port_erase、ef_port_write、ef_port_env_lock、ef_port_env_unlock函数
这些函数的实现可以参考华大的flash.c函数,从而实现对页的擦除与写入。
3.设置环境变量
static const ef_env default_env_set[] = {
{"startup_cnt",0}
};
4.初始化easyflash_init(); //EasyFlash的函数
初始化Flash_Init(NULL, 8, TRUE);//华大的库函数
5.添加测试函数
测试函数的功能是记录上电次数
void EasyFlash_Test(void)
{
//从FLASH中读取app_para.cnt的值
ef_get_env_blob("startup_cnt",(void*)&app_para.cnt,sizeof(app_para.cnt),NULL);
//上电次数++
app_para.cnt ++;
//把新的上电次数写入FLASH
ef_set_env_blob("startup_cnt",(void*)&app_para.cnt,sizeof(app_para.cnt));
//打印上电次数
Send_Data(app_para.cnt);
}
6.编译下载
实验现象:每上一次电,上电次数+1
- 总结
EasyFlash最终还是要调用官方的FLASH擦写函数,EasyFlash不仅能够实现对产品的 设定参数 或 运行日志 等信息的掉电保存功能,还封装了简洁的 增加、删除、修改及查询 方法, 降低了开发者对产品参数的处理难度。
此文档只实现了EasyFlash的读写功能,EasyFlash还封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级,Log 无需文件系统,日志可直接存储在Flash上。这些功能可以选择实现。