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

NRF9160 SPI loopback return zero values

I build project without problems, but this simple sample return zero results for read buffer. I return 5 zero from 5 zeros.
I have right names for overlays files. nrf9160_pca10090ns.overlay  AND nrf9160_pca10090.overlay But it not correct work for me.

Main.c

#include <zephyr.h>
#include <sys/printk.h>
#include <drivers/spi.h>

static const struct spi_config spi_cfg = {
 .operation = SPI_WORD_SET(8) | SPI_TRANSFER_MSB |
 SPI_MODE_CPOL | SPI_MODE_CPHA,
 .frequency = 4000000,
 .slave = 0,
};

struct device * spi_dev;

static void spi_init(void)
{
 const char* const spiName = "SPI_3";
 spi_dev = device_get_binding(spiName);

if (spi_dev == NULL) {
 printk("Could not get %s device\n", spiName);
 return;
 }
}

void spi_test_send(void)
{
 int err_write;
 int err_read;
 u8_t tx_buffer[1]={'A'};
 u8_t rx_buffer[1];

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 = rx_buffer,
 .len = sizeof(rx_buffer),
 };
 const struct spi_buf_set rx = {
 .buffers = &rx_buf,
 .count = 1
 };
 
 printk("new iteration\n");
 err_write = spi_write(spi_dev, &spi_cfg,&tx);//spi_transceive(spi_dev, &spi_cfg, &tx, &rx);
 err_read = spi_read(spi_dev, &spi_cfg,&rx);
 if (err_write||err_read) {
 printk("SPI error_write: %d\n", err_write);
 printk("SPI error_read: %d\n", err_read);
 } else {
 /* Connect MISO to MOSI for loopback */
 printk("TX sent: %x\n", tx_buffer[0]);
 printk("RX recv: %x\n", rx_buffer[0]);
 //tx_buffer[0]++;
 } 
}

void main(void)
{
 printk("SPIM Example\n");
 //spi_init();
 int counter= 0;
 while (counter < 5) {
 spi_test_send();
 k_sleep(1000);
 counter++;
 }
}


overlay file

&spi3 {
status = "ok";
sck-pin = <10>;
mosi-pin = <11>;
miso-pin = <12>;
ss-pin = <13>;
spi-max-frequency = <4000000>;
};

prj file

CONFIG_SERIAL=y
CONFIG_TRUSTED_EXECUTION_NONSECURE=y
CONFIG_UART_INTERRUPT_DRIVEN=y
#CONFIG_UART_0_NRF_UARTE=y

# LTE link control
CONFIG_LTE_LINK_CONTROL=n
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n

# BSD library
CONFIG_BSD_LIBRARY=y
CONFIG_BSD_LIBRARY_TRACE_ENABLED=n

# network
CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_NETWORKING=y
CONFIG_NET_BUF_USER_DATA_SIZE=1
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y
#CONFIG_NET_RAW_MODE=y
CONFIG_HEAP_MEM_POOL_SIZE=1024

# SPI
CONFIG_SPI=y
CONFIG_SPI_3=y
#CONFIG_SPI_3_NRF_SPIM=y
#CONFIG_SPI_3=y 
CONFIG_SPI_NRFX=y
CONFIG_MAIN_STACK_SIZE=4096

CONFIG_LEGACY_TIMEOUT_API=y

Related