This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

FDS GC error 0x06

I am using the FDS functions to save needed data to flash and retrieve it when needed. The init, writing, and reading all function correctly. However I am running into trouble with the garbage collection function.

When there is nothing written to flash the gc returns a value of 0 in the event handler. A value of 0 is FDS_SUCCESS if I correctly understand.

But if there is data written, gc returns a value of 0x06 in the event handler. According to fds.h (pasted below) that error is FDS_ERR_NO_OPEN_RECORDS. I am not sure why the gc function is returning with that error, I didn't think that was a valid error code for the gc function.

I have triple checked my code for any fds open calls that are not paired with a fds close call and do not have any.

I have also tested that when the gc returns with an error of 6, that the flash memory is not erased, as a memory full condition that exists before running gc still exists.

I would appreciate any help or suggestions.

nRF51822 chip, SDK 11.0, s130 v2.0.1

enum
{
    FDS_SUCCESS = NRF_SUCCESS,  //!< The operation completed successfully.
    FDS_ERR_OPERATION_TIMEOUT,  //!< Error. The operation timed out.
    FDS_ERR_NOT_INITIALIZED,    //!< Error. The module has not been initialized.
    FDS_ERR_UNALIGNED_ADDR,     //!< Error. The input data is not aligned to a word boundary.
    FDS_ERR_INVALID_ARG,        //!< Error. The parameter contains invalid data.
    FDS_ERR_NULL_ARG,           //!< Error. The parameter is NULL.
    FDS_ERR_NO_OPEN_RECORDS,    //!< Error. The record is not open, so it cannot be closed.
    FDS_ERR_NO_SPACE_IN_FLASH,  //!< Error. There is no space in flash memory.
    FDS_ERR_NO_SPACE_IN_QUEUES, //!< Error. There is no space in the internal queues.
    FDS_ERR_RECORD_TOO_LARGE,   //!< Error. The record exceeds the maximum allowed size.
    FDS_ERR_NOT_FOUND,          //!< Error. The record was not found.
    FDS_ERR_NO_PAGES,           //!< Error. No flash pages are available.
    FDS_ERR_USER_LIMIT_REACHED, //!< Error. The maximum number of users has been reached.
    FDS_ERR_CRC_CHECK_FAILED,   //!< Error. The CRC check failed.
    FDS_ERR_BUSY,               //!< Error. The underlying flash subsystem was busy.
    FDS_ERR_INTERNAL,           //!< Error. An internal error occurred.
};
Parents
  • Found the issue!

    When we added capabilities to the DFU the DFU code base grew. We changed the start address of the DFU, but set it to the highest value possible. We set it to a value that was not aligned with a 1024 multiple. Hence when FDS pages were created against that address, they did not align with a 1024 boundary either.

    Changing the DFU start address and the size of the application space to match seems to have corrected the issue.

Reply
  • Found the issue!

    When we added capabilities to the DFU the DFU code base grew. We changed the start address of the DFU, but set it to the highest value possible. We set it to a value that was not aligned with a 1024 multiple. Hence when FDS pages were created against that address, they did not align with a 1024 boundary either.

    Changing the DFU start address and the size of the application space to match seems to have corrected the issue.

Children
No Data
Related