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

address conflict between saadc buffer and fds rec_id

The problem is a little weird and takes me a few hours to address it. But I still don't know how this happens.

Here is the problem, in my application I use saadc to measure voltage. Then I use fds to store some sensor data. I notice that even I set rec_id (e.g. 0x1111) to write sensor data to flash. The rec_id is always changed to saadc value. I suspect the buffer used for saadc is shared with rec_id. But I don't understand why. Is there any way I can change the address for storing rec_id or saadc_buffer?

here is my saadc_callback

/**
 * @brief SAADC (battery) sensor event callback.
 */

void saadc_callback(nrf_drv_saadc_evt_t const * p_saadc_event)
{
    if (p_saadc_event->type == NRF_DRV_SAADC_EVT_DONE)
    {
        ret_code_t err_code;
				char	data_arr_volt[20];

        err_code = nrf_drv_saadc_buffer_convert(p_saadc_event->data.done.p_buffer, SAMPLES_IN_BUFFER);
        APP_ERROR_CHECK(err_code);
 #ifdef UART_PRINTING_ENABLED       
        NRF_LOG_INFO("saadc value= %d\r\n", p_saadc_event->data.done.p_buffer[0]);
				printf("voltage value %d on pin AIN0\r\n",p_saadc_event->data.done.p_buffer[0]);
#endif
				sprintf(data_arr_volt, "%d volt on AIN0_V\r\n", p_saadc_event->data.done.p_buffer[0]);		//get two decimal	
//			ble_nus_data_send(&m_nus, data_array, &length, conn_handle);
			uint16_t length = strlen(data_arr_volt);
			if (m_conn_handle == 0)
			{
				m_conn_handle = m_conn_handle+1;
				err_code = ble_nus_data_send(&m_nus, (uint8_t *)data_arr_volt, &length, m_conn_handle);
			}
			else if(m_conn_handle == 1)
			{
				m_conn_handle = m_conn_handle-1;
				err_code = ble_nus_data_send(&m_nus, (uint8_t *)data_arr_volt, &length, m_conn_handle);
			}			
			
			
}	
    }

}

Here is a regular fds_write()

uint32_t file_id = 0x02000;
uint32_t rec_id_write = 0x1111;
uint32_t rec_id_read = 0x1111;
uint32_t rec_id_delete = 0x1111;


/* Data to write in flash. */
struct 
{
  char string[50] ;                         //Change this size as required.
}fds_data;



fds_record_t record =
{
  .file_id           = 0x02000,
  .key               = 0x1111,
  .data.p_data       = &fds_data,
  /* The length of a record is always expressed in 4-byte units (words). */
  .data.length_words = 50,//(sizeof(fds_data_str) + 3) / 4,                  //Also change this if array size is changed.
};


void fds_write()
{

  ret_code_t rc;

strcpy( fds_data.string, "\n test_fds.\n" );

#ifdef UART_PRINTING_ENABLED
  NRF_LOG_INFO("Writing start");
	printf("Writing start");

	#endif

 fds_record_desc_t desc = {0};
  record.file_id = file_id;


//	fds_data.string = "test"; //{'a', 'b', 'c','d'};
  for(int i=0;i<1;i++)
  {  
    memset(&desc, 0x00, sizeof(fds_record_desc_t)); 
    record.key = rec_id_write;
    rc = fds_record_write(&desc, &record);
    wait_for_write();
    if(rc == FDS_SUCCESS) {
			#ifdef UART_PRINTING_ENABLED
      NRF_LOG_INFO("\nData written with id %d \n",rec_id_write);//
			printf("\nData written with id %d\n",rec_id_write);//
			#endif

    }
    else {
			#ifdef UART_PRINTING_ENABLED
      NRF_LOG_INFO("\nWrite Failed, id %d\n",rec_id_write);
			printf("\nWrite Failed, id %d\n",rec_id_write);
			#endif
    }
    rec_id_write++;
  }  

}

Thanks,

-Lei

Parents Reply Children
No Data
Related