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

Offset in SAADC samples with Easy DMA and BLE

I have a nrf52 application that samples four saadc channels at 1kHZ. That is: Map four pins to ADC input and let Easy DMA take care of the sampling so that the data is processed ten times a second (100 * 4 samples). This works pretty well, except...

When I enable the BLE connection, the data is shifted in the buffer. Without BLE enabled, the data layout in the memory is as following {{1,2,3,4}, {1,2,3,4}, ...}. But, when BLE is activated, the memory layout is: {{4,1,2,3}, {4,1,2,3}, ...} I really don't know what causes the difference. I have no way to check if the data is shifted, or did the samples just swap places. I wonder if the softdevice blocks some of the samples that would cause the problem.

The saadc implementation is double buffered, like in "saadc_sample_from_two_pins - scan mode" here

The BLE implementation is based on ble_app_hrs_freertos in SDK 12.1.0. That is also the SDK version I'm using.

Any help would be appreciated.

Parents
  • I had the same issue when sampling two pins at 1kHz with BURST enabled, Oversample set to 4x and BLE enabled. It seems I managed to fix it by setting the SAADC_CONFIG_IRQ_PRIORITY to 2 (it was 7 before). I also reduced the acquisition time from 40us to 20us but I am quite sure that the change that made the difference is the priority. I let the device run over night at 1kHz sampling rate with burst and oversample at 4x, I also connected/disconnected to the device several times and the channels did not get switched at all. I am using the SDK 12.2.0. Maybe you can try this and see if it works for you as well. I will be doing more testing these days.

Reply
  • I had the same issue when sampling two pins at 1kHz with BURST enabled, Oversample set to 4x and BLE enabled. It seems I managed to fix it by setting the SAADC_CONFIG_IRQ_PRIORITY to 2 (it was 7 before). I also reduced the acquisition time from 40us to 20us but I am quite sure that the change that made the difference is the priority. I let the device run over night at 1kHz sampling rate with burst and oversample at 4x, I also connected/disconnected to the device several times and the channels did not get switched at all. I am using the SDK 12.2.0. Maybe you can try this and see if it works for you as well. I will be doing more testing these days.

Children
No Data
Related