easyDMA current consumption

We try to get audio samples form analog or digital MEMS microphone to nrf54840 RAM memory with low power consumpion at 32kHz rate. We consider to use internal SAADC, PDM or external ADC connected to uC SPI. Our gol is to sample with minimal current consumption. With nrf54840 with only both external crystal connected we observe few uA current consumpion when uC sleep. When we samples via PDM curent consumtion is about 1mA. With SPIM3 enabled we observe 1mA consumpion, samples are get at RTC tick. Now we start to test to samples by internal SAADC and we suppose current consumpion will be more than 1mA. All SPIM, ADC and SAADC use easayDMA to transever sample result to RAM. On forum I have found threat were sombody wrote that easyDMA consums 1-2mA but there is no information about it in Product Specyfication. Sombody put link to Electrical Specification but this link is not working. So my conslusion is that all peripferall using easyDMA will consume more than 1mA current. Is is true?

  • Hi Marek

    It is true that if any peripheral is running and needs to communicate over the internal RAM bus it will increase the idle current by about 1mA. This is shared between peripherals though, so if you have multiple peripherals using DMA you don't get 1mA of current draw for each peripheral, instead you typically get 1mA for the RAM bus, and some additional hundred microamps for each peripheral. 

    In order to keep average currents as low as possible it is necessary to finish using the peripheral as quickly as possible, and then let it be idle for as long as possible to avoid having to use easyDMA all the time. 

    This doesn't really work with the PDM module unfortunately, since it is designed to be running all the time as long as you are actively receiving a sound stream. 

    If you have some kind of external ADC with an SPI interface then you can hopefully buffer a number of samples in the ADC, so that you only need to read them out sporadically from the nRF side. In this case you only need easyDMA enabled while the SPI transaction is ongoing, and can disable it immediately thereafter to reduce the average current. Even if you have to read one sample every 32kHz I think the SPI option will be better than the PDM option, average current wise, but the more you can buffer in the external ADC the better. 

    The SAADC will allow you to do this as well, but unfortunately you are not able to buffer multiple samples if you want to keep average currents low. As soon as you set up a buffer larger than 1 sample the ADC will keep the easyDMA active until the buffer is full, regardless of how slowly you are sampling the ADC. 

    This means you have to run some code every 31.25us to start the SAADC module, sample it, and store the value in a secondary buffer. This would not be ideal for average current, and also less than ideal for performance since you need to run code very often, and could easily be affected by other interrupts in the system. 

    Best regards
    Torbjørn

Related