Hi,
SPI use with SDK14.2.0 leads to very high power consumption (around 400µA) on nRF52832 (QFAA). The same piece of code running with SDK12.3.0 has much lower power consumption (below 10µA).
#include "nrf_drv_spi.h"
#include "app_util_platform.h"
#include "nrf_gpio.h"
#include "nrf_delay.h"
#include "app_error.h"
#include <string.h>
#define LED_RED 29
#define LED_GREEN 30
#define LED_BLUE 31
#define SPI_SS 6
#define SPI_MISO 5
#define SPI_MOSI 4
#define SPI_SCK 3
#define SPI_INSTANCE 0 /**< SPI instance index. */
static const nrf_drv_spi_t spi = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE); /**< SPI instance. */
int main(void)
{
// Leds init
nrf_gpio_cfg_output (LED_RED);
nrf_gpio_pin_set(LED_RED);
nrf_gpio_cfg_output (LED_GREEN);
nrf_gpio_pin_set(LED_GREEN);
nrf_gpio_cfg_output (LED_BLUE);
nrf_gpio_pin_set(LED_BLUE);
// Spi init
nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
spi_config.ss_pin = SPI_SS;
spi_config.miso_pin = SPI_MISO;
spi_config.mosi_pin = SPI_MOSI;
spi_config.sck_pin = SPI_SCK;
#ifdef SDK_12_3
nrf_drv_spi_init(&spi, &spi_config, NULL);
#else
nrf_drv_spi_init(&spi, &spi_config, NULL, NULL);
#endif
// Read Spi
uint8_t address = 0x0f; // WHO_AM_I code
uint8_t read_buf[2];
address |= 0x80; // Read operation
nrf_drv_spi_transfer(&spi, &address, 1, read_buf, 2);
// Check answer
if (read_buf[1] == 0x33)
nrf_gpio_pin_clear(LED_GREEN);
else
nrf_gpio_pin_clear(LED_RED);
nrf_delay_ms(1000);
nrf_gpio_pin_set(LED_GREEN);
nrf_gpio_pin_set(LED_RED);
// Uninit Spi
nrf_drv_spi_uninit(&spi);
// Enter main loop
for (;;)
{
__WFE();
}
}
Could you please investigate this issue ?
Thanks in advance for you help,
Joris