nrf_drv_spi_transfer always returns all 0's from device.

I'm using SDK 14.2.0.

I'm trying to read the device ID register from ISM330DHCX accelerometer this way:

ret = nrf_drv_spi_transfer(&m_spi[Instance], &reg_addr, 1, read_temp, length + 1);

In the function nrf_drv_spi_transfer() NRF_DRV_SPI_USE_SPIM and SPIM_PRESENT are both true and nrfx_spim_xfer() is called.

I can't figure out if nrfx_spim_xfer() is using the parameters passed by nrf_drv_spi_transfer() above. Is it using reg_addr? Is it using the correct chip select?

My spi config:

const nrf_drv_spi_config_t spi_ism330_config =
{ \
.sck_pin = NRF_GPIO_PIN_MAP(0, 8), \
.mosi_pin = NRF_GPIO_PIN_MAP(0, 6), \
.miso_pin = NRF_GPIO_PIN_MAP(0, 5), \
.ss_pin = NRF_GPIO_PIN_MAP(0, 7), \
.irq_priority = SPI_DEFAULT_CONFIG_IRQ_PRIORITY, \
.orc = 0xFF, \
.frequency = NRF_DRV_SPI_FREQ_125K, \
.mode = NRF_DRV_SPI_MODE_3, \
.bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST \
};

I have tried to read the device ID register of a different device using this same procedure and it also returns 0x00, 0x00. I have a feeling there is some sdk config issue.

1258.sdk_config.h

  • Hi

    Are you using a development kit or a custom board for testing this application? By default the pins P0.05 - P0.08 are used by the UART for logging in most of our example projects, so there might be a conflict with the pins you're using. Can you try either using some other pins for SPI or make sure that the UART isn't configured to also use pins P0.05-P0.08?

    Best regards,

    Simon

  • Thanks for the quick response.

    I am using an nRF52840-DK development board.

    I will look into the uart config but since I'm using a development board I can find some other pins to use.

    I have three spi devices using gpio pins as listed below. Do you see any other conflicts?

    const nrf_drv_spi_config_t spi_ism330_config =
    { \
    .sck_pin = NRF_GPIO_PIN_MAP(0, 8), \
    .mosi_pin = NRF_GPIO_PIN_MAP(0, 6), \
    .miso_pin = NRF_GPIO_PIN_MAP(0, 5), \
    .ss_pin = NRF_GPIO_PIN_MAP(0, 7), \
    .irq_priority = SPI_DEFAULT_CONFIG_IRQ_PRIORITY, \
    .orc = 0xFF, \
    .frequency = NRF_DRV_SPI_FREQ_125K, \
    .mode = NRF_DRV_SPI_MODE_3, \
    .bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST \
    };

    // Magnetometer
    const nrf_drv_spi_config_t spi_lis3_config =
    { \
    .sck_pin = NRF_GPIO_PIN_MAP(0, 25), \
    .mosi_pin = NRF_GPIO_PIN_MAP(0, 23), \
    .miso_pin = NRF_GPIO_PIN_MAP(0, 22), \
    .ss_pin = NRF_GPIO_PIN_MAP(0, 24), \
    .irq_priority = SPI_DEFAULT_CONFIG_IRQ_PRIORITY, \
    .orc = 0xFF, \
    .frequency = NRF_DRV_SPI_FREQ_125K, \
    .mode = NRF_DRV_SPI_MODE_3, \
    .bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST \
    };

    // Accelerometer
    const nrf_drv_spi_config_t spi_adxl372_config =
    { \
    .sck_pin = NRF_GPIO_PIN_MAP(0, 17), \
    .mosi_pin = NRF_GPIO_PIN_MAP(0, 14), \
    .miso_pin = NRF_GPIO_PIN_MAP(0, 15), \
    .ss_pin = NRF_GPIO_PIN_MAP(0, 16), \
    .irq_priority = SPI_DEFAULT_CONFIG_IRQ_PRIORITY, \
    .orc = 0xFF, \
    .frequency = NRF_DRV_SPI_FREQ_4M, \
    .mode = NRF_DRV_SPI_MODE_3, \
    .bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST \
    };

    Regards.

    David

  • Is there documentation for nRF52840-DK board that lists the GPIO pins that are available for customer use, or which ones are reserved?

    David

  • I changed gpio pins as follows:

    .sck_pin = NRF_GPIO_PIN_MAP(1, 11), \
    .mosi_pin = NRF_GPIO_PIN_MAP(1, 13), \
    .miso_pin = NRF_GPIO_PIN_MAP(1, 10), \
    .ss_pin = NRF_GPIO_PIN_MAP(1, 12), \

    Did not help. Still receive 0x00,0x00 from device.

  • Yes, the Connector Interface section in the nRF52840 DK user guide explains what GPIOs have default settings and not.

    • P0.00 and P0.01 are used for the 32.768 kHz crystal and are not available on the connectors. For more information, see 32.768 kHz crystal on page 30. 
    • P0.05, P0.06, P0.07, and P0.08 are used by the UART connected to the interface MCU. For more information, see Virtual COM port on page 14. 
    • P0.09 and P0.10 are by default used by NFC1 and NFC2. For more information, see NFC antenna interface on page 32. 
    • P0.11–P0.16 and P0.24–P0.25 are by default connected to the buttons and LEDs. For more information, see Buttons and LEDs on page 28. 
    • 0.17 and 0.19–0.23 are by default connected to the external memory. For more information, see External memory on page 25.

    Best regards,

    Simon

Related