This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Logging interval data into flash memory. FDS or fstorage? Wear levelling?

Hi Nordic DevTeam,

I am using nRF52840 (1MB Flash, 256kB RAM). I would like to store a log data to flash memory that I can extract them to my Android phone later on when connected. I have concern about the 10,000 write cycle of the nrRF52, I have to write this frequently to the flash.

Let's say after I allocate bootloader, SD s140 library and application (total : ~250kB in flash).  I expect the device to last 5-6 years and I allocate 500kB just for logging purposes and continuously log data every 1 minute when the device is on in csv format : eg. "time, voltage, current, etc." (let's say 40 Bytes each minute). Before I save to flash, I will allocate this data in RAM first (maybe fixed-sized array of 50kB), and whenever the allocated RAM is almost full or the device is about to be turned off. I will write this RAM data into the flash page, using the FDS library provided it has the wear-levelling mechanism in the background. My understanding is the bigger the flash allocated to it, wear-levelling will be more effective as there are more probability to use unused space to store data.

Does my implementation make sense in this case considering the write cycle of the flash?

Would it be recommended to log and save logged data into internal flash memory or would I really need external flash memory like SD Card?

Parents
  • Hi Einar,

    I found out that there are two ways of appending data to the flash.

    Either you do it with fds_record_update() which will read, append and write to the flash by replacement into existing record id, or fds_record_write() which create a new record, and keeping the old one. 

    devzone.nordicsemi.com/.../data-appending-flash-storage

    What are the pros and cons on using one against the other?

    My procedure is simple :

    -. Allocate X amount of bytes in flash for data logging storage.

    -. these data would be a comma separated value, eg :

    (unix time, current, voltage, ....)

    1620794473, 53, 10000, ..., ...\r\n

    -. store all these data into RAM until it's full or power is about to be turned off then force it to flash.

    -. when device is connected with phone, extract all these data and (optional) erase the flash data storage memory.

    The way I imagine is that there will be a .csv file inside the flash storage called "data_log.txt", that everytime I need to append, I just opened this file and append a huge amount of string array into the file. This seems like a FATFS implementation, would it be recommended to use fatfs instead? (I am not sure whether the wear-levelling is implemented here)

    I understand that fds is a file system with the record_id, file_id and key_id. It's kind of hard to imagine how I would do this with my ideal scenario.

    But do let me know if there's any better way to do this.

Reply
  • Hi Einar,

    I found out that there are two ways of appending data to the flash.

    Either you do it with fds_record_update() which will read, append and write to the flash by replacement into existing record id, or fds_record_write() which create a new record, and keeping the old one. 

    devzone.nordicsemi.com/.../data-appending-flash-storage

    What are the pros and cons on using one against the other?

    My procedure is simple :

    -. Allocate X amount of bytes in flash for data logging storage.

    -. these data would be a comma separated value, eg :

    (unix time, current, voltage, ....)

    1620794473, 53, 10000, ..., ...\r\n

    -. store all these data into RAM until it's full or power is about to be turned off then force it to flash.

    -. when device is connected with phone, extract all these data and (optional) erase the flash data storage memory.

    The way I imagine is that there will be a .csv file inside the flash storage called "data_log.txt", that everytime I need to append, I just opened this file and append a huge amount of string array into the file. This seems like a FATFS implementation, would it be recommended to use fatfs instead? (I am not sure whether the wear-levelling is implemented here)

    I understand that fds is a file system with the record_id, file_id and key_id. It's kind of hard to imagine how I would do this with my ideal scenario.

    But do let me know if there's any better way to do this.

Children
No Data
Related