I am trying to implement bonded pairing with a project in which I already have NVS configured for user data. When implementing bonding, I understand that I need to remove the CONFIG_SETTINGS_NONE=y flag and add a CONFIG_SETTINGS=y flag. I assume this is to store the bond information on the device in persistent storage.
However, when I remove CONFIG_SETTINGS_NONE from my project, my NVS reads start to fail. The error I am receiving is below:
[00:01:02.705,261] [1;31m<err> flash_nrf: invalid address: 0x00080ff8:8[0m
Here is how I start my NVS driver:
#define STORAGE_NODE DT_NODE_BY_FIXED_PARTITION_LABEL(storage)
#define FLASH_NODE DT_MTD_FROM_FIXED_PARTITION(STORAGE_NODE)
user_config_data_t user_config_data;
static struct nvs_fs fs;
void load_user_data(void)
{
int rc_flash;
struct flash_pages_info info;
const struct device *flash_dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_flash_controller));
/* define the nvs file system by settings with:
* sector_size equal to the pagesize,
* 3 sectors
* starting at FLASH_AREA_OFFSET(storage)
*/
if (!device_is_ready(flash_dev))
{
printk("Flash device %s is not ready\n", flash_dev->name);
return;
}
fs.offset = FLASH_AREA_OFFSET(storage);
rc_flash = flash_get_page_info_by_offs(flash_dev, fs.offset, &info);
if (rc_flash)
{
printk("Unable to get page info\n");
return;
}
fs.sector_size = info.size;
fs.sector_count = 3U;
rc_flash = nvs_init(&fs, flash_dev->name);
if (rc_flash)
{
printk("Flash Init failed\n");
return;
}
/* LONG_ID is used to store a larger dataset ,lets see if we can read
* it from flash
*/
rc_flash = nvs_read(&fs, USER_DATA_ADDRESS, &user_config_data, sizeof(user_config_data));
if (rc_flash > 0)
{
printk("User data found!\n");
... do stuff
}
else
{
/* entry was not found, add it if reboot_counter = 0*/
printk("User data not found, adding it as id %d\n", USER_DATA_ADDRESS);
... do stuff
}
}
Below is my flash0 node in my custom board dts file.
&flash0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
boot_partition: partition@0 {
label = "mcuboot";
reg = <0x00000000 0xc000>;
};
slot0_partition: partition@c000 {
label = "image-0";
reg = <0x0000C000 0x32000>;
};
slot1_partition: partition@3e000 {
label = "image-1";
reg = <0x0003E000 0x32000>;
};
scratch_partition: partition@70000 {
label = "image-scratch";
reg = <0x00070000 0xa000>;
};
storage_partition: partition@7a000 {
label = "storage";
reg = <0x0007a000 0x00006000>;
};
};
};
I have a feeling it has something to do with the settings_partition and it eating up my storage NVS offset. I do not know how to fix this though as calculating flash partitions is new to me.