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

nRF8001 low power mode

Hi all,

i have a device with the nrf8001 module. I can connect this to a smartphone and send data through the UART protocol. After that i disconnect the device and i have to put this in low power. For do that i call the functions:

lib_aci_radio_reset(); lib_aci_sleep();

but the device consuption is 0.5mA, is correct execute that function or i have to do some things else? can i reduce the current to uA? Thanks

  • 500uA is too high for the sleep state. When the nRF8001 is sleeping it should be in (I_sleep) 0.5uA. Make sure that there is no wakeup on the nRF8001, i.e. the REQN line should be high at all times.

    Is this a custom board created by you ? You can take a look at the measurement methods to make sure that you are meaasuring only the current drawn by the nRF8001 and not by the additional micro controller as well.

    www.nordicsemi.com/.../61839706

    See section 8 in the below application note www.nordicsemi.com/.../28783492

    Use the ACI Sleep command to put the nRF8001 to sleep.
    lib_aci_sleep() After sending the sleep command make sure that the mcu has actually clocked the sleep command to the nRF8001 before putting the mcu itself to sleep. Additionally at this point when the mcu is going to sleep ensure that the REQN line is not lowered. [Edited]

  • The RDYN and ACTIVATE is not connected to GND when in sleep, but it sound like you might have a floating pin on one of the other pins related to the ACI. Potentially there could also be an interrupt/event triggered on the nRF8001 at the time you want to enter sleep that's keeping the nRF8001 awake and hence you see the high average consumption. Are you defining the pins on the ACI to a known state from the host MCU point of view? Check the REQN line before going to sleep.

  • Hi, i have write this code :

    while (!BT_RDYN_GetVal(NULL)) {  //verifico se presente interrupt non gestito
    		m_aci_isr();
    }
    lib_aci_sleep();//metto in sleep il modulo blueooth
    while (!BT_RDYN_GetVal(NULL)) {  //verifico se presente interrupt non gestito
    		m_aci_isr();
    }
    

    for wait that all the interrupt will be execute and then put the device in sleep but after the sleep command the device state : typedef enum { ACI_DEVICE_INVALID =0x00, ACI_DEVICE_TEST =0x01, ACI_DEVICE_SETUP =0x02, ACI_DEVICE_STANDBY =0x03, ACI_DEVICE_SLEEP =0x04 } aci_packed aci_device_operation_mode_t;

    is in ACI_DEVICE_INVALID and not in sleep. What i have to do for put the nRF8001 in sleep ? Thanks

Related