nRF Connect SDK - SPI burst read size.

Hi,

I have a SPI driver for nRF Connect SDK that I'm using to write and read from an IMU sensor using the nRF52840DK.

I use a SPI burst write to set the configuration file (this works fine) and a SPI burst read to read the IMU data stored on the sensor's FIFO buffer.

If I do the SPI burst read with a low array index count (say less than 500) everything works great. But if I use anything higher, the application crashes.

This is the function I'm using to do the burst read (and where the crash happens):

void bmi270_spi_fifo_read()
{
	int err;
	//TEST_SIZE set to 1000, it crashes
	uint8_t tx_buffer[TEST_SIZE];
	
	//Set the first byte as the reister address
	tx_buffer[0] = READ_CMD | FIFO_DATA;

	int length = sizeof(tx_buffer)/sizeof(tx_buffer[0]);
    //Set the other bytes to 0x00
	for (int i=1; i<length;i++)
	{
		tx_buffer[i] = 0x00;
	}

	//fifo_data is the receive buffer
	for (int i=0; i<sizeof(fifo_data);i++)
	{
		fifo_data[i] = 0x00;
	}

	const struct spi_buf tx_buf = {
		.buf = tx_buffer,
		.len = sizeof(tx_buffer)
	};
	const struct spi_buf_set tx = {
		.buffers = &tx_buf,
		.count = 1
	};

	struct spi_buf rx_buf = {
		.buf = fifo_data,
		.len = sizeof(fifo_data)
	};
	const struct spi_buf_set rx = {
		.buffers = &rx_buf,
		.count = 1
	};
	
	gpio_pin_set(gpio1_dev, GPIO_1_CS, 0);
	err = spi_transceive(spi_dev, &spi_cfg, &tx, &rx);
	gpio_pin_set(gpio1_dev, GPIO_1_CS, 1);
	
	if (err) {
		printk("SPI error: %d\n", err);
	} else {
		//Remove the first two read dummy bytes
		for(int i=2; i<sizeof(fifo_data); i++)
		{
			fifo_data[i-2] = fifo_data[i];
		}


	}	
}

Any help would be appreciated.

Related