Hello, I'm trying to set up SPI communication with a sensor from my nrf5284_pca10056 running zephyr.
This is my prj.conf file:
CONFIG_SPI=y CONFIG_SPI_1=y CONFIG_SPI_1_NRF_SPI=y CONFIG_SPI_1=y CONFIG_SPI_NRFX=y
This is my .overlay file:
&spi1 {
compatible = "nordic,nrf-spi";
status = "okay";
sck-pin = <16>;
mosi-pin = <18>;
miso-pin = <20>;
cs-gpios = <&gpio0 17 0>;
};
And this is the code I'm trying to run:
#include <zephyr.h>
#include <misc/printk.h>
#include <spi.h>
#include <errno.h>
struct device * spi_dev;
struct spi_cs_control spi_cs;
struct spi_config spi_cfg = {
.operation = SPI_WORD_SET(8) | SPI_TRANSFER_MSB |
SPI_MODE_CPOL | SPI_MODE_CPHA | SPI_OP_MODE_MASTER,
.frequency = 1000000,
.slave = 0,
};
static void spi_init(void)
{
spi_cs.gpio_dev = device_get_binding(DT_NORDIC_NRF_SPI_SPI_1_CS_GPIOS_CONTROLLER);
spi_cs.gpio_pin = DT_NORDIC_NRF_SPI_SPI_1_CS_GPIOS_PIN;
spi_cs.delay = 0;
spi_cfg.cs = &spi_cs;
spi_dev = device_get_binding("SPI_1");
if (spi_dev == NULL) {
printk("Could not get spi_dev device \n");
return;
}
}
void spi_test_send(void)
{
int err;
static u8_t tx_buffer[1];
static u8_t rx_buffer[1];
tx_buffer[0] = 0x0F;
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
};
err = spi_transceive(spi_dev, &spi_cfg, &tx, &rx);
if (err) {
printk("SPI error: %d\n", err);
} 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)
{
spi_init();
while (1) {
spi_test_send();
k_sleep(1000);
}
}
The code compiles and runs fine. The problem I'm facing is that when i hook up my logic analyzer it shows no activity except for the SCK/clock line. The clock line starts every time spi_transcieve() is run but the other lines(MISO, MOSI and CS) shows no activity.
Here is a cut from nrf52840_pca10056.dts_compiled found in the build folder:
spi1: spi@40004000 {
#address-cells = < 0x01 >;
#size-cells = < 0x00 >;
reg = < 0x40004000 0x1000 >;
interrupts = < 0x04 0x01 >;
status = "okay";
label = "SPI_1";
compatible = "nordic,nrf-spi";
sck-pin = < 0x10 >;
mosi-pin = < 0x12 >;
miso-pin = < 0x14 >;
cs-gpios = < 0x02 0x11 0x00 >;
};
I have connected the logic analyzer in the following setup:
P0.16 - SCK P0.17 - CS P0.18 - MOSI P0.20 - MISO
I suspect there is an issue with the way I configured the spi_cs_control struct, but I'm not sure what is wrong.
If anyone has ideas on how to fix this issue I would greatly appreciate it.
Many thanks // Love Berg