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

High Current Consumption After I2S

I am using the nRF52832 very successfully for an audio application. However, I am observing an undesirable high current state after audio playback is complete.

Here is the turn of events. i == current

  1. The user connects to the device with BLE. i < 0.5mA
  2. The user requests audio playback. This will turn on SPIM0 and I2S, as well as use the FPU.
  3. Playback is complete. We wish to return to state (1). I2S is disabled via nrf_drv_i2s_stop(), and nrf_drv_i2s_uninit(). Interrupts stop, but we are now drawing ~ 1.7 mA.

I was experiencing the spurious interrupts from Errata item 87, and seeing over 4 mA! but I implemented that fix and that problem was eliminated.

Note that calling sd_power_system_off() lowers the consumption immediately to less than 200 uA, further strengthening the evidence that the nRF52 is drawing the extra power.

Any suggestions?

Softdevice 3.0 SDK 12.1.0

  • Have you isolated whether the current draw if from the nRF52 or from your I2S device (or I presume the output amplifier for the audio). You may need to send a power off command to the I2S device

    I have a similar situation with a OLED display, and even sending the power down command didnt reduce the current very much. The only solution in my case was to toggle the reset line on the OLED controller which shut it down completely, but means I have to resend the display config each time I need to use the display :-(

  • An excellent thought. I am powering down the audio amplifier as per its manufacturer's recommendations, then holding it in reset. If I then reset the nRF52, the current draw immediately drops from the 1.7 mA value to the 0.3 mA value, leading me to believe it is some state in the nRF52.

  • I've reset all the GPIO to their default state (PIN_CNF=2) and that doesn't appear to be it.

  • Have you just tried running the beacon example on your hardware, and change the advertising period to some big number like 10 seconds.

    The beacon is known to take the minimum amount of current when not transmitting, so any other current must being taken by your other components e.g. the amplifier

    If the amplifier takes current with the beacon example, its probably worth adding pull-ups or pull downs etc to prevent this happening, and use that as a baseline

  • I haven't run the beacon example. However, I have no reason to believe the amplifier is the issue. I can power it up, configure it, and power it down, and always returns to the same current level. Only after I run I2S through the processor is there a problem. The extra current draw disappears the instant I reset or shutdown the processor. It must be related to processor state.

1 2