1、拷贝了 examples\wifi\sta\wifi_http 作为基础。
想实现的功能是,复位后读取 Flash 中有没有 WiFi 信息,如果有就直接配置STA模式联网。
如果没有,就作为AP运行,扫描 WiFi SSID,web界面输入密码后,配置STA联网,同时将密码保存在 FLASH 中。
在工程的 proj.conf 里面添加 下面三个 组件,用于使用 Easy Flash 好像是一层一层的相互依赖。
set(CONFIG_PARTITION 1)
set(CONFIG_BFLB_MTD 1)
set(CONFIG_EASYFLASH4 1)
2、examples\project\ab\flash_prog_cfg.ini 内容为
[cfg]
# 0: no erase, 1:programmed section erase, 2: chip erase
erase = 1
# skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated
skip_mode = 0x0, 0x0
# 0: not use isp mode, #1: isp mode
boot2_isp_mode = 0
[boot2]
filedir = ./build/build_out/boot2_*.bin
address = 0x000000
[partition]
filedir = ./build/build_out/partition*.bin
address = 0xE000
[FW]
filedir = ./build/build_out/ab*_$(CHIPNAME).bin
address = @partition
# 下面这个 wifi_http 工程没有使用,我打开了,是否需要打开呢?
[mfg]
filedir = ./build/build_out/mfg*.bin
address = @partition
3、main.c 函数中增加
#include <easyflash.h>
// 初始化EasyFlash
EfErrCode ret;
ret = easyflash_init();
if(ret != EF_NO_ERR) {
LOG_I(DBG_TAG, "EasyFlash init fail, EfErrCode = %d.r\n", ret);
}
else {
LOG_I(DBG_TAG, "EasyFlash init OK");
}
4、components\easyflash4\src\easyflash_cli.c 修改
SHELL_CMD_EXPORT_ALIAS()修改为 SHELL_CMD_EXPORT(),否则要报错,因为参数数量不同,当然也可以用SHELL_CMD_EXPORT_ALIAS()增加一个别名参数。
#if defined(CONFIG_SHELL)
SHELL_CMD_EXPORT(psmcli_set_cmd, psm set cmd);
SHELL_CMD_EXPORT(psmcli_unset_cmd, psm unset cmd);
SHELL_CMD_EXPORT(psmcli_erase_cmd, psm erase cmd);
SHELL_CMD_EXPORT(psmcli_dump_cmd, psm dump cmd);
SHELL_CMD_EXPORT(psmcli_test_cmd, psm test cmd);
5、components\easyflash4\inc\ef_cfg.h 文件内容为
#define EF_USING_ENV
#define EF_ENV_VER_NUM 0 /* @note you must define it for a value, such as 0 */
// W25Q64 每页256-bytes 一次擦除大小可以为16页(4KB)
#define EF_ERASE_MIN_SIZE (4096)
/* only support 1(nor flash)/ 8(stm32f4)/ 32(stm32f1)/ 64(stm32l4) */
#define EF_WRITE_GRAN (1 * 8) /* @note you must define it for a value */
/* backup area start address */
#define EF_START_ADDR (0) /* @note you must define it for a value */
extern uint32_t ENV_AREA_SIZE;
/* saved log area size */
#define LOG_AREA_SIZE (0)
6、运行程序后报错
[MTD] [PART] [XIP] error when get PSM partition -5
[MTD] [PART] [XIP] Dead Loop. Reason: no Valid PSM partition found
是因为 components\easyflash4\src\easyflash.c 中 调用
components\easyflash4\src\ef_port.c 中的函数
result = ef_port_init(&default_env_set, &default_env_set_size);
在 ef_port_init() 调用
ret = bflb_mtd_open(BFLB_MTD_PARTITION_NAME_PSM, &handle, BFLB_MTD_OPEN_FLAG_BUSADDR);
然后就卡死在以下的代码里面了
} else {
/* open active mtd partition*/
if (flags & BFLB_MTD_OPEN_FLAG_BUSADDR) {
if ((ret = bflb_boot2_partition_bus_addr_active(name, &addr, &size)) || 0 == addr) {
printf("[MTD] [PART] [XIP] error when get %s partition %d\r\n", name, ret);
printf("[MTD] [PART] [XIP] Dead Loop. Reason: no Valid %s partition found\r\n", name);
// 卡死在这里
while (1) {
}
}
handle_prv->xip_addr = (void*)addr;
请问 BL618g0 主板 要如何配置 EasyFlasy4 用于存储 WiFi 信息呢?