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

Get data from BLE and write to flash memory using pstorage

Hi,

I am having trouble to use flash to store data.

First, I write function and scan beacon, get information from this beacon and save to flash

I use a timer for saving data to flash but it is not work, I always get the error code = 0x00000010. It means "invalid flag". How can I solve this problem?

Thanks and regard

Parents
  • 0x00000010 is not 'Invalid Flag', invalid flag is error 10 decimal, that's error 0x10 hex which is 16 decimal which is Bad Memory Address.

    That tells you that source_data_1 isn't aligned.

    All the other advice about checking error codes is sound, you should check them all every single time. And I doubt there was ever a 'conflict' between pstorage and the beacon_event_handler, you can most likely fix the actual error now you know the difference between decimal and hex and put the code back the way it was.

  • @Aryan

    It seem can not pass this line "while(pstorage_wait_flag) { power_manage(); }"

    It can not return to callback function. I tried to stop scan beacon function before pstorage but still not work

    for (;;)

    {
    		if (flash_ready == true)
    		{
    			app_beacon_scanner_stop();
        //Get block identifiers
    	    retval = pstorage_block_identifier_get(&master_handle, temp, &block_0_handle);
    	    APP_ERROR_CHECK(retval);		
    	    retval = pstorage_clear(&block_0_handle, 16);                   //Clear first registered page. A pstorage_clear command must operate within a single page
    	    APP_ERROR_CHECK(retval);		
    	    pstorage_wait_handle = block_0_handle.block_id;            //Specify which pstorage handle to wait for 
    
    	    pstorage_wait_flag = 1; 
    	    retval = pstorage_store(&block_0_handle, bufferCheck, 16, 0);
          APP_ERROR_CHECK(retval);	 
    	    while(pstorage_wait_flag) { power_manage(); }              //Sleep until store operation is finished.
    	    nrf_delay_ms(100);
    	    retval = pstorage_load(dest_data_1, &block_0_handle, 16, 0);			 //Read from flash, only one block is allowed for each pstorage_load command
    	    APP_ERROR_CHECK(retval);
    	    nrf_delay_ms(100);
    		  temp++;
    			flash_ready = false;
    			app_beacon_scanner_start();
    		 }
    		 power_manage();
    }
    
Reply
  • @Aryan

    It seem can not pass this line "while(pstorage_wait_flag) { power_manage(); }"

    It can not return to callback function. I tried to stop scan beacon function before pstorage but still not work

    for (;;)

    {
    		if (flash_ready == true)
    		{
    			app_beacon_scanner_stop();
        //Get block identifiers
    	    retval = pstorage_block_identifier_get(&master_handle, temp, &block_0_handle);
    	    APP_ERROR_CHECK(retval);		
    	    retval = pstorage_clear(&block_0_handle, 16);                   //Clear first registered page. A pstorage_clear command must operate within a single page
    	    APP_ERROR_CHECK(retval);		
    	    pstorage_wait_handle = block_0_handle.block_id;            //Specify which pstorage handle to wait for 
    
    	    pstorage_wait_flag = 1; 
    	    retval = pstorage_store(&block_0_handle, bufferCheck, 16, 0);
          APP_ERROR_CHECK(retval);	 
    	    while(pstorage_wait_flag) { power_manage(); }              //Sleep until store operation is finished.
    	    nrf_delay_ms(100);
    	    retval = pstorage_load(dest_data_1, &block_0_handle, 16, 0);			 //Read from flash, only one block is allowed for each pstorage_load command
    	    APP_ERROR_CHECK(retval);
    	    nrf_delay_ms(100);
    		  temp++;
    			flash_ready = false;
    			app_beacon_scanner_start();
    		 }
    		 power_manage();
    }
    
Children
No Data
Related