本帖最后由 WT_0213 于 2023-12-7 11:23 编辑
在工程的 proj.conf 里面添加 下面三个 组件,用于使用 Easy Flash 好像是一层一层的相互依赖。
set(CONFIG_PARTITION 1)
set(CONFIG_BFLB_MTD 1)
set(CONFIG_EASYFLASH4 1)
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
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);
Bouffalo SDK 上目前的 EasyFlash 功能仅用于 PSM ;
如果直接使用会报
[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);
然后就卡死在以下的代码里面了
if ((ret = bflb_boot2_partition_bus_addr_inactive(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) {
}
}
你如果需要保存 WiFi 信息,建议你自己参考 flash case 中的读写 api 自行实现一下。或者用自己重写ef_port
注意一下 ld 链接脚本中 flash 地址空间的划分,你最好是空出一部分 flash 空间来用于保存你的信息,确保此空间不会被做他用。
如果觉得还不错的话,可以 给个 + 1 哦。