Hi,
I would like to write a string to flash in mqtt_simple SDK example using latest modem firmware and ncs v1.4.0. I based my code off the zephyr example (samples/subsys/nvs/src/main.c)
Added the following to proj.conf
CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_NVS=y CONFIG_MPU_ALLOW_FLASH_WRITE=y
and the following functions to mqtt_simple
#include <drivers/flash.h>
#include <storage/flash_map.h>
#include <fs/nvs.h>
static struct nvs_fs fs;
int8_t init_nvs_sys()
{
uint8_t rc;
struct flash_pages_info info;
/* define the nvs file system by settings with:
* sector_size equal to the pagesize,
* 3 sectors
* starting at FLASH_AREA_OFFSET(storage)
*/
fs.offset = FLASH_AREA_OFFSET(storage);
rc = flash_get_page_info_by_offs(
device_get_binding(DT_CHOSEN_ZEPHYR_FLASH_CONTROLLER_LABEL),
fs.offset, &info);
if (rc) {
printk("Unable to get page info");
return -1;
}
fs.sector_size = info.size;
fs.sector_count = 3U;
rc = nvs_init(&fs, DT_CHOSEN_ZEPHYR_FLASH_CONTROLLER_LABEL);
if (rc) {
printk("Flash Init failed\n");
return -1;
}
}
int8_t read_write_nvs_sys()
{
/* Write and read params */
if (init_nvs_sys() < 0) {
printk("Error: init_nvs_sys\n");
}
char wbuf[16];
char rbuf[16];
strcpy(wbuf, "Hello\n");
// Write mode
if(nvs_write(&fs, fs.offset, &wbuf, strlen(wbuf)+1) < 0) {
printk("Error: nvs_write\n");
}
// Read mode
if (nvs_read(&fs, fs.offset, &rbuf, sizeof(rbuf)) < 0) {
printk("Error: nvs_read\n");
}
else {
printk("%s", rbuf);
}
}
Then in main()
void main(void)
{
int err;
printk("The MQTT simple sample started\n");
read_write_nvs_sys();
...
...
It compiles and runs but I get the following error in LTE Link Monitor which causes a cyclic reboot:
2020-11-17T15:04:06.608Z DEBUG modem << Non-secure callable region 0 placed in flash region 2 with size 32.
I tried running the example code given in this post:
https://devzone.nordicsemi.com/f/nordic-q-a/52095/nrf9160dk-storing-to-and-reading-from-flash
and here:
https://devzone.nordicsemi.com/f/nordic-q-a/47275/why-doesn-t-nvs-write-data-to-flash-correctly
but they both use:
DT_FLASH_AREA_STORAGE_OFFSET and DT_FLASH_DEV_NAME
which return as undefined in my project. Seems like defining these and replacing:
FLASH_AREA_OFFSET(storage) and DT_CHOSEN_ZEPHYR_FLASH_CONTROLLER_LABEL)
would solve my problem.
Thoughts?
Thank you,
Robert