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

When / how does nRF52805 Erratum 246 "System: Intermittent extra current consumption when going to sleep" exactly apply?

I've been checking the nRF52805 Errata document to see which errata apply to our product and do not yet have a workaround implemented in our firmware.

Unfortunately, I'm not sure what to make of #246.

Symptoms
Extra current consumption in the range of 350 µA when in System On Idle.


Conditions
A high-speed peripheral (CPU for example) accesses a RAM block which is being accessed by a low-speed
peripheral through the DMA bus, with a specific timing, and the high-speed peripheral has higher priority
than the low-speed peripheral.


Consequences
Extra current consumption in System On Idle.

What is the definition of a "high-speed peripheral" vs. a "low-speed peripheral"? Can you categorize the peripherals into these two categories?

From what I gather, this applies to EasyDMA-Peripherals - specifically in our product we use the RADIO and SAADC peripherals - and of course the CPU... So as I understand it, the conditions are given that the error described could occur in our product. Is this right?

When exactly is the current consumption increased?

  • Does it increase just for the duration where the conditions are prevalent?
  • Does it increase once the conditions are met and then stay as high?
  • Is current consumption only high for one time going into System On IDLE after the condition occurred?

Furthermore, is there a sensible way to proactively prevent said condition when using RADIO and/or SAADC?

I would be glad if you could help me out here. It's hard to evaluate the power hit this induces from the description alone.

Best regards,

- mike

Parents
  • Hi, sorry if you think the errata is confusing. The short story is that the workaround should always be enabled, and I'm not sure why it's not part of the MDK already, leaving it non-optional. I will have to investigate that.

    The workaround only results in a worst case of 40 uA extra current consumption on top of the 16MHz bus current, which is already in the 1 mA range, and only when the 16MHz bus is active. So you will barely notice it.

    The high-speed vs low-speed phrasing is because of the DMA bus, which has a fast side and a slow side. The fast side refers to the CPU, and the slow side refers to all other peripherals using the 16MHz bus and DMA. I agree that this is not very obvious.

    The increased current is due to the 16MHz clock not being released after use by the peripheral. A very specific set of conditions on the bus are necessary for this to happen, so it's very unlikely to happen. The symptom is that the current consumption stays high after the peripheral usage, and will stay high during the system ON idle period, until the next DMA transaction, which will then release the clock. For example, if you set up regular sampling on the SAADC, the current may increase to 350 uA after one sampling event, and stay high until the next sampling event. It happens intermittently, without any way for the application to know.

Reply
  • Hi, sorry if you think the errata is confusing. The short story is that the workaround should always be enabled, and I'm not sure why it's not part of the MDK already, leaving it non-optional. I will have to investigate that.

    The workaround only results in a worst case of 40 uA extra current consumption on top of the 16MHz bus current, which is already in the 1 mA range, and only when the 16MHz bus is active. So you will barely notice it.

    The high-speed vs low-speed phrasing is because of the DMA bus, which has a fast side and a slow side. The fast side refers to the CPU, and the slow side refers to all other peripherals using the 16MHz bus and DMA. I agree that this is not very obvious.

    The increased current is due to the 16MHz clock not being released after use by the peripheral. A very specific set of conditions on the bus are necessary for this to happen, so it's very unlikely to happen. The symptom is that the current consumption stays high after the peripheral usage, and will stay high during the system ON idle period, until the next DMA transaction, which will then release the clock. For example, if you set up regular sampling on the SAADC, the current may increase to 350 uA after one sampling event, and stay high until the next sampling event. It happens intermittently, without any way for the application to know.

Children
Related